【问题标题】:How to query directly from a kafka topic?如何直接从kafka主题查询?
【发布时间】:2020-04-21 05:57:27
【问题描述】:
我查看了Interactive queries 和KSQL,但我似乎无法确定是否可以根据键查询特定记录。
假设我有一个主题的记录如图:
{
key: 12314,
value:
{
id: "1",
name: "bob"
}
}
是否可以在主题中搜索关键字 12314? KSQL 和交互式查询是否也会消耗整个主题来进行查询?
【问题讨论】:
标签:
java
apache-kafka
ksqldb
【解决方案1】:
假设您的值是有效的 JSON(即字段名称也被引用),那么您可以使用 KSQL/ksqlDB 轻松做到这一点:
检查 ksqlDB 中的 Kafka 主题:
ksql> PRINT test3;
Format:JSON
1/9/20 12:11:35 PM UTC , 12314 , {"id": "1", "name": "bob" }
声明流:
ksql> CREATE STREAM FOO (ID VARCHAR, NAME VARCHAR)
WITH (KAFKA_TOPIC='test3',VALUE_FORMAT='JSON');
在数据到达时过滤流
ksql> SELECT ROWKEY, ID, NAME FROM FOO WHERE ROWKEY='12314' EMIT CHANGES;
+----------------------------+----------------------------+----------------------------+
|ROWKEY |ID |NAME |
+----------------------------+----------------------------+----------------------------+
|12314 |1 |bob |
【解决方案3】:
每个人总是忘记补充一点,如果基础数据集很小并且可以具体化,您可以使用交互式查询。
例如,您无法在一个巨大的主题中有效地通过关键字找到一条消息。至少我找不到这样的方法