0%

窗口总结

窗口类型

  • Hopping Window 固定时间,重叠窗口
  • Tumbling Window 固定时间,不重叠,无间隙的滚动窗口
  • Session Window 动态大小,不重叠的数据驱动窗口

avatar

窗口参数

  • SIZE 窗口大小
  • ADVANCE BY 开启窗口间隔(Hopping 类型专用)
  • RETENTION 窗口保留时间
  • GRACE PERIOD 窗口宽限期,保证延迟的数据也可以被包含到窗口内

注意: SIZE + GRACE PERIOD < RETENTION

时间单位

  • MILLISECOND, MILLISECONDS
  • SECOND,SECONDS
  • MINUTE,MINUTES
  • HOUR,HOURS
  • DAY,DAYS

窗口特性

  • 使用聚合函数生产Table时,必须保证Table中的数据是有限的,而且需要估算对应的数据量。
  • KSQL 时间基于UTC时间,所以不能执行东八区每年一个窗口,但是对于每小时或者每分钟不影响
  • KSQL 窗口默认宽限期为24小时,默认保存时间可能为无限长(未找到相关文档)。
  • KSQL 不支持子查询
  • 使用窗口做集合操作时,尽量添加’RETENTION’和’GRACE PERIOD’配置。
  • 窗口聚合后产生的null值可以通过创建新的Stream然后用WHERE过滤掉。

State 存储问题

  • 存储在changelog主题中的数据量取决于键的数量,键的大小,聚合的大小以及是否对聚合进行了窗口化(如果有的话),窗口保留时间是多少。
  • 对于非窗口式聚合,总大小应大致为(密钥大小+聚合大小)乘以密钥数目。

重要尺度

  • 吞吐量 通常,更高的吞吐量需要更多的资源。
  • 查询类型 您实现的吞吐量将很大程度上取决于您运行的查询类型。
    Filter < Joins < Aggregations
  • 查询数量 服务器上的可用资源在所有查询中共享。每个查询会增加一点CPU开销。您应该避免在一个ksqlDB集群上运行大量查询
  • 数据结构 ksqlDB处理将序列化的Kafka记录映射到流或表的架构中的列。
  • 分区数量 Kafka Streams创建一个RocksDB状态存储实例进行聚合,并为给定ksqlDB服务器处理的每个主题分区加入连接。每个RocksDB状态存储实例的高速缓存加实际存储的数据都有50 MB的内存开销。
  • Key空间 对于聚合和Joins,Kafka Streams、 RocksDB尝试将状态存储的工作集保留在内存中,以避免I / O操作。如果键很多,则需要更多的内存。这也使对状态存储的读写更加昂贵。请注意,状态存储中的数据大小不受内存(RAM)限制,而仅受ksqlDB服务器上的可用磁盘空间限制。
1
2
3
4
5
6
7
CREATE TABLE pageviews_per_region AS
SELECT regionid, COUNT(*) FROM pageviews
WINDOW HOPPING (SIZE 30 SECONDS, ADVANCE BY 10 SECONDS,
RETENTION 7 DAYS, GRACE PERIOD 30 MINUTES)
WHERE UCASE(gender)='FEMALE' AND LCASE (regionid) LIKE '%_6'
GROUP BY regionid
EMIT CHANGES;