Kafka流:在摄取时间加入



我有两个容量变化很大的主题(可能是在左侧主题中为右侧主题中的每个事件发出1000个事件(。

我正试图将这两个主题leftJoin放在一起,我的印象是,连接窗口是在处理时间而不是摄取时间内计算的,这会导致较小的流过早地"用完"。

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

我可以理解为什么使用摄取时间不是一件容易的事情,但在处理历史流时,这似乎是必要的。

Kafka Streams的加入是基于事件时间的,即TimestampExtractor返回的任何内容(默认情况下是存储在主题中的消息时间戳(,您不能修改它(只能使用不同的时间戳提取器来间接修改结果(。

不过,请注意,联接是"急切地"执行的,因此对于所有左侧记录,会立即查找右侧流,这可能会导致额外的<key, (left-value,null)>结果。

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

它在中期路线图上改进左联接和外联接行为,以避免那些额外的结果记录。由于Kafka是一个开源项目,你想学习它,请帮助尽快解决这个问题:(

唯一的其他替代方案是通过处理器API实现自定义的联接运算符。

相关内容

  • 没有找到相关文章

最新更新