我们有一个WebSocket服务器,该服务器为每个WebSocket客户端创建一个单独的使用者组,以便每个WebSocket用户可以从彼此独立的Kafka主题接收更新。我们使用骆驼API来创建Kafka消费者(组),而该消费者仍然使用Kafka原生Java API,因此这与Camel无关,只是提及骆驼只是一个FYI。
通过使用JMX和JMC监视,我们发现,每次加入一个新的WebSocket客户端时,创建的每个新使用者组都会使Kafka心跳线程被阻塞,并且被阻塞线程的计数呈指数增长。附上截图以获取更多详细信息。想知道为什么Kafka使用者/心跳引起如此高的线程争用,从而影响了整个应用程序行为,最终耗尽了果汁。
答案 0 :(得分:0)
这个问题听起来可能与Apache Camel有关。过去我与Cafka通话时,Camel表现得很不稳定(就我而言,Camel的消费者每秒对每个偏移犯完全相同的偏移数百次,对于每个消费者而言,它们完全压倒了庞大的12节点kafka集群以及对__offsets
主题的提交)。只需将其更新到最新的Camel版本,即可解决该问题。确保您使用的是最新的骆驼版本。
另一种验证方法是在不运行Camel的情况下快速启动相同数量的命令行kafka使用者,并查看心跳是否以此方式运行。如果他们不这样做,那么我几乎可以肯定这是Camel错误/配置问题。