apache-kafka - 窗口翻滚在ksql中是如何工作的?作为查询返回相同的结果,无论是否在 ksql 中使用窗口翻滚
问题描述
我正在使用 ksql 流并计算每 5 分钟发生一次的事件。这是我的查询-
select count(*), created_on_date from TABLE_NAME window tumbling (size 5 minutes) group by created_on_date;
提供结果——
2 | 2018-11-13 09:54:50
3 | 2018-11-13 09:54:49
3 | 2018-11-13 09:54:52
3 | 2018-11-13 09:54:51
3 | 2018-11-13 09:54:50
没有窗口翻滚的查询 -
select count(*), created_on_date from OP_UPDATE_ONLY group by created_on_date;
结果 -
1 | 2018-11-13 09:55:08
2 | 2018-11-13 09:55:09
1 | 2018-11-13 09:55:10
3 | 2018-11-13 09:55:09
4 | 2018-11-13 09:55:12
两个查询都返回相同的结果,那么窗口翻滚有什么不同呢?
解决方案
翻滚窗口是一个滚动聚合,并根据给定时间窗口内的键计算事件的数量。时间窗口基于流的时间戳,默认情况下继承自 Kafka 消息,但可由WITH (TIMESTAMP='my_column')
. 所以你可以作为时间戳列传递created_on_date
,然后按那里的值聚合。
第二个是整个消息流。由于您的消息本身恰好有一个时间戳,因此按它进行分组会产生基于时间的聚合的错觉。但是,如果您想知道有多少事件,例如在一小时内 - 这是没有用的(您只能在 的粒度上进行计数created_on_date
)。
因此,第一个带有窗口的示例通常是正确的方法,因为您通常希望在给定时间段内回答有关聚合的业务问题,而不是在任意数据流的过程中。
推荐阅读
- javascript - AJAX 向 PHP 后端发送 POST 请求
- java - 提交flink作业时如何处理akka AskTimeoutException
- bash - 测试文件是否具有几个可接受的文件扩展名之一的最佳方法是什么?
- algorithm - 如何知道排序算法何时完成?
- sql - 文章标签应该是多对多或带有分隔符的列
- python - Anaconda 无法识别:xgboost、catboost 和 lightgbm
- python-3.x - Python 在执行前立即关闭
- ansible - 对shell命令输出的ansible循环
- android - 如何在 android 8.1 版中获取日历电子邮件 ID?
- android - 回收站视图显示了我的视图的静态重复背景