Kafka生产发送数据失败

网友投稿 1248 2022-05-28

我们使用kafka时,有时候会遇到发送数据失败的情况,其原因及解决方案如下:

1.     Kafka topic leader为-1

Kafka客户端执行如下命令查看topic的leader信息:

kafka-topics.sh --describe --zookeeper zk业务IP:24002/kafka

如果leader为-1,需查看Replicas中的副本节点是否正常,查看命令如下:

Kafka生产发送数据失败

kafka-broker-info.sh --zookeeper zk业务IP:24002/kafka

命令中可以查询到brokerid,说明节点kafka服务正常

如果leader为-1的分区对应的Replicas中节点都不正常,需要先恢复异常节点kafka服务。如果都正常但ISR列表中无节点信息,或者ISR列表中的节点不正常,需要查看Kafka服务端的unclean.leader.election.enable参数是否为true或者topic端是否配置此参数为true。如果都不为true,需要对此topic修改配置为true。

Kafka服务端的unclean.leader.election.enable参数配置查看方式如下:

Kafka topic端unclean.leader.election.enable参数配置查看方式如下:

kafka-topics.sh --describe --zookeeper zk业务IP:24002/kafka --topic topicName

如果Config中无unclean.leader.election.enable信息,则与服务端配置一致。

如果有,则此配置优先级高于服务端配置。

修改topic端此配置的方式如下:

kafka-topics.sh --alter --topic topicName --zookeeper zk业务IP:24002/kafka --config unclean.leader.election.enable=true

2.     DNS配置导致

执行 vi /etc/resolv.conf,如果有“nameserver X.X.X.X”,把此内容注释掉

3.     网络异常

生产端节点ping服务端IP,ping -s 15000 IP,如果延迟高于5ms,说明网络延迟过高,也可通过长ping来判断是否有网络丢包。

4.     CPU或者IO过高也可能导致连接失败

iostat -d -x 1查看CPU参数idle和IO参数util,idle值越高,CPU越空闲,util值越高,IO使用率越高。如果idle值小于20%,top -Hp kafkaPid查看CPU使用率高的线程,打jstack日志分析具体的原因;如果util值大于80%,查看磁盘对应的读写速率、await和svctm的大小判断对IO影响大的原因,如果读写速率比较大,排查kafka读写请求和延时,如果awati远大于svctm,IO队列太长,应用响应时间很慢。

5.     磁盘坏道或者其他原因也可能导致连接失败

如果server.log日志中有大量“java.io.IOException: Connection to IP:21007 (id: 2 rack: null) failed”日志,查看IP节点操作系统日志中是否有“Sense Key : Medium Error”信息,如果有,说明出现磁盘坏道,需修复或更换磁盘。另外,还需要打此节点的jstack信息,排查是否有阻塞或者死锁。如果是C80版本,且jstack信息中有如下信息,需打死锁补丁:

6.     如果报“TimeoutException”或偶尔发送失败,可先调大request.timeout.ms,并查看服务端num.io.threads和num.network.threads是否可以优化(这两个参数一般调整为节点磁盘个数的倍数)。根据发送的数据量的大小也可适当调整batch.size、buffer.memory、linger.ms的大小。如果发送的数据量很大且可容忍一定时延,也可以考虑开启压缩,compression.type指定压缩方式,可配置为“gzip”、“snappy”或“lz4”。

7.     ssh卡住

ssh -v -p 端口号 异常节点ip

如果如上图所示卡住,解决方式是将GSSAPIAuthentication修改为no

8.     如果是集群外客户端生产发送失败,还可以通过集群内客户端测试下生产是否成功,进一步减小排查方向。

Kafka

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spark到底是怎么确认内存够不够用的?超大超详细图解!让你掌握Spark memeoryStore内存管理的精髓
下一篇:学习英语的“七正负二原理”
相关文章