カフカはmath.abs(key.hashCode)%numPartitionsを使用して送信するパーティションを計算します。カフカのパーティション選択アルゴリズム
hashCodeがInteger.MIN_VALUEの場合はどうなりますか?
math.abs(Integer.MIN_VALUE)が負の数であるため、kafkaは負のパーティションに送信します。私はこれをどう扱うべきですか?
カフカはmath.abs(key.hashCode)%numPartitionsを使用して送信するパーティションを計算します。カフカのパーティション選択アルゴリズム
hashCodeがInteger.MIN_VALUEの場合はどうなりますか?
math.abs(Integer.MIN_VALUE)が負の数であるため、kafkaは負のパーティションに送信します。私はこれをどう扱うべきですか?
実際に、これをカフカコードで検索すると、math.abs()を使用して、ネガをポジティブに変換しません。
それはそれを使用します。
public static int toPositive(int number) {
return number & 0x7fffffff;
}
だからそれは数が2147483648である場合でも、あなたは心配して問題を解決することができ、それは0
確定数を変換する安価な方法に変換されます。正の値にする。入力が の場合、元の値が返されます。入力番号が負の場合、返された の正の値は元の値のビットであり、0x7fffffffとは絶対的に の値ではありません。
本当ですか?どのバージョン? – ntysdd
これはkafkaコードベースにも入っているjava kafkaクライアントです。 https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/utils/Utils.javaにあります。これは新しい機能ではありません。 – GuangshengZuo
defaultPartitionerはhttps://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitionerにあります。 .java – GuangshengZuo
あなたが言ったように、まずmath.abs()を使用するので、なぜこのケースについて心配ですか? – GuangshengZuo
それは悪い質問ではありません:repl: 'math.abs(Integer.MIN_VALUE)'よりもお試しください: 'res0:Int = -2147483648' –
関連:https://stackoverflow.com/questions/5444611/math- abs-returns-wrong-value-for-integer-min-value#5444634 –