低版本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很久没收过消息了,则那个时间的消息已经删除掉了,此时就无法消费了,即使新发的消息也无法收到,因为消费是从前往后进行的,前面的无法消费到也无法消费后面的了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,058评论 19 139
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 10,820评论 0 34
  • 背景介绍 Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O...
    高广超阅读 14,407评论 8 167
  • Kafka入门经典教程-Kafka-about云开发 http://www.aboutyun.com/threa...
    葡萄喃喃呓语阅读 13,699评论 4 54
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 10,766评论 1 15

友情链接更多精彩内容