【问题标题】:How to query directly from a kafka topic?如何直接从kafka主题查询?
【发布时间】:2020-04-21 05:57:27
【问题描述】:

我查看了Interactive queriesKSQL,但我似乎无法确定是否可以根据键查询特定记录。

假设我有一个主题的记录如图:

{
  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                         |
    

    【讨论】:

      【解决方案2】:

      是的,您可以通过交互式查询来做到这一点。

      您可以创建一个 kafka 流来读取输入主题并生成一个状态存储(在 memory/rocksdb 中并与 kafka 同步)。

      此状态存储可通过键 (ReadOnlyKeyValueStore) 查询。

      您在官方文档中有多个示例: https://kafka.apache.org/10/documentation/streams/developer-guide/interactive-queries.html

      【讨论】:

        【解决方案3】:

        每个人总是忘记补充一点,如果基础数据集很小并且可以具体化,您可以使用交互式查询。

        例如,您无法在一个巨大的主题中有效地通过关键字找到一条消息。至少我找不到这样的方法

        【讨论】:

          猜你喜欢
          • 2021-11-16
          • 2022-01-03
          • 2017-04-07
          • 2017-08-30
          • 1970-01-01
          • 2021-09-09
          • 2022-10-13
          • 1970-01-01
          • 2016-06-13
          相关资源
          最近更新 更多