我们正在使用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
`
答案 0 :(得分:1)
配置没有任何明显错误。我建议你退后一步重新开始。创建一个新的消费者组。潜在地,也可以从头开始编写代码。
测试在消费者群体中具有不同数量的消费者,注意消费者应该等于或小于分区数量。进行测试,使用不同的消息负载并查看它是如何工作的。同时,也要关注Kafka集群,任何经纪人都离开集群,这将改变分区的领导者。最终,您可以阻止一些消费者,并了解重新平衡如何影响您的消费者。
希望这有帮助。