Kafka使用math.abs(key.hashCode)%numPartitions来计算要发送的分区。
如果hashCode是Integer.MIN_VALUE?
,该怎么办?由于math.abs(Integer.MIN_VALUE)是负数,kafka会发送到负分区。怎么处理,我应该关心这个吗?
答案 0 :(得分:1)
实际上,当我用kafka代码搜索它时,它不会使用math.abs()将负数转换为正数。
它使用:
public static int toPositive(int number) {
return number & 0x7fffffff;
}
所以它可以解决你担心的问题,即使数字是2147483648,它也会被转换为0
确定性地将数字转换为正值的廉价方法。当输入是 正面,返回原始值。当输入数字为负数时,返回 正值是原始值位AND与0x7fffffff不是绝对的 值。