《Apache Flink 案例集(2022版)》——5.数字化转型——移动云Apache Flink 在移动云实时计算的实践(上) https://developer.aliyun.com/article/1227847
2. 稳定性实践
作业稳定性主要指服务故障以及处理方案,服务故障主要包括作业运行失败、作业消费延迟、作业出现 OOM 以及作业异常重启。对应的处理方案是可以将作业进行物理隔离,服务进行降级,加强资源监控以及对服务进行拆分。平台维护人员最关心的是整体性的问题。
如果 ZooKeeper 集群中有一台服务器出现了网络服务瞬断,会引起大批量的任务重启。Flink JobManager 会通过 ZooKeeper 来进行 leader 的选举和发现 CheckpointID 的计数器管理。
中移分析了 ZooKeeper 网络状态的转换。客户端在连接 ZooKeeper 集群的时候,它的状态先是 connected 状态,网络瞬断后它会变成 Suspended 状态,Suspended 状态会转换为 lost 状态,还会继续转换为 reconnected 状态。Flink 在使用 ZooKeeper 的时候会依赖一个 curator2.0 组件,然而这个组件存在一个缺陷,遇到 Suspended 状态就会直接将 leader 丢弃,这会导致大部分作业进行重启,这对于业务来说是不可接受的。
官方直到 Flink 1.14 版本才对此问题进行修复。在之前的版本下,需要重新写 LeaderLatch,同时如果使用的是 Flink 1.8 版本,还需要同时修改 ZooKeeperCheckpointIDCounter。
未来规划
未来中移主要会在两个方向进行持续探索:
第一,资源利用方向。包括 Elastic Scaling 调研和 K8s Yunikorn 资源队列调研。我们发现 Flink 上云之后存在着资源队列的问题,所以需要将用户的资源进行分队列管理;
第二,数据湖方向。首先是统一流批服务网关,做实时数仓的时候可能会采用不同的引擎,比如 Flink 和 Spark,它们属于两套不同的服务,所以需要做统一流批的服务网关。其次是数据血缘、数据资产和数据质量服务化。