web-dev-qa-db-ja.com

Kafkaのキー/値ペアベースのメッセージングの目的は何ですか?

of Kafka | プロデューサーProducerRecordのキー/値のペアを、同じタイプ(すべての例が<String,String>を示す)であるだけでなく、同じvalue。例えば:

producer.send(new ProducerRecord<String, String>("someTopic", Integer.toString(i), Integer.toString(i)));

しかし、Kafkaドキュメントでは、キー/値の概念(およびその基本的な目的/ユーティリティ)が説明されている場所を見つけることができないようです。従来のメッセージング(ActiveMQ、RabbitMQなど)では、特定のトピック/キュー/交換で常にメッセージを送信していました。しかし、Kafkaは、通常の 'ole文字列メッセージではなく、キー/値のペアを必要とする最初のブローカーです。

だから私は尋ねる:プロデューサーにKVペアを送信することを要求する目的/有用性は何ですか?

53
smeeb

Kafkaは、パーティションで構成される分散logの抽象化を使用します。ログをパーティションに分割すると、システムをスケールアウトできます。

Keysは、メッセージが追加されるログ内のパーティションを決定するために使用されます。値はメッセージの実際のペイロードです。この点に関して、例は実際にはあまり「良い」ものではありません。通常、値として複合型(タプル型やJSONなど)があり、1つのフィールドをキーとして抽出します。

参照: http://kafka.Apache.org/intro#intro_topics および http://kafka.Apache.org/intro#intro_producers

一般に、キーや値はnullにもできます。キーがnullの場合、ランダムパーティションが選択されます。値がnullの場合、itcanは、ログ保持ポリシーの代わりにlog-compactionを有効にする場合に特別な「削除」セマンティクスを持つことができますトピック( http://kafka.Apache.org/documentation#compaction )。

59
Matthias J. Sax