Flink sink schema 字段设计小技巧

微信扫一扫,分享到朋友圈

Flink sink schema 字段设计小技巧

本系列每篇文章都比较短小,不定期更新,从一些实际的 case 出发抛砖引玉,提高小伙伴的姿♂势水平。本文介绍 Flink sink schema 字段设计小技巧,阅读时长大概 3 分钟,话不多说,直接进入正文!

sink schema 中添加 version 版本字段

如 title,直接上实践案例和使用方式。

实践案例及使用方式

  • 「非故障场景下产出的每条记录的 version 字段值为 1」

  • 「故障场景下,可以在同一 sink 中产出 version > 1(非 1)的数据,代表故障修复数据提供给下游消费」

可应对的故障场景

上游 flink 任务 A 发生故障导致产出脏数据至 kafka X,并且下游消费方消费了脏数据(下游消费方按照下面两类进行划分):

  • 「下游为 flink 任务」:flink 任务 B 消费 kafka X 中的脏数据,结果计算并产出错误数据

  • 「下游为 OLAP 引擎以及 BI 看板」:结果导致看板展示数据异常

首先介绍下避免以及处理上述问题的整体思路:

  • 「1.优化逻辑,保障上游任务稳定性」:首先通过一些优化手段,尽可能保证上游 flink 任务 A 不出现故障

  • 「2.配置作业监控报警」:针对整条链路配置对应的监控报警等,以及时发现和定位问题

  • 「3.制定故障处理、修复预案」:需要制定对应的故障处理、修复预案,一旦出现故障,需要有可处理故障的能力

  • 「4.下游针对数据源特性改进消费和处理方式」:保障即使消费了脏数据也不会对业务逻辑产生影响

下文主要介绍 「第 3 点」 ,出现上述故障时修复的方案,针对以上场景,目前有如下 3 种可选方案修复数据:

  • 「方案 1 – 离线方式修复」:通过离线方式产出修复数据,对脏数据进行覆盖操作。缺点是故障修复延迟较高,需要切换离线、实时数据源,人工操作成本较高

  • 「方案 2 – 实时方式修复」:重跑修数逻辑,产出修复数据至 kafka X-fix,下游 flink 任务 B 重新从 kafka X-fix 中的指定 offset 开始消费,计算并产出正确的数据。此方案对下游 flink 任务 B 来说,需要改动代码逻辑,存在修数 topic 和原 topic 切换逻辑,修复逻辑较为复杂

  • 「方案 3 – 实时方式修复(本小节 version 字段方案)」:为避免下游产生数据源切换操作带来的高成本操作,可在原有 kafka topic 中产出修复数据,通过 version 字段区分正常产出数据以及修复数据,相对方案 1 和 2 的优点在于,不存在数据源切换逻辑,下游通过控制 version 字段值就可消费到对应的修复数据,明显降低人工操作成本,且修复逻辑相对简单

Note: 方案 3 需要对 Kafka X 预留一定的 buffer,否则在产出修复数据时,由于写入或读出 Kafka X 的 QPS 过高,会影响正常产出数据的任务。

sink schema 中添加时间戳字段

实践案例及使用方式

有窗口场景中,sink schema 中可添加以下字段:

  • 「flink_process_start_time(long):代表 flink 窗口开始逻辑处理的时间戳」

  • 「flink_process_end_time(long):代表 flink 窗口结束逻辑处理的时间戳」

  • 「window_start(long):代表 flink 窗口开始时间戳」

  • 「window_end(long):代表 flink 窗口结束时间戳」

生产实践案例

  • 「flink_process_start_time,flink_process_end_time 在开发、测试、验数阶段可帮助用户定位数据偏差原因」

  • 「window_start,window_end 可以帮助用户定位每个窗口处理是否有丢数,及每个窗口处理的具体数据」

本文主要介绍了在 sink schema 中添加 version(版本),时间戳扩展字段的小技巧,以帮助用户在生产环境中提升实时数据故障修复效率以及可用性。

更多 Flink 实时大数据分析相关技术博文,视频。后台回复 “flink” 获取。

点个赞+在看,少个 bug   :point_down:

微信扫一扫,分享到朋友圈

Flink sink schema 字段设计小技巧

在 Kubernetes 集群中 gRPC 的负载均衡

上一篇

Kubernetes Pod水平自动伸缩(HPA)

下一篇

你也可能喜欢

Flink sink schema 字段设计小技巧

长按储存图像,分享给朋友