Apache kafka 在ksql中,窗口翻转是如何工作的?As查询返回相同的结果,在ksql中使用或不使用窗口翻滚

Apache kafka 在ksql中,窗口翻转是如何工作的?As查询返回相同的结果,在ksql中使用或不使用窗口翻滚,apache-kafka,ksqldb,Apache Kafka,Ksqldb,我正在使用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

我正在使用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消息继承,但可由
覆盖(timestamp='my_column')
。因此,您可以将
created_on_date
作为时间戳列传递,然后根据其中的值进行聚合

第二个是整个消息流。由于您的消息本身恰好有一个时间戳,因此按时间戳分组会产生基于时间的聚合的错觉。但是,如果您想知道一小时内发生了多少事件,例如,这将是没有用的(您只能按照日期创建的
进行计数)

因此,第一个带有窗口的示例通常是正确的方法,因为您通常希望回答关于给定时间段内聚合的业务问题,而不是在任意数据流的过程中