【问题标题】:kafka Streams session windowskafka Streams会话窗口
【发布时间】:2018-02-28 07:37:17
【问题描述】:
您好,我正在使用非活动时间 5 分钟的 kafka 会话窗口。当达到非活动时间并且会话因密钥而下降时,我想要某种反馈。
假设我有
(A,1)
记录其中 'A' 是键。现在,如果我在 5 分钟内没有得到任何 'A' 关键记录,则会话将被丢弃。
我想在会话结束时做一些操作,比如说那个会话的 (value)*2。有什么方法可以使用 Kafka Stream API 实现这一点
【问题讨论】:
标签:
apache-kafka
avro
apache-kafka-streams
【解决方案1】:
在间隔时间过去后,Kafka Streams 不会丢弃会话。相反,如果具有相同键的另一条记录在间隔时间过去后到达,则 if 将创建一个新会话,并并行维护两个会话。这允许处理乱序数据。如果乱序数据落入间隙并“连接”两个会话,甚至可能会合并两个会话。
会话默认保持 1 天。您可以通过SessionWindows#until() 方法更改此设置。如果会话过期,它将被静默丢弃。没有通知。您还需要考虑配置参数window.store.change.log.additional.retention.ms:
默认保留设置为 Windows#maintainMs() + 1 天。您可以通过在 StreamsConfig 中指定 StreamsConfig.WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG 来覆盖此设置。
因此,如果时间过去了,您想要做出反应,您应该研究允许您基于“均匀时间进度”或挂钟时间注册定期回调(某种计时器)的标点符号。如果会话在一段时间内未更新并且您认为它已“完成”,这可以让您做出反应。