[英]KSQL Windowed Aggregation Stream, Session ending
我使用KSQL Windowed Aggregation ,特別是Session Window將來自 kafka 主題的事件按其屬性之一分組。
如this answer中所述,我已經能夠創建“會話開始信號”的 stream 。
-- 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;
每次窗口聚合結束時,是否可以創建一個“會話結束信號”的 stream?
I'm assuming by this you mean you want to emit an event/row when a session window hasn't seen any new messages that fit into the session for the 5 seconds
you've configured for the window?
我認為目前這是不可能的。
因為源數據可能有無序的記錄,即時間戳遠早於已處理的行的事件,所以一旦5 SECONDS
Z05B8C74CBD272FBF2DE4C1AF3 5 SECONDS Z05B8C74CBD96FBF2DE4C1A35 過去了,就不能“關閉” session window。
默認情況下,如果沒有收到應包含在 session 中的新數據,現有會話將在 24 小時后關閉。 這可以通過在 window 定義中設置一個GRACE PERIOD
來控制。
一旦寬限期過去,windows 的關閉不會導致當前任何行成為 output。 但是,一旦實施, KLIP 10 - Add Suppress to KSQL可能會給你想要的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.