【发布时间】:2019-04-25 16:53:03
【问题描述】:
假设某个主题的分区数是固定的。假设我在发布消息时提供了一个键——一个字节数组。 Kafka 会将密钥映射到主题分区 0,1,2,3,...N-1。
我想做一个做同样事情的函数:给定 N,键返回与 Kafka 相同的分区号。
这只是(在伪代码中)murmur3(key) % N 吗?
TIA
【问题讨论】:
标签: apache-kafka
假设某个主题的分区数是固定的。假设我在发布消息时提供了一个键——一个字节数组。 Kafka 会将密钥映射到主题分区 0,1,2,3,...N-1。
我想做一个做同样事情的函数:给定 N,键返回与 Kafka 相同的分区号。
这只是(在伪代码中)murmur3(key) % N 吗?
TIA
【问题讨论】:
标签: apache-kafka
DefaultPartitioner 使用murmur3 函数计算非空键消息的分区。
您可以只提取算法并添加到您的代码中:
import org.apache.kafka.common.utils.Utils;
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
第二种选择是只使用DefaultPartitioner:
DefaultPartitioner partitioner = new DefaultPartitioner();
int partition = partitioner.partition(???, ???, ???, ???, ???, ???);
【讨论】:
import org.apache.kafka.clients.producer.internals.DefaultPartitioner