如何从kafka主题中通过密钥获取消息

时间:2018-09-05 12:57:47

标签: java apache-kafka spring-kafka

我尝试通过密钥从kafka获取消息。我发现只有一种解决方案是使用StateStore,但我认为这不是一个好主意。 如何从kafka主题中通过密钥获取消息? 使用StateStore进行此操作好吗?

2 个答案:

答案 0 :(得分:3)

每个写到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 Consumer API

ConsumerRecord#key()

虽然Kafka并不是通过键索引的,它是通过offset索引的,还可以通过timestamp的索引。如果需要查找键,则需要将数据具体化到旨在通过键查找的系统上:关系数据库,键值存储或某个索引。您可以使用Kafka Connect轻松完成此操作,或者如果您想将其构建到服务中,则可以使用interactive queries feature of Kafka Streams

答案 1 :(得分:2)

您不能“从Kafka通过密钥获取消息”。

如果可行的话,一种解决方案是拥有与键一样多的分区,并始终将键的消息路由到同一分区。