簡體   English   中英

KSQL 窗口聚合 Stream, Session 結束

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM