Java 如何从卡夫卡主题中按键获取信息

Java 如何从卡夫卡主题中按键获取信息,java,apache-kafka,spring-kafka,Java,Apache Kafka,Spring Kafka,我试图通过钥匙从卡夫卡那里得到信息。我发现唯一的解决方案是使用StateStore,但我认为这可能不是一个好主意。 如何从卡夫卡主题中通过键获取信息? 使用StateStore进行此操作是一个好主意吗?您不能“通过键从Kafka获取消息” 如果可行的话,一个解决方案是拥有与密钥一样多的分区,并始终将密钥的消息路由到同一个分区。写入Kafka的每个记录都可以有一个密钥(但不一定要有!),可以通过多种方式访问密钥: 控制台使用者: $ kafka-console-consumer --bootstr

我试图通过钥匙从卡夫卡那里得到信息。我发现唯一的解决方案是使用StateStore,但我认为这可能不是一个好主意。 如何从卡夫卡主题中通过键获取信息? 使用StateStore进行此操作是一个好主意吗?

您不能“通过键从Kafka获取消息”


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

写入Kafka的每个记录都可以有一个密钥(但不一定要有!),可以通过多种方式访问密钥:

控制台使用者:

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

卡夫卡不是按键索引的,而是按偏移量索引的,还可以选择按。如果需要查找键,则需要将数据具体化到一个设计为按键查找的系统:关系数据库、键值存储或某些索引。使用Kafka Connect,您可以非常轻松地完成此操作,或者如果您想将其构建到您的服务中,您可以使用。

感谢您的回复。但是你觉得StateStore怎么样,它能解决我的问题吗?谢谢你的回复。但是你怎么看待StateStore,它能解决我的问题吗?关系数据库、键值存储、索引或交互查询都是“状态存储”,本质上是Kafka主题中记录的具体化。这是基于键进行索引的唯一方法,因为Kafka不提供该功能,所以必须使用其他按键索引的存储。如果你仔细想想,这实际上是卡夫卡的一个特点:灵活地使用最好的工具来完成这项工作。使用默认的RocksDBStore是个好主意还是可能存在更好的解决方案?我上面链接的交互式查询功能实际上会自动实例化RocksDB状态存储,这是一个相当简单的解决方案,而且已经得到了很好的验证。@ChrisMatta考虑到Kafka安装程序有一个分区,并且密钥是一个连续的长类型值,有没有一种方法可以实现OP使用KStream所要求的功能?
$ kafkacat -b <servername>:9092 -C -t topicname -o beginning -K :
ConsumerRecord#key()