shi*_*455 28 apache-kafka kafka-consumer-api
我们计划编写一个Kafka使用者(java),它读取Kafka队列以执行消息中的操作.
由于消费者独立运营,消息一次只能由一个消费者处理吗?否则,所有消费者处理相同的消息,因为他们在分区中具有自己的偏移量.
请帮我理解.
Luk*_*ant 86
这取决于组ID.假设您有一个包含12个分区的主题.如果您有2个具有相同组ID的Kafka消费者,他们将读取6个分区,这意味着他们将读取不同的分区集=不同的消息集.如果您有4个具有相同组ID的Kafka cosnumers,则每个都将读取三个不同的分区等.
但是当您设置不同的组ID时,情况会发生变化.如果您有两个具有不同组ID的Kafka消费者,他们将读取所有12个分区,彼此之间没有任何干扰.这意味着两个消费者将独立地阅读完全相同的消息集.如果您有四个具有不同组ID的Kafka消费者,他们将全部读取所有分区等.
Syn*_*hen 27
我发现这张来自 OReilly 的图片很有帮助:

同组内:否
跨不同组:是
Kar*_*nna 17
Kafka 会将订阅的主题中的每条消息传递给每个消费者组中的一个进程。这是通过平衡消费者组中所有成员之间的分区来实现的,以便每个分区都分配给组中的一个消费者。从概念上讲,您可以将消费者组视为恰好由多个进程组成的单个逻辑订阅者。
简单来说,Kafka 消息/记录由每个消费者组只有一个消费者进程处理。因此,如果您希望多个消费者处理消息/记录,您可以为消费者使用不同的组。