KSQL Windowed Aggregation Stream, Session结束

KSQL Windowed Aggregation Stream, Session ending

我正在使用 KSQL Windowed Aggregation, specifically the Session Window.

按其属性之一对来自 kafka 主题的事件进行分组

我已经能够创建 "session start signals" 的流,如 中所述。

-- create a stream with a new 'data' topic:
CREATE STREAM DATA (USER_ID INT) 
    WITH (kafka_topic='data', value_format='json', partitions=2);

-- create a table that tracks user interactions per session:
CREATE TABLE SESSION AS
SELECT USER_ID, COUNT(USER_ID) AS COUNT
  FROM DATA
WINDOW SESSION (5 SECONDS)
   GROUP BY USER_ID;

-- Create a stream over the existing `SESSIONS` topic.
CREATE STREAM SESSION_STREAM (ROWKEY INT KEY, COUNT BIGINT) 
   WITH (kafka_topic='SESSIONS', value_format='JSON', window_type='Session');

-- Create a stream of window start events:
CREATE STREAM SESSION_STARTS AS 
    SELECT * FROM SESSION_STREAM 
    WHERE WINDOWSTART = WINDOWEND;

是否可以在每次窗口聚合结束时创建一个 "session end signals" 的流?

我假设你的意思是你想在会话 window 没有看到任何适合 5 seconds 会话的新消息时发出 event/row您已为 window?

配置

目前我认为这是不可能的。

因为源数据可能有乱序的记录,即时间戳比已处理的行早得多的事件,会话 window 不能 'closed' 一旦5 SECONDS window 已过去。

默认情况下,如果未收到应包含在会话中的新数据,现有会话将在 24 小时后关闭。这可以通过在 window 定义中设置 GRACE PERIOD 来控制。

一旦宽限期结束,windows 的关闭不会导致当前输出任何行。但是,KLIP 10 - Add Suppress to KSQL一旦实现可能会给你想要的