Kafka分区和消费者群体至少一次消息传递

时间:2017-05-17 06:30:21

标签: apache-kafka kafka-consumer-api

我正在尝试使用Kafka设计一些处理代理来并行处理来自Kafka主题的消息。

我希望确保在整个消费者群体中每个消息处理完全接近一次,尽管可以容忍至少一次。

我发现文档在很多方面都不清楚,如果这是一个可行的方法,我必须知道一些具体的问题:

  • 如果将消息发布到某个主题,它是仅在主题中的所有分区中存在一次,还是在可能的多个分区上复制?我读过可以支持这两种可能性的陈述。
  • 是"偏移"每个分区或每个消费者/消费者组/分区?
  • 当我启动一个新的消费者时,它会查看整个消费者群体的偏移量还是分配给它的分区?
  • 如果我想扩大新的消费者并且没有免费分区(我相信每个分区不能超过一个消费者),kafka会重新平衡来自现有分区的现有消息,以及它如何影响抵消和现有分区的消费者?

或者我还有其他任何可能有助于我理解这一点的观点吗?

1 个答案:

答案 0 :(得分:3)

如果消息发布到某个主题,它是仅在主题中的所有分区中存在一次,还是在可能的多个分区上复制?我已经阅读了可以支持这两种可能性的陈述。

[A]:根据复制因素跨分节复制分区。如果在具有2个节点且复制因子为2的代理中有分区P1,则node1将成为P1的主要领导者,而node2也将具有P1内容/消息,但它将是副本(并且以异步方式进行复制)

是每个分区或每个消费者/消费者组/分区的“偏移量”吗?

[A]:从经纪人角度看每个分区。它也是每个消费者,因为“偏移”在消费者端被明确地跟踪/管理。消费者代码可以将此工作委托给Kafka或手动管理抵消

当我启动一个新的消费者时,它会查看整个消费者群体的偏移量还是分配给它的分区?

[A]:当新的消费者进入该组并为其分配某些分区时,kafka将触发重新平衡。从那时起,消费者只会关心它负责的分区的偏移

如果我想扩大新的消费者并且没有免费分区(我相信每个分区不能超过一个消费者),kafka会重新平衡来自现有分区的现有消息,以及它如何影响抵消和现有分区的消费者?

[A]对于并行性,理想情况是具有1-1映射b / w消费者和分区,例如如果您有10个分区,则最多可以有10个分区。如果你引入第11个,除非现有消费者离开该组,否则kafka不会为其分配分区