Kafka 消费者行为
Kafka consumer behavior
试图理解 kafka 文档中有关消费者如何访问消息的措辞。
http://kafka.apache.org/documentation.html#intro_consumers
http://kafka.apache.org/documentation.html#theconsumer
据我了解,如果有多个消费者使用相同的消费者组,则消息将被传递给一组中的一个消费者。我的问题是行中提到的交付机制是 PUSH 还是 PULL? 如果是 PUSH 什么被认为已交付?(移交语义)。如果它是一个拉动,kafka 如何确保每条消息只被一个消费者读取(消费者之间的同步)?谢谢!
If its a pull how does kafka makes sure each message is read by only one consumer?
这取决于您所说的 "Kafka" 是什么意思。 Broker 不检查任何东西,因为它是一个 pull 模型(即,broker 提供消费者请求的数据并且不关心其他任何事情)。
因此,分工是消费者的责任。例如使用 KafkaConsumer
,所有消费者实例通过 "group management protocol" 相互通信(该协议由代理提供;其他非 Java 客户端也提供组管理功能)。这允许实例决定哪个处理哪个主题分区。因此,每个分区都分配给了一个消费者。它基本上是一个 "contract":消费者实例相互对话,每个消费者承诺只使用分配给它的分区中的数据。
如果您想了解更多信息,请参阅 Kafka wiki:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design
试图理解 kafka 文档中有关消费者如何访问消息的措辞。
http://kafka.apache.org/documentation.html#intro_consumers http://kafka.apache.org/documentation.html#theconsumer
据我了解,如果有多个消费者使用相同的消费者组,则消息将被传递给一组中的一个消费者。我的问题是行中提到的交付机制是 PUSH 还是 PULL? 如果是 PUSH 什么被认为已交付?(移交语义)。如果它是一个拉动,kafka 如何确保每条消息只被一个消费者读取(消费者之间的同步)?谢谢!
If its a pull how does kafka makes sure each message is read by only one consumer?
这取决于您所说的 "Kafka" 是什么意思。 Broker 不检查任何东西,因为它是一个 pull 模型(即,broker 提供消费者请求的数据并且不关心其他任何事情)。
因此,分工是消费者的责任。例如使用 KafkaConsumer
,所有消费者实例通过 "group management protocol" 相互通信(该协议由代理提供;其他非 Java 客户端也提供组管理功能)。这允许实例决定哪个处理哪个主题分区。因此,每个分区都分配给了一个消费者。它基本上是一个 "contract":消费者实例相互对话,每个消费者承诺只使用分配给它的分区中的数据。
如果您想了解更多信息,请参阅 Kafka wiki:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design