1. ホーム
  2. apache-kafka

[解決済み] Kafkaのキー/バリューペアベースのメッセージングは何のためにあるのですか?[クローズド]

2022-02-10 02:47:14

質問内容

すべての カフカ | 生産者 表示する ProducerRecord のキーと値のペアは同じ型であるだけでなく (すべての例で <String,String> ) だけでなく、同じ . 例えば

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

しかし、Kafkaのドキュメントを見ると、キー/バリューの概念(およびその根本的な目的/効用)が説明されている場所が見つからないようです。従来のメッセージング(ActiveMQ、RabbitMQなど)では、私はいつも特定のトピック/キュー/エクスチェンジでメッセージを発射してきました。しかし、Kafkaは、通常の文字列メッセージの代わりに、キー/バリューペアを必要とする最初のブローカーです。

そこで質問です。 プロデューサーがKVペアを送信することを要求する目的・有用性は何ですか?

どのように解決するのですか?

Kafkaは分散型の ログ で構成される パーティション . ログをパーティションに分割することで、システムのスケールアウトが可能になります。

キー は、メッセージが追加されるログ内のパーティションを決定するために使われます。一方、値はメッセージの実際のペイロードである。通常、値として複雑な型(タプル型やJSONなど)を持っていて、キーとして1つのフィールドを抽出することになります。

ご覧ください。 http://kafka.apache.org/intro#intro_topics http://kafka.apache.org/intro#intro_producers

一般に、キーと値の両方または一方は null もあります。もしキーが null がランダムなパーティションとして選択されます。もし値が null それ できる は、トピックに対してログ保持ポリシーの代わりにログ圧縮を有効にした場合、特別な "delete"セマンティクスを持つようになります ( http://kafka.apache.org/documentation#compaction ).