我正在致力于为我们的应用程序实施基于 Kafka 的解决方案。
根据 Kafka 文档,我的理解是消费者组中的一个消费者(即一个线程)在内部映射到订阅主题中的一个分区。
假设我有一个包含 40 个分区的主题,并且有一个在 4 个实例中运行的高级使用者。我不希望一个实例使用另一实例使用的相同消息。但如果一个实例出现故障,其他三个实例应该能够处理所有消息。
- 我应该选择每个实例 10 个线程的同一个消费者组吗?
- Stackoverflow 表示实例之间的相同消费者组充当传统的同步队列机制
在 Apache Kafka 中,为什么消费者实例不能多于分区? https://stackoverflow.com/questions/25896109/in-apache-kafka-why-cant-there-be-more-consumer-instances-than-partitions
使用简单消费者或低级消费者可以控制分区,但如果一个实例出现故障,其他三个实例将不会处理第一个实例中使用的分区中的消息
首先解释一下消费者和消费者群体的概念,
消费者使用消费者组名称来标记自己,发布到主题的每条记录都会传递到每个订阅消费者组内的一个消费者实例。
这些记录将在消费者组中的消费者实例上进行有效的负载平衡。如果所有消费者实例都有不同的消费者组,那么每条记录都会广播到所有消费者进程。
Kafka 中实现消费的方式是将日志中的分区划分到消费者实例上,以便每个实例在任何时间点都是“公平份额”分区的独占消费者。如果新实例加入该组,它们将从该组的其他成员那里接管一些分区;如果一个实例死亡,它的分区将被分配给剩余的实例。
现在回答您的问题,
1. 我不希望一个实例消费另一实例消费的相同消息。但如果一个实例出现故障,其他三个实例应该能够处理所有消息。
在 Kafka 架构中默认情况下这是可能的。您只需使用相同的消费者组名称标记所有 4 个实例即可。
2. 我应该选择每个实例 10 个线程的同一个消费者组吗?
这样做将为每个线程分配一个 kafka 分区,它将从中消耗数据,这是最佳的。减少线程数量将对消费者实例之间的记录分布进行负载平衡,并且可能会使某些消费者实例过载。
3. 在 Apache Kafka 中,为什么消费者实例的数量不能多于分区的数量?
在 Kafka 中,一个分区只能分配给一个消费者实例。因此,创建比分区更多的消费者实例将导致消费者闲置,他们不会消费来自 kafka 的任何记录。
4. 我应该为每个实例选择不同的消费者组吗?
不会。这将导致记录重复,因为每条记录都将发送到所有实例,因为它们来自不同的消费者组。
希望这能澄清您的疑虑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)