据我所知,在Apache Kafka中,我可以编写Producer和Partitioner,使TypeA的消息转到PartitionA,TypeB的消息转到PartitionB。我还可以编写Consumer / ConsumerGroup,使Consumer / ConsumerGroupA仅使用PartitionA,而Consumer / ConsumerGroupB仅使用assign()从PartitionB使用。
但我真正想要理解的是,这是一个很好的做法。因为,根据我的理解,这将严重限制我的负载平衡能力并同时增加复杂性。原因是,如果我的TypeA消息增加,并且我想创建另一个分区来处理负载,比如PartitionA2,我创建更多消费者,将新旧消费者添加到ConsumerGroup并确保它们共同处理来自新旧分区,我能够做到吗?
答案 0 :(得分:0)
使用assign不会限制您的负载平衡功能,但只是在新消费者出现或出现故障时重新分配分区的所有问题。这是您通过订阅方式免费获得的东西。 关于您的具体问题,当您确定添加PartitionA2时,您可以添加另一个使用assign来分配给此分区的使用者。
答案 1 :(得分:0)
您可以使用订阅API将更多消费者实例添加到使用者组。使用assign API,您必须自己处理重新平衡。 此外,如果您的应用程序依赖于分区策略(在事件排序上),您可能不希望更改分区。例如,假设您有一个用于用户登录/注销操作的分区。现在,如果您将分区更改为具有2个分区(一个用于登录和注销),则应用程序可以在该特定用户的登录事件之前看到注销事件。当然你需要看看什么是typeA,以及是否可以将typeA事件发送到2个不同的分区。
答案 2 :(得分:0)
谢谢ppatierno& mrnakumar为你提供帮助,虽然我的TypeA活动都是独立的,不需要时间排序,但我必须自己处理重新平衡这一事实肯定是一种挫折。