K SQL Оконный поток агрегирования, завершение сеанса - PullRequest
0 голосов
/ 25 мая 2020

Я группирую события, поступающие от kafka topi c по одному из его свойств и с течением времени, используя K SQL Windowed Aggregation , в частности Окно сеанса .

Мне удалось создать поток «сигналов начала сеанса», как описано в этот ответ .

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

Можно было бы создать поток сигналов о завершении сеанса каждый раз, когда оконное агрегирование завершается?

1 Ответ

0 голосов
/ 02 июня 2020
• 1000 *

Я не думаю, что это возможно в настоящее время.

Поскольку исходные данные могут иметь записи, которые неупорядочены, т.е. событие с меткой времени намного раньше, чем уже обработанные строки, окно сеанса не может быть «закрыто» по истечении окна 5 SECONDS.

Существующие сеансы по умолчанию будут закрыты через 24 часа, если не будут получены новые данные, которые должны быть включены в сеанс. Этим можно управлять, задав GRACE PERIOD в определении окна.

Это закрытие windows по истечении льготного периода не приводит к выводу какой-либо строки в настоящее время. Однако KLIP 10 - Добавить подавление в K SQL может дать вам желание, когда оно будет реализовано

...