基于kafka中转数据流情况下,下游任务的watermark推进问题。

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

基于kafka中转数据流情况下,下游任务的watermark推进问题。

nobleyd
如题,如果我任务本身是多个连续的window处理。
现在想拆分,基于kafka中转数据。但面临的第一个麻烦问题就是watermark的推进,当然简单实现也能满足功能,但是比如我窗口都是5min的,会导致下游窗口晚5min触发。比如window1
=> window2的场景下,使用maxOutOfOrderness为1min的时候,[0-5)
的数据在6min数据到的时候触发计算。如果拆分了,那么window2需要11min时候window1输出[5-10)的数据到达window2时候才会触发window2的[0,5)的计算。

方案1:一个是将time(window时间)放入key,然后下游使用session
window,正常肯定没问题,但是如果数据出现异常,比如上游某个五分钟数据分2批次到达下游可能会导致下游计算错误(规则类型window,业务不允许部分数据做计算)。
方案2:上游window想办法定期输出watermark到kafka,下游解析ts作为watermark?
Reply | Threaded
Open this post in threaded view
|

Re: 基于kafka中转数据流情况下,下游任务的watermark推进问题。

nobleyd
或者如果不行我就继续合并在一起了。
但是这样就需要解决一个其他问题。

问题描述
能否基于检查点/保存点重启的时候,唯独让KafkaSource不基于检查点和保存点中的offset继续消费,而是通过我指定的offset开始消费。
简而言之:我希望保留状态的同时,忽略部分数据。应用场景:数据延迟了,但我希望快速赶到最新数据去,但不希望直接不基于保存点重启任务,因为部分算子的状态比较重要,是天级别的状态,需要一整天保留。



yidan zhao <[hidden email]> 于2021年2月26日周五 下午5:48写道:

> 如题,如果我任务本身是多个连续的window处理。
> 现在想拆分,基于kafka中转数据。但面临的第一个麻烦问题就是watermark的推进,当然简单实现也能满足功能,但是比如我窗口都是5min的,会导致下游窗口晚5min触发。比如window1
> => window2的场景下,使用maxOutOfOrderness为1min的时候,[0-5)
> 的数据在6min数据到的时候触发计算。如果拆分了,那么window2需要11min时候window1输出[5-10)的数据到达window2时候才会触发window2的[0,5)的计算。
>
> 方案1:一个是将time(window时间)放入key,然后下游使用session
> window,正常肯定没问题,但是如果数据出现异常,比如上游某个五分钟数据分2批次到达下游可能会导致下游计算错误(规则类型window,业务不允许部分数据做计算)。
> 方案2:上游window想办法定期输出watermark到kafka,下游解析ts作为watermark?
>