首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡夫卡生产者:如何公平地平衡卡夫卡消费者之间的信息(而不是在分区之间)

卡夫卡生产者:如何公平地平衡卡夫卡消费者之间的信息(而不是在分区之间)
EN

Stack Overflow用户
提问于 2020-10-19 13:47:36
回答 2查看 995关注 0票数 3

我有一个kakfa主题,有20个分区和5个conusmers属于同一个消费者组。这意味着我们每个消费者有4个分区。让我们说:

将分区-0分配给分区-0,分区-1,分区-2和partition-3

  • consumer-1分配给分区-4,分区-5,分区-6和partition-7

  • consumer-2分配给分区-8,分区-9,分区-10和partition-11

  • consumer-5分配给分区-12,分区-13,分区-14和partition-15

  • consumer-4分配给分区-16,分区-17,分区-18和partition-19

生产者平均向主题发送10条消息。在这种情况下,只有分区0、1、2、3、4、5、6、7、8和9才会接收消息。剩下的都是空的。我们的问题是,消费者-0和消费者-1将处理4条消息,同时,消费者-2将处理两条消息。此外,消费者4和5将做任何处理,因为他们的分区是空闲的。

在生产者端,我们正在使用DefaultPartitioner (Kafka-Client2.3.1),以便将记录均匀地发送到分区。我们想问一问是否有可能公平地产生基于kafka消费者而不是分区的消息。通过这种方式,每个使用者将只处理两个消息,并且过程复杂性将公平地分布在消费者之间。

EN

回答 2

Stack Overflow用户

发布于 2020-10-19 14:42:06

我认为您所做的计算与此无关,因为没有任何场景只会发送10条消息,如果情况确实如此,您应该考虑在消费者组中使用较少的分区和相对较少的消费者。

您可以假设,对于流中的更多记录,您的生产者将大致在分区之间以及因此在消费者之间平均分配负载,现在您不关心消费者-1接收到1000条记录,消费者-2收到998。

还请记住,如果负载正在改变,对于较低的阶段,您不会让用户空闲而是处理相同的负载,这是完全可以的,一些消费者得到4条消息,其他2条,另一些0,因为处理4条消息与您期望的负载相比基本上是“空闲”的,而且这些差异非常小,它们并不算在内;因此,当进程能力/时间非常重要时,让卡夫卡为更高的负载发挥神奇的作用吧。

票数 1
EN

Stack Overflow用户

发布于 2020-10-19 14:17:41

总的来说,我不认为这是一个好的设计,试图迫使生产者根据消费者对数据进行分区。卡夫卡主题应该将生产者和消费者之间的依赖分离开来,并将它们封装在一起。

不努力实现这一目标的两个主要原因是:

卡夫卡主题“卡夫卡”(

  • )意味着要被多个消费者群体所消费,它们(希望如此)在消费线程方面都是相互独立的。消费者群体
  • 及其消费者是不稳定的,因为其中一个消费者可能会死亡,可能会发生再平衡。然后,它需要有一个粘性的分区分配策略,这增加了您的消费者更多的困惑。然而,如果这5个消费者中有一个永远死去了呢?您将无法读取其四个分区的消息。请记住,消费者群体是一个“感人的东西”,我建议让卡夫卡尽可能多地使用它。

我知道这可能不会真正回答你的问题。如果您想要进行适当的平衡,您应该将分区的数量与使用者线程相匹配,并确保在生产者端生成的所有消息都是以平衡的方式在分区上生成的。

记住,即使在使用最多20个主题的DefaultPartitioner时,仍然可能产生不平衡的数据,因为它取决于哦,键的哈希值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64428723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档