Kafka如何选择密钥分区?

时间:2019-04-25 03:28:28

标签: apache-kafka

假设一个主题的分区数是固定的。假设我在发布消息时提供了一个密钥(字节数组)。 Kafka将密钥映射到主题分区0、1、2、3,... N-1。

我想创建一个功能相同的函数:给定N,并且键返回与Kafka相同的分区号。

这只是(伪代码)murmur3(key)%N吗?

TIA

2 个答案:

答案 0 :(得分:1)

据我所知,Kafka根据该哈希值对键和分区进行哈希处理。这是一个有用的图表和示例。

  

Utils.abs(java.util.Arrays.hashCode(key.asInstanceOf [Array [Byte]))%numPartitions

enter image description here

刚刚找到了分区的另一个很好的例子!

enter image description here

答案 1 :(得分:0)

DefaultPartitioner使用murmur3函数为非空键的邮件计算分区。

您可以提取算法并将其添加到您的代码中:

import org.apache.kafka.common.utils.Utils;
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

第二种选择是只使用DefaultPartitioner

DefaultPartitioner partitioner = new DefaultPartitioner();
int partition = partitioner.partition(???, ???, ???, ???, ???, ???);