本文介绍使用Kafka时可能遇到的问题及解决方法。
报错“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”
报错“ERROR: Wile executing topic command : Replication factor: 1 larger than available brokers: 0.”
报错“java.net.BindException: Address already in use (Bind failed)”
如何清理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的消费速度来调整分区数,以使消费延迟符合预期。通常来说,分区数越多,能够支持的消费者的并行度也越高。