2016-10-07 15 views
0

異なるキーのメッセージを別のパーティションに保存しようとしています。例えばKafka - 同じパーティションに異なるキーが格納されているメッセージ

ProducerRecord<String, String> rec1 = new ProducerRecord<String, String>("topic", "key1", line); 
ProducerRecord<String, String> rec2 = new ProducerRecord<String, String>("topic", "key2", line); 
producer.send(rec1); 
producer.send(rec2); 

しかし、私は私のプロデューサークラスを実行しようとすると、それは常に単一のパーティションに保存されています。

ドキュメントごとに、DefaultPartitionermessage key hash codeを使用してパーティションを検索します。 私はこの質問Kafka partition key not working properly‏も見ましたが、0.930バージョンのKafkaクライアントライブラリでByteArrayPartitionerクラスが見つかりません。

props.put("partitioner.class", "kafka.producer.ByteArrayPartitioner") 

アップデート:私は、コードを使用してオンザフライでトピックを作成してい

パーティションを手動で作成すると、正常に動作します。

答えて

1

トピックが「オンザフライ」で作成された場合は、num.partitionsパラメータ(デフォルト値は1)に従ってパーティションが作成されます。パーティションが1つしかない場合は、すべてのデータがこの単一のパーティションに移動します。

ただし、複数のパーティションがあっても、パーティションには異なるキーが割り当てられます。 num-partitions == num-distinct-keysがあっても、同じパーティションに2つの異なるキーを割り当て、いくつかのパーティションを空のままにして、ハッシュの衝突が発生する可能性があります。

に異なるキーが常に異なるパーティションに移動するようにするには、コンシューマパーティションを使用するか、パーティション番号を直接指定する必要があります。

+0

お返事ありがとうございます。 – Shankar

関連する問題