Kafka 流:加入摄取时间

Kafka streams: join on ingestion time

我有两个体积相当不同的主题(对于右侧主题中的每个事件,左侧主题中可能会发出 1000 个事件)。

我正在尝试 leftJoin 这两个主题,我的印象是连接 window 是根据处理时间而不是摄取时间计算的,导致较小的流 "run out" 太早了。

是否可以将流-流连接的时间语义指定为摄取时间(或事件时间)?

我明白为什么使用摄取时间不是一件容易的事,但在处理历史流时似乎是必需的。

Kafka Streams join 基于事件时间,即 TimestampExtractor returns(默认情况下存储在主题中的消息时间戳)并且您无法修改它(您只能使用一个不同的时间戳提取器来间接修改结果)。

但请注意,连接已执行 "eagerly",因此对于所有左侧记录,将立即完成对右侧流的查找,这可能会导致额外的 <key, (left-value,null)> 结果。

这也取决于以尽力而为的方式基于事件时间的处理顺序。 2.3 版本中的保证得到改进,使用配置参数 max.task.idle.ms 可能有助于缓解问题。

改进左连接和外连接行为以避免那些额外的结果记录在中期路线图上。由于 Kafka 是一个开源项目,您想要使用它,请帮助尽快修复此问题:)

唯一的其他选择是通过处理器实现自定义连接运算符 API。