Kafka常见问题

本文介绍使用Kafka时可能遇到的问题及解决方法。

如何清理Kafka组件输出日志

当组件服务输出日志过大,占用存储空间过多时,您可以进入Kafka服务输出日志的存储目录$LOG_DIR_ROOT(默认存储实际目录为/mnt/disk1/log),进入后根据需要删除kafka、cruise-control、kafka-schema-registry、kafka-rest-proxy等kafka组件日志目录下的日志文件。

如何清理Kafka-Manager服务输出日志

当组件服务输出日志过大,占用存储空间过多时,您可以进入Kafka-Manager服务输出日志的存储目录$LOG_DIR_ROOT/kafka-manager(默认存储实际目录为/mnt/disk1/log/kafka-manager),进入后根据需要删除相关日志文件。

是否可以停止Kafka-Manager服务

Kafka-Manager只是Kafka集群的管理软件,Kafka对外提供读写服务不依赖Kafka-Manager服务。如果您没有集成其他Kafka管理平台,建议您保留Kafka-Manager服务。如果您确认不需要Kafka-Manager服务,您可以直接在EMR管控页面停止该服务。

报错“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”

问题分析:

  • Kafka服务异常,集群Broker退出进程。

  • Kafka服务的ZooKeeper地址错误。

解决方法:

  • 请结合日志排查问题。

  • 请您使用集群配置管理中Kafka组件的ZooKeeper连接地址。

报错“java.net.BindException: Address already in use (Bind failed)”

JMX端口被占用,您可以在命令行前手动指定一个JMX端口即可。示例如下。

JMX_PORT=10101 kafka-topics.sh --bootstrap-server core-1-1:9092 --list

报错“current leader's lastest offset xxxx is less than replica's lastest offset xxxxxx”

如果确认数据都已经消费完成,或者数据可以丢失,您可以将Kafka Broker的配置项unclean.leader.election.enable的值修改为true并重启Broker服务,待Broker服务重启完成后,再将unclean.leader.election.enable修改为false。

Kafka数据日志目录Log Directory磁盘写满

当Kafka数据日志目录磁盘被写满,会导致相应的Log Directory异常Offline,您可以参见EMR Kafka磁盘写满运维,选择合适的方法进行处理。

报错“Too many open files”

问题分析:

分区过多或者网络连接过多。

解决方法:

通过修改/etc/security/limits.conf系统配置文件的方式,修改ulimit open files的限制,将该配置文件末尾的“* soft nofile”和 “* hard nofile”的值改成需要的大小并重启问题节点服务。

如何评估一个Kafka topic所需的分区数?

评估一个Kafka topic所需的分区数 ,需要考虑多种因素并根据实际情况进行调整。首先,根据实际情况压测得出当前集群配置producer在期望延迟内的单分区每秒吞吐量,然后预估topic预期的业务流量,计算出所需的分区数。此外,还需要根据consumer的消费速度来调整分区数,以使消费延迟符合预期。通常来说,分区数越多,能够支持的消费者的并行度也越高。