KSQL 窗口聚合流,会话结束



我正在使用 KSQL 窗口聚合(特别是会话窗口(按属性之一和一段时间内对来自 kafka 主题的事件进行分组。

我已经能够创建"会话开始信号"流,如本答案中所述。

-- 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;

是否可以在每次窗口聚合结束时创建"会话结束信号"流?

我假设你的意思是你想在会话窗口没有看到任何适合您为窗口配置5 seconds会话的新消息时发出一个事件/行?

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

由于源数据可能包含无序的记录,即时间戳远早于已处理行的事件,因此一旦5 SECONDS窗口过去,就无法"关闭"会话窗口。

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

宽限期过后关闭窗口不会导致当前输出任何行。 但是,KLIP 10 - 向 KSQL 添加抑制可能会在实施后为您提供所需的信息

最新更新