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 :
ConsumerRecord#key()
ただし、Kafkaはキーでインデックス付けされていません。オフセットでインデックス付けされており、オプションで timestamp でインデックス付けされています。キーを検索する必要がある場合は、キーで検索するように設計されたシステム(リレーショナルデータベース、キー値ストア、または何らかのインデックス)にデータを具体化する必要があります。これはKafka Connectを使用してかなり簡単に行うことができます。または、サービスに組み込む場合は、 Kafka Streamsのインタラクティブなクエリ機能 を使用できます。
「カフカからキーでメッセージを取得」することはできません。
1つの解決策は、実用的であれば、キーと同じ数のパーティションを持ち、常にキーのメッセージを同じパーティションにルーティングすることです。