kafka0.9 Consumer poll()方法阻塞

最近项目中用到了Kafka0.9,在使用0.9的Consumer API的时候遇到了poll()方法阻塞的问题。程序没有报任何错误,只是持续在poll()方法处阻塞。深入poll()方法可以看到是在AbstractCoordinator.ensureCoordinatorKnown()方法中出现了死循环。在循环中不停地输出如下DEBUG日志:

需要关注的是这处信息:

看样子是kafka的连接出了问题。不过我的Producer向kafka写数据是没问题的,使用kafka提供的消费工具kafka-console-consumer.sh执行消费也是没问题的。

在网上找到了一些关于这个现象的解释:在客户端进行消费之前会为ConsumerGroup向Kafka集群申请coordinater节点。kafka集群在配置或分配coordinater节点的时候可能会短暂的报这个错误。

我这里不是短暂的报错,而是陷入了死循环。目前可以想到的就是我的kafka集群配置出现问题了。在简单粗暴地将zookeeper上kafka的配置完全删掉再重启Kafka后,消费可以正常执行了。至于问题具体出在哪儿还没有找到。目前只能是持续关注,等问题再次出现了。

就这样。

还有一点,在查询解决方案的过程中看到:如果kafka是部署在Docker上,出现了这样的问题需要检查有没有配置环境变量ADVERTISE.HOST.NAME和ADVERTISE.HOST.PORT。

######

已有6条评论 发表评论

  1. DL /

    您好,我也碰到了这个问题,按照您的方法我解决了,我想问一下,你这个debug的日志是怎么出来的。我在intellij中debug,但是没有你那个日志。

    1. robin / 本文作者

      配置的log4j

  2. zz /

    楼主解决了嘛 我也遇到了 。。。

    1. robin / 本文作者

      没有。因为是测试环境,干脆重新部署了一遍,这样就恢复了。后来复盘时,想到曾经在kafka-manager中误删除了一个非常重要的topic,恩,就是__consumer_offsets,应该是这个问题导致的

      1. solo /

        可能并不是这个问题,因为我没做这个操作
        我也是三个broker集群,broker0,broker1,broker2
        只要杀掉broker0 就出现帖子里的问题,跟踪代码和你的错误一模一样
        但是单杀broker1或broker2 并不会出现在这个问题

  3. ylisoftware /

    遇到相同问题已经解决;产看kafka对应服务器时间没有同步。设定好校时器后重新校时后正常

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据