我有一个kakfa主题,有20个分区和5个conusmers属于同一个消费者组。这意味着我们每个消费者有4个分区。让我们说:
将分区-0分配给分区-0,分区-1,分区-2和partition-3
。
生产者平均向主题发送10条消息。在这种情况下,只有分区0、1、2、3、4、5、6、7、8和9才会接收消息。剩下的都是空的。我们的问题是,消费者-0和消费者-1将处理4条消息,同时,消费者-2将处理两条消息。此外,消费者4和5将做任何处理,因为他们的分区是空闲的。
在生产者端,我们正在使用DefaultPartitioner (Kafka-Client2.3.1),以便将记录均匀地发送到分区。我们想问一问是否有可能公平地产生基于kafka消费者而不是分区的消息。通过这种方式,每个使用者将只处理两个消息,并且过程复杂性将公平地分布在消费者之间。
发布于 2020-10-19 14:42:06
我认为您所做的计算与此无关,因为没有任何场景只会发送10条消息,如果情况确实如此,您应该考虑在消费者组中使用较少的分区和相对较少的消费者。
您可以假设,对于流中的更多记录,您的生产者将大致在分区之间以及因此在消费者之间平均分配负载,现在您不关心消费者-1接收到1000条记录,消费者-2收到998。
还请记住,如果负载正在改变,对于较低的阶段,您不会让用户空闲而是处理相同的负载,这是完全可以的,一些消费者得到4条消息,其他2条,另一些0,因为处理4条消息与您期望的负载相比基本上是“空闲”的,而且这些差异非常小,它们并不算在内;因此,当进程能力/时间非常重要时,让卡夫卡为更高的负载发挥神奇的作用吧。
发布于 2020-10-19 14:17:41
总的来说,我不认为这是一个好的设计,试图迫使生产者根据消费者对数据进行分区。卡夫卡主题应该将生产者和消费者之间的依赖分离开来,并将它们封装在一起。
不努力实现这一目标的两个主要原因是:
卡夫卡主题“卡夫卡”(
我知道这可能不会真正回答你的问题。如果您想要进行适当的平衡,您应该将分区的数量与使用者线程相匹配,并确保在生产者端生成的所有消息都是以平衡的方式在分区上生成的。
记住,即使在使用最多20个主题的DefaultPartitioner时,仍然可能产生不平衡的数据,因为它取决于哦,键的哈希值。
https://stackoverflow.com/questions/64428723
复制相似问题