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一旦实现可能会给你想要的
我正在使用 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一旦实现可能会给你想要的