卡夫卡的消费行为

时间:2016-10-13 21:22:38

标签: apache-kafka kafka-consumer-api

尝试理解kafka文档中有关消费者如何访问消息的措辞。

http://kafka.apache.org/documentation.html#intro_consumers http://kafka.apache.org/documentation.html#theconsumer

据我所知,如果有多个具有相同消费者群体消费者的消费者将被传递给一个群组中的一个消费者。我的问题是关于行中提到的交付机制是PUSH还是PULL? 如果是PUSH被认为是什么被交付?(移交语义)。如果它是拉,那么kafka如何确保每个消息只被一个消费者读取(消费者之间的同步)?谢谢!

1 个答案:

答案 0 :(得分:0)

  

如果它是拉,那么kafka如何确保每个消息只被一个消费者读取?

这取决于你的意思“卡夫卡”。经纪人不检查任何东西,因为它是 pull 模型(即,经纪人提供消费者请求的数据而不关心其他任何东西)。

因此,消费者有责任分工。例如,使用<root> <level value="ALL" /> <appender-ref ref="Root.File"/> </root> ,所有消费者实例通过“组管理协议”相互通信(该协议由代理提供;其他非Java客户端也提供组管理功能)。这允许实例决定处理哪个主题分区。因此,每个分区都分配给一个消费者。它基本上是一个“契约”:消费者实例互相交谈,每个消费者承诺只使用分配给它的分区中的数据。

如果您想了解更多信息,请参阅Kafka wiki:https://cwiki.apache.org/confluence/display/KAFKA/Kafka+0.9+Consumer+Rewrite+Design