Apache kafka 使用KSQL查询Kafka流KTable

Apache kafka 使用KSQL查询Kafka流KTable,apache-kafka,apache-kafka-streams,ksqldb,ktable,Apache Kafka,Apache Kafka Streams,Ksqldb,Ktable,我正在编写这个Kafka streams应用程序,它获取Kafka主题中注册的传感器读数(作为JSON中的消息),并以每分钟、每小时和每天为单位对这些读数的值进行聚合。然后,我具体化从这些聚合派生的KTables,并使用默认状态存储来存储它们。我想知道是否可以使用KSQL查询这些表,而Kafka Streams是KSQL的运行时,通过Kafka Streams应用程序打包的KTables在KSQL中不可用。如果希望在KSQL中有一个表,则需要编写一个KSQL查询来创建该表 但是请注意,KSQL查

我正在编写这个Kafka streams应用程序,它获取Kafka主题中注册的传感器读数(作为
JSON
中的消息),并以每分钟、每小时和每天为单位对这些读数的值进行聚合。然后,我具体化从这些聚合派生的
KTables
,并使用默认状态存储来存储它们。我想知道是否可以使用
KSQL

查询这些表,而Kafka Streams是KSQL的运行时,通过Kafka Streams应用程序打包的
KTables
在KSQL中不可用。如果希望在KSQL中有一个
,则需要编写一个KSQL查询来创建该

但是请注意,KSQL查询是连续查询,而不是关系数据库中的“查找”查询

相比之下,Kafka Streams支持一种称为“交互式查询”(interactive queries)的功能,允许您对
KTable
的状态进行基于键的查找


最后,KSQL目前正在进行公开“交互式查询”的工作。

谢谢@matthias-j-sax。关于Kafka Streams,您知道是否可以使用密钥前缀查询
KTable
的状态吗?这是可能的,但很难做到正确。您需要使用“正确”的开始/结束键执行
range()
查询,并手动筛选结果。例如,如果您查找字符串“foo*”,可以使用“foo”作为开始,“fooz”作为结束(或类似)。找出正确的开始-结束键对于不错过任何结果非常重要。请注意,查找是在序列化字节上完成的,因此,了解序列化格式和字节布局以设置严格的边界非常重要。-如果有疑问,也许可以设定更大的界限,以确保你不会错过任何东西。