Apache kafka 多个Kafka使用者能否从分区读取相同的消息
我们计划编写一个Kafka使用者(java),它读取Kafka队列以执行消息中的操作 由于消费者独立运行,消息一次是否只由一个消费者处理?否则,所有使用者处理相同的消息,因为他们在分区中有自己的偏移量 请帮我理解。这要看情况而定。假设您有一个包含12个分区的主题。如果有两个Kafka使用者具有相同的组Id,则它们都将读取6个分区,这意味着它们将读取不同的分区集=不同的消息集。如果您有4个具有相同组Id的Kafka余数,则每个余数都将读取三个不同的分区等Apache kafka 多个Kafka使用者能否从分区读取相同的消息,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我们计划编写一个Kafka使用者(java),它读取Kafka队列以执行消息中的操作 由于消费者独立运行,消息一次是否只由一个消费者处理?否则,所有使用者处理相同的消息,因为他们在分区中有自己的偏移量 请帮我理解。这要看情况而定。假设您有一个包含12个分区的主题。如果有两个Kafka使用者具有相同的组Id,则它们都将读取6个分区,这意味着它们将读取不同的分区集=不同的消息集。如果您有4个具有相同组Id的Kafka余数,则每个余数都将读取三个不同的分区等 但当您设置不同的组Id时,情况会发生变化。
但当您设置不同的组Id时,情况会发生变化。如果您有两个具有不同组Id的Kafka使用者,则他们将读取所有12个分区,彼此之间不会产生任何干扰。这意味着两个消费者将独立阅读完全相同的消息集。如果您有四个具有不同组Id的Kafka使用者,他们都将读取所有分区等。Kafka将把订阅主题中的每条消息传递给每个使用者组中的一个进程。这是通过平衡使用者组中所有成员之间的分区来实现的,这样每个分区就被分配给组中的一个使用者。从概念上讲,您可以将使用者组视为碰巧由多个进程组成的单个逻辑订阅者
简而言之,卡夫卡消息/记录只由每个消费群体的一个消费进程处理。因此,如果您希望多个消费者处理消息/记录,您可以为消费者使用不同的组。我发现来自OReilly的此图像非常有用: 同一组内:否
- 同一组(组1)中的两个使用者(使用者1,2)不能使用来自分区(分区0)的相同消息
- 两个组中的两个使用者(来自组1的使用者1,来自组2的使用者1)可以使用来自分区(分区0)的相同消息
主题
不是队列,因为一旦从主题
中消费了消息,它就会停留在那里(除非其生存期已过),并且偏移量会移动到下一个,而对于队列,一旦消费了消息,消息将从该队列中删除。有序集也只能通过分区进行排序。非常感谢。这有助于我理解消费者群体背后的真正目的。