一个source多个sink的同步问题

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

一个source多个sink的同步问题

lgs
source是kafka,有一个rowtime定义:

            .field("rowtime", DataTypes.TIMESTAMP(0))
            .rowtime(Rowtime()
                .timestamps_from_field("actionTime")
                .watermarks_periodic_bounded(60000)
            )

有两个sink,第一个sink是直接把kafa的数据保存到postgres。
第二个sink是定义一个1小时的tumble window,然后定义了一个udf,udf里面去查询第一个sink保存的数据。
    st_env.scan("source") \
         .window(Tumble.over("1.hour").on("rowtime").alias("hourlywindow"))
\
         .group_by("hourlywindow") \
         .select("udf(...)")
         ...


现在的问题是:第二个sink的tumble window触发的时候,数据库里面的数据已经保存了下一个小时的数据了。

有什么办法让tumble window在一个小时结束后马上触发?现在观察的是需要下一个小时的数据来了,才能触发上一个小时的窗口。




--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

Re: 一个source多个sink的同步问题

Jark
Administrator
watermark 的计算是跟数据上的 event-time 相关的。你的数据是不是间隔一小时来一波的呢?
比如 10:00 的数据之后,就是 11:00 的数据,但是要1小时后才到来?


Best,
Jark

On Tue, 7 Jul 2020 at 17:20, lgs <[hidden email]> wrote:

> source是kafka,有一个rowtime定义:
>
>             .field("rowtime", DataTypes.TIMESTAMP(0))
>             .rowtime(Rowtime()
>                 .timestamps_from_field("actionTime")
>                 .watermarks_periodic_bounded(60000)
>             )
>
> 有两个sink,第一个sink是直接把kafa的数据保存到postgres。
> 第二个sink是定义一个1小时的tumble window,然后定义了一个udf,udf里面去查询第一个sink保存的数据。
>     st_env.scan("source") \
>          .window(Tumble.over("1.hour").on("rowtime").alias("hourlywindow"))
> \
>          .group_by("hourlywindow") \
>          .select("udf(...)")
>          ...
>
>
> 现在的问题是:第二个sink的tumble window触发的时候,数据库里面的数据已经保存了下一个小时的数据了。
>
> 有什么办法让tumble window在一个小时结束后马上触发?现在观察的是需要下一个小时的数据来了,才能触发上一个小时的窗口。
>
>
>
>
> --
> Sent from: http://apache-flink.147419.n8.nabble.com/
>
lgs
Reply | Threaded
Open this post in threaded view
|

Re: 一个source多个sink的同步问题

lgs
This post was updated on .
是1个小时才到来。10:00- 11:00的数据,11:01分到来。

但是现在的问题是这个数据来了,我的第一个sink马上就保存到数据库了, 11:02进数据库。但是第二个sink,因为有tumble
window,所以10:00- 11:00的数据,需要到12:01,才会触发这个窗口。触发窗口之后去查询数据库,这时的数据库已经把11:00 - 12:00的数据已经写进去了(第一个sink做的事情)。



--
Sent from: http://apache-flink.147419.n8.nabble.com/
Reply | Threaded
Open this post in threaded view
|

回复: 一个source多个sink的同步问题

admin


窗口的触发逻辑就是这样的,必须watermark达到了窗口结束时间才会触发,可能10-11点的窗口中的数据最大只有10:59呢
| |
Sun.Zhu
|
|
[hidden email]
|
签名由网易邮箱大师定制


在2020年07月7日 18:44,lgs<[hidden email]> 写道:
是1个小时才到来。10:00- 11:00的数据,11:01分到来。

但是现在的问题是这个数据来了,我的第一个sink马上就保存到数据库了, 11:02进数据库。但是第二个sink,因为有tumble
window,所以10:00- 11:00的数据,需要到12:01,才会触发这个窗口。



--
Sent from: http://apache-flink.147419.n8.nabble.com/