关于Flink水位线与时间戳分配的疑问

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

关于Flink水位线与时间戳分配的疑问

陈柏含
您好:
      我是目前正在自学Flink以完成毕业设计的计算机专业学生。目前对Flink时间戳与水位线的代码有很多不确定且找不到权威解答的疑问,自己调试程序也因为之前没有Flink经验而对Debug变量窗口中各种复杂的结构找不到头绪。因此,抱着试一试的想法尝试通过这个邮箱寻求解答。
     下面两个图片是一个分配器



我有一下几个疑问:1.是不是我们只要调用env.addSource(...).assignTimestampsAndWatermarks(new PeriodicAssigner)就能分配时间戳和水位线了呢?但是我看不到这个类中有分配时间戳的行为,好像只是和获取时间戳和分配水位线相关。
   2.maxTs这个变量为什么能够从Long.MinValue中观察到最大的时间戳呢?
   3.这段代码的解释中提到“该分配器会返回一个时间戳等于最大时间戳减去1分钟容忍间隔的水位线”,这里所说的容忍间隔的目的是什么呢?

    感谢您的回复,非常感谢您的点拨!
Reply | Threaded
Open this post in threaded view
|

Re: 关于Flink水位线与时间戳分配的疑问

Shengkai Fang
hi, 图挂了。

1. 可以这么使用这个方法:

···

input.assignTimestampsAndWatermarks(
        WatermarkStrategy.<String>forBoundedOutOfOrderness(Duration.ofMillis(10))
                .withTimestampAssigner((event, timestamp) -> 42L));

···
TimestampAssigner 会从输入的event上读取数据 并由watermark generator 决定输出对应的watermark.

3. 容忍是由于数据会乱序.

Best,
Shengkai

陈柏含 <[hidden email]> 于2021年4月1日周四 下午5:16写道:

> 您好:
>
> 我是目前正在自学Flink以完成毕业设计的计算机专业学生。目前对Flink时间戳与水位线的代码有很多不确定且找不到权威解答的疑问,自己调试程序也因为之前没有Flink经验而对Debug变量窗口中各种复杂的结构找不到头绪。因此,抱着试一试的想法尝试通过这个邮箱寻求解答。
>      下面两个图片是一个分配器
>
>
>
> 我有一下几个疑问:1.是不是我们只要调用env.addSource(...).assignTimestampsAndWatermarks(new
> PeriodicAssigner)就能分配时间戳和水位线了呢?但是我看不到这个类中有分配时间戳的行为,好像只是和获取时间戳和分配水位线相关。
>    2.maxTs这个变量为什么能够从Long.MinValue中观察到最大的时间戳呢?
>    3.这段代码的解释中提到“该分配器会返回一个时间戳等于最大时间戳减去1分钟容忍间隔的水位线”,这里所说的容忍间隔的目的是什么呢?
>
>     感谢您的回复,非常感谢您的点拨!
>