假设一个主题的分区数是固定的。假设我在发布消息时提供了一个密钥(字节数组)。 Kafka将密钥映射到主题分区0、1、2、3,... N-1。
我想创建一个功能相同的函数:给定N,并且键返回与Kafka相同的分区号。
这只是(伪代码)murmur3(key)%N吗?
TIA
答案 0 :(得分:1)
据我所知,Kafka根据该哈希值对键和分区进行哈希处理。这是一个有用的图表和示例。
Utils.abs(java.util.Arrays.hashCode(key.asInstanceOf [Array [Byte]))%numPartitions
刚刚找到了分区的另一个很好的例子!
答案 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(???, ???, ???, ???, ???, ???);