【问题标题】:How KSQL Windowed query works and maximum window sizeKSQL 窗口化查询的工作原理和最大窗口大小
【发布时间】:2020-05-14 00:22:48
【问题描述】:

关于在使用窗口的 KSQL wrt 查询中进行查询,我有两个问题:

  1. 假设我有以下聚合查询:

    SELECT id, COUNT(*) FROM testtopic_stream WINDOW TUMBLING (SIZE 30 DAYS) GROUP BY id;

上述聚合的结果是仅使用进来的新报价计算得出的,还是实际上会遍历过去 30 天的所有数据然后执行聚合?

  1. 查询的最大可能窗口大小是多少?我看到我可以设置一个窗口甚至 30 天,并且查询现在似乎工作正常。是否有推荐的最大窗口大小?

【问题讨论】:

    标签: apache-kafka streaming ksqldb


    【解决方案1】:

    这取决于auto.offset.reset 策略。如果将其设置为"earliest",则查询将使用来自底层流/主题的所有数据(注意,“全部”实际上是指存储在主题中的所有数据,即,它取决于主题保留设置多少数据这将是)。如果您将配置设置为"latest"——默认值是什么——查询将仅处理上游生产者在查询启动后写入的数据。

    在这两种情况下,窗口的大小都不会影响将要处理的数据。

    窗口大小没有限制。你可以选择任何你想要的尺寸。注意:对于翻滚窗口,较小的窗口大小实际上会增加存储需求,而较大的窗口大小会减少存储需求,因为需要并行维护的窗口较少。

    【讨论】:

    • 我明白了。因此,让我们考虑一下字数统计的经典示例。如果我有一个持久查询跟踪主题上每个词的字数,每次新数据流入主题时,更新的字数计算为(表中的previousWordCount + 当前事件中的wordCount),对吗?
    • 我猜你的意思是“连续查询”(不确定什么是“持久查询”)。除此之外,正确。根据您是否指定非窗口聚合,计数也可以在所有时间中,按照窗口规范进一步“分组”到时间桶中。
    • 啊,我明白你的意思了。如果我有 1 分钟的跳跃窗口,提前 10 秒,我会因为 60/10 而得到 6 个不同的计数?是否可以只在查询中显示这 6 个不同的聚合中的一个?
    • "如果我有 1 分钟的跳跃窗口,提前 10 秒,我会因为 60/10 而得到 6 个不同的计数?" - 正确的。 “是否有可能只在查询中显示这 6 个不同的聚合中的一个?” - 不知道你的意思......用例是什么?这不是一个翻滚窗口用例吗?
    • 我有兴趣跟踪一个字段在过去 60 秒内的滚动总和,其中每 10 秒,最旧的数据 10 秒数据被丢弃。所以我在想,我可以使用 60 秒的跳跃窗口,提前 10 秒。
    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多