Kafka Java Consumer Client 是单线程的吗

问题描述 投票:0回答:1

我们正在开始使用 Kafka, 在阅读本文时 - https://docs.confluence.io/kafka-clients/java/current/overview.html - 这似乎暗示客户端是单线程的。

*

由于这种单线程模型,在 应用程序正在处理调用 poll() 返回的记录。 这意味着如果出现以下情况,该消费者将脱离该消费组: 事件循环终止或者记录处理延迟 导致会话超时在下一次迭代之前过期 循环。

这是否意味着 Kafka 确实只期望每个 provcess/JVM 有一个线程? Spring 如何为侦听器启用并发? (它是否为每个并发线程打开到 Kafka 服务器的 TCP 连接(例如:-为 factory.setConcurrency(5) 打开 5 个独立的 TCP 连接)?)

apache-kafka spring-kafka
1个回答
0
投票

这个假设几乎是正确的。 Apache Kafka 建议主题中的每个分区有一个线程。或者更好的说法是:没有一个分区可以由不同的线程处理。然而,同一个线程可以处理多个分区。这就是他们所说的

subscription
。因此,单个
KafkaConsumer
可以在单个线程中处理多个分区(甚至来自不同主题)。

并发的工作方式与您想象的有点不同:没有更多的可用分区。因此,如果一个主题中有两个分区,则只有两个并发

KafkaConsumer
实例处于活动状态。所有其他人都只是在同一个消费群体中闲置。

所以,从技术上来说是的:

open 5 independent TCP connection
,但这并不意味着它们都在消耗主题中的记录。

© www.soinside.com 2019 - 2024. All rights reserved.