我使用带有多线程功能的Spring kafka(ConcurrentKafkaListenerContainerFactory),我发现了两种类型的线程名称,如下所示: 1.#0-1-kafka-consumer-1 2.#0-1-kafka-listener-3
那我怎么能理解这两种线程呢?他们之间有什么关系? 提前谢谢!
答案 0 :(得分:2)
消费者线程轮询KafkaConsumer
消息并将它们交给调用您的监听器的监听器线程。
KafkaConsumer
的早期版本需要这样做,因为缓慢的侦听器可能会导致分区重新平衡 - 必须在使用者线程上发送心跳。
他们现在已经在KafkaConsumer
中修复了这个问题(心跳在后台发送)所以在2.0中我们只有一个线程类型,并且在用户线程上调用了监听器。 2.0.0.M2(里程碑2)现已上市;该计划将于下月底左右发布。
答案 1 :(得分:0)
在之前的Kafka版本(< 0.10.1
)中,听力缓慢是一种痛苦。非活动消费者线程被视为已死,因此发生了重新平衡。这就是我们引入线程并将监听器中的处理记录传递给单独线程的原因。所以,那些线程前缀就是这个。
在最新版本2.0
中,基于Kafka 0.10.2
,我们删除了该逻辑,因为现在心跳发生在Kafka客户端本身并且正确。因此,我们不再需要担心缓慢的监听器 - 现在一切都在消费者的线程上工作。