我正在尝试使用Kafka设计一些处理代理来并行处理来自Kafka主题的消息。
我希望确保在整个消费者群体中每个消息处理完全接近一次,尽管可以容忍至少一次。
我发现文档在很多方面都不清楚,如果这是一个可行的方法,我必须知道一些具体的问题:
或者我还有其他任何可能有助于我理解这一点的观点吗?
答案 0 :(得分:3)
如果消息发布到某个主题,它是仅在主题中的所有分区中存在一次,还是在可能的多个分区上复制?我已经阅读了可以支持这两种可能性的陈述。
[A]:根据复制因素跨分节复制分区。如果在具有2个节点且复制因子为2的代理中有分区P1,则node1将成为P1的主要领导者,而node2也将具有P1内容/消息,但它将是副本(并且以异步方式进行复制)
是每个分区或每个消费者/消费者组/分区的“偏移量”吗?
[A]:从经纪人角度看每个分区。它也是每个消费者,因为“偏移”在消费者端被明确地跟踪/管理。消费者代码可以将此工作委托给Kafka或手动管理抵消
当我启动一个新的消费者时,它会查看整个消费者群体的偏移量还是分配给它的分区?
[A]:当新的消费者进入该组并为其分配某些分区时,kafka将触发重新平衡。从那时起,消费者只会关心它负责的分区的偏移
如果我想扩大新的消费者并且没有免费分区(我相信每个分区不能超过一个消费者),kafka会重新平衡来自现有分区的现有消息,以及它如何影响抵消和现有分区的消费者?
[A]对于并行性,理想情况是具有1-1映射b / w消费者和分区,例如如果您有10个分区,则最多可以有10个分区。如果你引入第11个,除非现有消费者离开该组,否则kafka不会为其分配分区