【发布时间】:2019-02-10 15:14:27
【问题描述】:
我尝试通过密钥从 kafka 获取消息。我发现唯一的解决方案是使用 StateStore,但我认为这可能不是一个好主意。 如何从kafka主题中按键获取消息? 使用 StateStore 进行此操作是个好主意吗?
【问题讨论】:
标签: java apache-kafka spring-kafka
我尝试通过密钥从 kafka 获取消息。我发现唯一的解决方案是使用 StateStore,但我认为这可能不是一个好主意。 如何从kafka主题中按键获取消息? 使用 StateStore 进行此操作是个好主意吗?
【问题讨论】:
标签: java apache-kafka spring-kafka
您不能“通过密钥从 Kafka 获取消息”。
如果可行,一个解决方案是拥有与键一样多的分区,并始终将键的消息路由到同一分区。
【讨论】:
写入 Kafka 的每条记录都可以选择有一个密钥(但不是必须的!),可以通过多种方式访问该密钥:
控制台消费者:
$ kafka-console-consumer --bootstrap-server <servername>:9092 --topic topicname --from-beginning --property print.key=true --property key.separator=:
$ kafkacat -b <servername>:9092 -C -t topicname -o beginning -K :
ConsumerRecord#key()
Kafka 不是按键索引的,它是按偏移量索引的,也可以通过timestamp 进行索引。如果您需要查找一个键,那么您需要将数据具体化到一个旨在通过键查找的系统:关系数据库、键值存储或某些索引。您可以使用 Kafka Connect 轻松完成此操作,或者如果您想将其构建到您的服务中,您可以使用 interactive queries feature of Kafka Streams。
【讨论】: