卡夫卡的分区选择算法

时间:2017-08-25 02:53:01

标签: java scala apache-kafka

Kafka使用math.abs(key.hashCode)%numPartitions来计算要发送的分区。

如果hashCode是Integer.MIN_VALUE?

,该怎么办?

由于math.abs(Integer.MIN_VALUE)是负数,kafka会发送到负分区。怎么处理,我应该关心这个吗?

1 个答案:

答案 0 :(得分:1)

实际上,当我用kafka代码搜索它时,它不会使用math.abs()将负数转换为正数。

它使用:

public static int toPositive(int number) {
    return number & 0x7fffffff;
}

所以它可以解决你担心的问题,即使数字是2147483648,它也会被转换为0

  

确定性地将数字转换为正值的廉价方法。当输入是         正面,返回原始值。当输入数字为负数时,返回        正值是原始值位AND与0x7fffffff不是绝对的         值。