web-dev-qa-db-ja.com

kafkaトピックからキーでメッセージを取得する方法

Kafkaからキーでメッセージを取得しようとします。 StateStoreを使用することで解決策は1つしか見つかりませんでしたが、それは良い考えではないかもしれません。 kafkaトピックからキーでメッセージを取得する方法?この操作にStateStoreを使用するのは良い考えですか?

Kafkaに書き込まれるすべてのレコードは、オプションでキーを持つことができます(ただし、そうする必要はありません!)、キーにはいくつかの方法でアクセスできます。

コンソールの消費者:

$ kafka-console-consumer --bootstrap-server <servername>:9092 --topic topicname --from-beginning --property print.key=true --property key.separator=:

kafkacat

$ kafkacat -b <servername>:9092 -C -t topicname -o beginning -K :

JavaコンシューマAPI

ConsumerRecord#key()

ただし、Kafkaはキーでインデックス付けされていません。オフセットでインデックス付けされており、オプションで timestamp でインデックス付けされています。キーを検索する必要がある場合は、キーで検索するように設計されたシステム(リレーショナルデータベース、キー値ストア、または何らかのインデックス)にデータを具体化する必要があります。これはKafka Connectを使用してかなり簡単に行うことができます。または、サービスに組み込む場合は、 Kafka Streamsのインタラクティブなクエリ機能 を使用できます。

3
Chris Matta

「カフカからキーでメッセージを取得」することはできません。

1つの解決策は、実用的であれば、キーと同じ数のパーティションを持ち、常にキーのメッセージを同じパーティションにルーティングすることです。

2
Gary Russell