Flink 第8.3章 Flink WarterMark 源码信息 未完结

参考:

Flink源码分析——WaterMark源码分析 - 知乎

Flink源码解析系列-- WatermarkGenerator接口及其常用实现_打酱油的葫芦娃的博客-CSDN博客

Flink教程-聊聊 flink 1.11 中新的水印策略 - 知乎

EventTime

我们一般使用 EventTime 来进行各种数据的统计,但是数据从产生到进入 Flink 的过程中,经常遇到各种错序问题,那么就需要使用 WaterMark 来进行解决,我们先看看最简单的一个根据 EventTime 开窗进行统计的示例程序:

在这个示例里面,我们构建了 <某用户ID,时间戳> 的一个数据流,然后自定义了 AutoWatermarkInterval、assginTimestampsAndWatermarks、TimestampAssigner,然后根据用户ID进行开窗,进行每4秒钟统计一次 count。

WatermarkStrategy

在 assignTimestampsAndWatermarks 中,需要传入一个 watermarkStrategy,那么我们先来看看这个 watermarkStrategy 是干什么用的。

根据备注我们可以看到,这个接口主要是在 sources 生成 watermark,并且怎么进行记录内部的时间戳的(通过继承 TimestampAssignerSupplier 得到)。

这里面有一些静态方法,和一些 default 方法,提供了一些默认的实现规则供我们调用。

除了 createWatermarkGenerator。

createWatermarkGenerator

提供了一个需要实现的接口方法,来装填一个 WatermarkGenerator。使用这个 WatermarkGenerator 来创建时间戳。

createTimestampAssigner

提供一个 RecordTimestampAssigner 来进行数据的注册 todo。

withTimestampAssigner

传入一个 TimestampAssignerSupplier,或者 SerializableTimestampAssigner 来注册WatermarkStrategyWithTimestampAssigner 。

withIdleness

按照注释说明,这个主要是可以进行空闲的 Source 检测,如果超时没有数据接入,那么就会标记为 idle 状态,不会造成下游数据的堵塞。

使用的 WatermarkStrategyWithIdleness 进行创建,createWatermarkGenerator 使用的是 WatermarksWithIdleness 进行创建。

org.apache.flink.api.common.eventtime.WatermarkStrategyWithIdleness

org.apache.flink.api.common.eventtime.WatermarksWithIdleness

WatermarksWithIdleness 使用 IdlenessTimer 来进行计时操作,如果超时后,在 onPeriodicEmit(output) 中,将 output 设置为 Idle()状态。

assignTimestampsAndWatermarks

org.apache.flink.streaming.api.datastream.DataStream#assignTimestampsAndWatermarks(org.apache.flink.api.common.eventtime.WatermarkStrategy<T>)

获取到数据源后,我们进行了 Watermark 的计算方式就是使用的这个进行的。

还是一样看源码:

通过传入的 watermarkStratey,获取当前的并行度,构建一个 TimestampsAndWatermarksTransformation。 然后返回链式调用。

Watermark

org.apache.flink.api.common.eventtime.Watermark

看看源码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`flink.checkpoint.timeout` 和 `flink.checkpoint.interval` 是 Flink 中与检查点相关的两个参数,它们之间存在一定的关系。 - `flink.checkpoint.timeout` 参数定义了执行检查点的超时时间,即当执行检查点操作时,如果超过了指定的超时时间仍未完成,则会被视为失败。 - `flink.checkpoint.interval` 参数定义了两次检查点之间的时间间隔,即多久执行一次检查点。 这两个参数的关系可以通过以下几点来说明: 1. `flink.checkpoint.timeout` 应该大于等于 `flink.checkpoint.interval`。确保超时时间足够长以容纳一个完整的检查点操作,否则可能会导致检查点失败。 2. 如果 `flink.checkpoint.timeout` 被设置得过小,可能会导致检查点操作在超时之前无法完成。在这种情况下,可以适当增加 `flink.checkpoint.timeout` 的值,以便给检查点操作足够的时间来完成。 3. 如果 `flink.checkpoint.interval` 被设置得过小,系统将更频繁地进行检查点操作,从而导致更高的系统开销和资源消耗。因此,在设置 `flink.checkpoint.interval` 时需要综合考虑系统的性能要求和资源限制。 需要根据应用程序的实际情况和需求来评估和调整 `flink.checkpoint.timeout` 和 `flink.checkpoint.interval` 的值。同时,还应该考虑 Flink 集群的配置和硬件资源是否能够支持所选的超时时间和间隔。在设置之后,建议进行性能测试和实际生产环境的实验来验证和优化这两个参数的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值