《Apache Flink 案例集(2022版)》——2.数据分析——美团-Flink 的实时数仓平台建设(3) https://developer.aliyun.com/article/1228304
第 3 个问题是 FlinkSQL 调试繁琐,操作步骤多,业务需要创建额外的作业和 Kafka,还要将导出的结果进行存储。此外,输入构造复杂,为了针对性地调试某种输入场景,业务需要写代码来构建消息并写入数据源,甚至需要对多个不同数据源消息到来的顺序进行控制。上图左侧可以看到,为了做 FlinkSQL 调试,需要手动搭建一条与线上隔离的调试链路,然后写入 Mock 数据。
针对上述问题的解法是基于文件调试一键化。首先业务在 Web 端可以在线编辑 Mock 数据,Mock 数据是有界的消息序列,它的初始化可以先从线上抽样,然后再由业务进行修改。业务构建完 Mock 数据后,会将 SQL 作业的 Mock 数据持久化到右侧的 S3 文件对象系统上。业务在 Web 端点击调试,左侧发起的调试任务会在与线上隔离的服务器上单进程执行,执行时会从 S3 获取之前上传的 Mock 数据,而且可以根据 Mock 数据指定的多源消息之间的到达顺序和消息之间的发送间隔来执行,执行完成后会将输出结果也持久化到 S3,最后在 Web 端查询 S3 呈现给业务。
更多情况下业务不需要修改 Mock 数据,只需要做抽样和执行两步操作。另外我们也支持了一些调试的高级功能,比如支持控制消息的顺序和间隔。
第 4 个问题是 FlinkSQL 作业的异常定位。作业异常是指作业消费 Kafka 出现了积压,为了解决这个问题,需要定位出产生积压的原因。而定位原因时,归因的路径比较复杂,排查门槛比较高。另外由于归因的路径缺少系统化的沉淀,定位花费的时间也比较长。随着 SQL 作业的数量越来越多,如果完全依赖人工排查,工作量将会非常巨大。
针对上述为的解决方法是实现 SQL 作业的自动化异常诊断。通过 Flink Reporter 上报 SQL 作业的运行指标,并持久化到 TSDB 中用于历史查询。同时也会持久化 SQL 作业的运行日志,报警服务会根据规则监控 SQL 作业上报的 Kafka Offset 指标,当消费的 Offset 落后于生产的 Offset 时,会判定位作业发生消费积压,然后发出报警并下发异常事件,诊断服务会监听报警服务的异常事件。
异常发生时,根据异常时间窗口内作业日志和作业指标分析异常原因,诊断服务可以通过增加规则来沉淀人工排查的经验。比如发生了 Restart,就会从日志中根据关键字来提取异常信息,未发生 Restart 则会根据反压指标找出瓶颈节点,然后结合 GC 指标、数据倾斜、火焰图等来分析瓶颈的原因,最后提出调优建议。
未来规划
未来,美团实时数仓平台的规划主要包括以下两个方面。
首先,是流批一体开发运维,我们即将在实时数仓平台集成数据湖存储,并开放 FlinkSQL 的批作业,在存储和计算层都做到流批统一,提高工作效率。
其次,是作业的自动调优,继续提升作业诊断的准确率以及作业重启的效率。