首页 > 其他分享 >Flink mini-batch "引发" 的乱序问题

Flink mini-batch "引发" 的乱序问题

时间:2023-01-03 22:35:08浏览次数:43  
标签:mini Flink batch item key day 乱序

问题描述

近期业务反馈, 开启了 mini-batch 之后, 出现了数据不准的情况, 关掉了 mini-batch 之后, 就正常了, 因此业务方怀疑,是不是 Flink 的 mini-batch 存在 bug ?

问题排查

初步分析

  • mini-batch 已经在内部大规模使用, 目前没有发现一例和开启 mini-batch 有关, 同时 mini-batch 本质只是将数据进行攒批然后计算, 并没有修改核心的运算逻辑.
  • 开关 mini-batch 的关键时数据的批量计算, 是否在批量计算使得原本存在 bug 的代码暴露问题
  • 业务在 Flink SQL 使用了多个双流 join 和 group window,如果不注意使用,很可能导致乱序,最终的错误结果是某条数据没有被正常更新, 和乱序的情况比较类似.

综上考虑, 整体排查的方向还是排查 SQL 的业务逻辑是否存在乱序的 case, 开启了 mini-batch 后是否加剧了这种乱序的产生

代码逻辑梳理

flowchart LR join1(join1 \n item_day, item_key) --> join2 join2(join2 \n item_day, item_key) --> join3 join3(join3 \n item_day, item_key) --> group1 group1(group1 \n item_day, item_key) --> group2 group2(group2 \n item_day, item_key, key1, key2, key3) --> sink sink(sink \n pk: item_day, item_key)

抽象之后的 DAG 如图所示:

  1. join1, join2, join3, group1 都是基于 item_day 和 item_key 进行 hash 数据经过这些算子均按照 [item_day, item_key] 进行 hash
  2. group2 算子的 group key 为 [item_day, item_key, key1, key2, key3],Flink 会基于这些字段整体进行 hash
  3. Sink 算子的主键为 [item_day, item_key] ,数据流向 Sink 算子时会按照 [item_day, item_key] 进行 hash,这种就出现了乱序问题.

分析:
key1, key2, key3 时由前面的 join1 算子补充的维度字段, 前面的 join 采用的是 left join, 因此可能会存在 item_day 和 item_key 相同的数据, 对应的 key1, key2, key3 并不相同, 经过 group2 会触发具有相同 [item_day, item_key] 的数据,被 hash 到不同的并发

修复手段

最后的 group by [item_day, item_key, key1, key2, key3], 核心还是为了聚合相同的 item_day和 item_key, key1, key2, key3 不属于 value 类型数据, 也参与聚合, 主要为了取最后一条.

-- 原始 SQL
SELECT item_day, item_key, key1, key2, key3, sum(value)
FROM XXX
GROUP BY item_day, item_key, key1, key2, key3

-- 修改为
SELECT item_day, item_key, last_value(key1), last_value(key2), last_value(key3), sum(value)
FROM XXX
GROUP BY item_day, item_key

经过修改之后,保证整个 Flink 处理链路中, 相同的主键对应的数据,无论经过多少次 hash, 都是在同一个并行处理,这种才能保证最终结果的正确性

结论

修改后, 业务的结果恢复正常, 因此 Mini-batch 并不是导致作业出现问题的核心原因, 核心原因还是乱序, 而开启 mini-batch 会加剧这种乱序问题的触发。

开启 mini-batch 之后, 具有相同 key 的数据, 如果落到了同一个 batch, 这样物理上的时间差就更短,因而更容易暴露问题。

标签:mini,Flink,batch,item,key,day,乱序
From: https://www.cnblogs.com/0x12345678/p/17023546.html

相关文章

  • flink orc hive 2.1.1 源码bug处理
    先说一下我们公司的线上集群配置: CDH6.3.1,hive2.1.1 ,由于公司是做车联网业务方向的,所以数据量很大,同事小A,在往集群写数据,发现写入的数据不能在hive表里查询,他写往......
  • Flink:容错机制
    检查点检查点的保存最理想的情况是,每处理完一个数据就保存一下当前的状态,但是这样处理效率不高。周期性的触发保存:每隔一段时间去做一次存档,间隔时间可以进行设置。保......
  • minidown2
    Markdown学习标题二级标题三级标题字体Hello,World!Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说java,走向人生巅峰分割线图片超链接点击跳转到狂......
  • minidown使用
    #Markdown学习#标题##二级标题###三级标题##字体**Hello,World!***Hello,World!****Hello,World!***~~Hello,World!~~Hello,World!##引用>选择狂神说java,走向人生巅......
  • Flink:状态编程
    Flink中的状态在流处理中,数据是连续不断到来的。每个任务进行计算处理时,可以基于当前数据直接转换得到输出结果,也可以依赖一些其他数据。这些由一个任务维护,并且用来计算......
  • 移植linux2.6.32.2到mini2440
    移植一个干净的源码,便于学习linux驱动准备工作:1.主机--ubuntu10.042.编译工具--友善arm-linux-gcc-4.4.33.硬件--mini2440(预装友善的supervivi+kernel+root_fs......
  • Flink Shuffle 3.0: Vision, Roadmap and Progress
    摘要:本文整理自阿里云高级技术专家宋辛童(五藏),在FFA2022核心技术专场的分享。本篇内容主要分为五个部分:FlinkShuffle的演进流批融合云原生自适应Shuffle3.0一、Flin......
  • FFA 2022 主会场 Keynote:Flink Towards Streaming Data Warehouse
    摘要:本文整理自ApacheFlink中文社区发起人、阿里巴巴开源大数据平台负责人王峰(莫问),在FlinkForwardAsia2022主会场的分享。本篇内容主要分为四个部分:实时流计算全球......
  • Flink 在米哈游的应用实践
    摘要:本文整理自米哈游大数据实时计算团队负责人张剑,在FFA的分享,本篇内容主要分为三个部分:发展历程和平台建设场景应用实践未来展望一、发展历程和平台建设米哈游成立于20......
  • Flink Forward Asia 2022 主论坛概览
    2022 年 11 月 26-27 日,Flink Forward Asia(FFA)峰会成功举行。Flink Forward Asia 是由 Apache 软件基金会官方授权、由阿里云承办的技术峰会,是目前国内最大的 ......