Spring Boot Kafka应用程序无法接收消息

时间:2018-05-22 20:52:25

标签: java spring-boot apache-kafka

我们正在使用Spring boot 1.5.4.RELEASE,我可以在我们的gradle项目中看到以下jar:spring-kafka-1.1.6,kafka-clients-0.10.1.1

我们有一个简单的接收器类,如下所示:

`

   @KafkaListener(topics = "${mytopic.consume}")
    public void receive(byte[] event) {
        <our code here>...
    }

//$mytopic.consume is being picked up from properties file

`

代码在大多数日子里工作正常,我能够正确接收事件并处理它们,然后突然停止接收消息。没有错误,没有警告。我可以在主题上看到消息,但我们的监听器似乎并没有消耗它们。 我尝试重新启动应用程序,重新启动eclipse,在运行和调试模式之间切换,更改kafka属性中的组名称 - 但没有任何作用。我们在几个小时后查看应用程序,然后你去了 - 它再次开始工作,我们收到所有被卡住的消息。有时问题可能持续一天以上。我的怀疑是它不是一个日食问题,但可能是企业Kafka的设置方式或Kafka中的一些错误(因为我在谷歌上找不到这样的问题的可能性较小)。即使在IBM bluemix上部署了微服务,我也注意到了这个问题。

任何指针都将非常感激。

以下是我们在应用程序中配置的一些属性(可能会引起您的兴趣):     `

acks=all
     retries=0
     batch.size=<a number greater than 10k>
     linger.ms=1
     buffer.memory=<a number in 10s of MBs - our incoming message is just few KBs>
     ENABLE_AUTO_COMMIT_CONFIG=true
     AUTO_COMMIT_INTERVAL_MS_CONFIG=1ms
     SESSION_TIMEOUT_MS_CONFIG=30ms
     zookeeper.sync.time=200ms
     zookeeper.session.timeout=400ms

`

1 个答案:

答案 0 :(得分:1)

配置没有任何明显错误。我建议你退后一步重新开始。创建一个新的消费者组。潜在地,也可以从头开始编写代码。

测试在消费者群体中具有不同数量的消费者,注意消费者应该等于或小于分区数量。进行测试,使用不同的消息负载并查看它是如何工作的。同时,也要关注Kafka集群,任何经纪人都离开集群,这将改变分区的领导者。最终,您可以阻止一些消费者,并了解重新平衡如何影响您的消费者。

希望这有帮助。