低版本kafka客户端无法消费消息的原因分析

错误现象:kakfa客户端一直无法获取消息

环境:

kakfa版本:kafka_2.11-0.10.2.0

java kafka客户端版本0.8.2.0

分析与解决

第一步:参看消费者的基本情况

执行./bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group malm_log  --topic success_top  --zookeeper 192.168.50.170:2181

如果offset数字一直在动,说明一直在消费,说明不存在问题,return;

如果offset数字一直不动,看Owner是不是有值存在

如果Owner是空,说明消费端的程序已经跟Kafka断开连接,应该排查消费端是否正常,return;

如果Owner不为空,就是有上图上面的类似于bennu_index_benuprdapp02-1444748505181-f558155a-0的文字,继续看下面内容

第二步:查看消费端的程序代码

一般的消费代码是这样的看看自己的消费代码里面,存不存在处理消息的时候出异常的情况

如果有,需要try-catch一下,其实不论有没有异常,都用try-catch包一下最好,如下面代码return;

原因:如果在处理消息的时候有异常出现,又没有进行处理,那么while循环就会跳出,线程会结束,所以不会再去取消息,就是消费停止了。

第三步:查看消费端的配置

消费代码中一般以以下方式创建Consumer消费端有一个配置,叫fetch.message.max.bytes,默认是1M,此时如果有消息大于1M,会发生停止消费的情况。

此时,在配置中增加props.put("fetch.message.max.bytes", "10 * 1024 * 1024");即可return;

原因:目前Kafka集群配置的运行最大的消息大小是10M,如果客户端配置的运行接收的消息是1M,跟Kafka服务端配置的不一致,

则消息大于1M的情况下,消费端就无法消费,导致一直卡在这一条消息,现象就是消费停止。

第四步 更换consumer group_id

这种情况一般发生在消息很久未消费过,原因是由于消息只在服务器上保存一定时间,如果consumer很久没收过消息了,则那个时间的消息已经删除掉了,此时就无法消费了,即使新发的消息也无法收到,因为消费是从前往后进行的,前面的无法消费到也无法消费后面的了

你可能感兴趣的:(低版本kafka客户端无法消费消息的原因分析)