所以我有一个设计,其中有多个生产者P1,P2,P3,P4 ... PN写入具有32个分区的单个主题T1。
另一方面,在一个消费者群体中,我最多有32个消费者。
我想平衡邮件的使用量。
阅读文档,我可以看到3个选项:
1.自己定义分区(缺点是我必须知道最后一条消息的发送位置或为每个生产者P定义一个分区范围)
2.定义一个密钥,并将分区决策留给Kafka哈希算法(缺点-运气将定义负载平衡)
(根据Chris的回答,负载平衡应留给哈希算法)-现实表明,由于消费者绑定到分区,因此不能为消费者提供均匀的分配,我必须了解哈希算法才能选择一个好的密钥-在我看来,这与选择分区是一样的(而且必须
我当前的代码是使用UUID作为密钥。对所选分区的分析以及由此引起的消费者工作表明,分布可能远非相等。我在下面复制它:
上图显示了在5分钟内每个分区使用UUID作为我的密钥接收到的消息数量-当时我有8个使用者。 消耗大约2分钟。红色单元格在其中一个使用者中显示9个请求队列,而其他使用者的负载较低-或绿色使用者中的负载为零。 如果随机密钥不是一个好的选择,我应该选择什么?
我真的需要自己编写总体负载平衡算法吗?我想念什么吗?
答案 0 :(得分:0)
在使用者之间平衡负载是Kafka的一项定义功能,它允许水平扩展。
生产者使用的记录密钥使它可以工作。该密钥定义了消息继续运行的分区,并且一个消费者将按顺序使用任何分区,因此您的生产者应使用密钥策略,该策略可以产生均匀的传播,并确保相关的消息具有相同的密钥(如果订购很重要的话)(熊请注意,如果要求严格订购,则在飞行请求中还需要考虑其他因素。
前者是平衡负载的角色-消费者之间没有循环机制,只是在每个组中的消费者之间尽可能均匀地共享分区,并且它们独立进行轮询。如果密钥分布合理,则每个分区将具有大约相同数量的记录。
因此,要实现有效的负载平衡,您唯一的责任就是使用一种良好的策略来创建消息密钥,并使用计划扩展到至少要使用的分区来定义主题。