【问题标题】:How does Kafka choose a partition for key?Kafka如何为key选择分区?
【发布时间】:2019-04-25 16:53:03
【问题描述】:

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

我想做一个做同样事情的函数:给定 N,键返回与 Kafka 相同的分区号。

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

TIA

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    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
    【解决方案2】:

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

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

    刚刚发现了另一个很好的分区示例!

    【讨论】:

    • hashCode() 与 JVM 实现不一致,因此这不是正确的函数
    • @cricket_007 啊我不知道。谢谢你的帮助。
    猜你喜欢
    • 2018-12-17
    • 2020-03-18
    • 2018-10-20
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多