同城(同地域内不同可用区之间)高可用功能可有效避免单个可用区故障导致的服务中断,确保业务的稳定性。Flink支持在包年包月的跨可用区类型的项目空间中使用同城高可用功能。本文为您介绍如何使用同城高可用功能,以及停止跨可用区CU计费等。
功能介绍
Flink工作空间支持单可用区和跨可用区两种CU类型的计算资源,根据使用的CU类型对应单可用和跨可用两种类型项目空间,区别如下:
对于单可用区项目空间,Flink会在所选地域为您分配最佳的计算可用区,同一地域内可用区之间内网互通,计算层进行可用区无感调度进行库存打通,从而提升资源的弹性负载能力。
对于跨可用区项目空间,可实现同城高可用能力,当作业运行所在可用区出现故障时,作业将自动调度到同一地域其他稳定可用区恢复,有效避免因单个可用区故障导致服务中断,确保作业的持续性和高可用性。
基本概念
概念 | 说明 |
可用区(Zone) | 同一地域内电力和网络相互独立的物理区域,可用区之间通过低延迟网络互联。 |
RPO(恢复点目标) | 故障发生时允许丢失的最大数据量。Flink 多可用区模式下,Checkpoint 状态持久化至 OSS 同城冗余存储,RPO 与 OSS 同城冗余型保持一致,确保数据的完整性和一致性。 |
RTO(恢复时间目标) | 故障发生后服务恢复所需的时间。Flink 多可用区模式下 RTO 为分钟级,包括 JobManager 切换、资源申请、状态恢复和数据重放。 |
JobManager | Flink 的管控节点,负责作业调度、Checkpoint 协调、资源管理。跨可用区场景下采用 Active-Standby 模式。 |
TaskManager | Flink 的计算节点,负责执行具体算子任务和运行时状态存储。 |
Checkpoint | Flink 的周期性状态快照机制,将作业状态持久化到外部存储(OSS),用于故障恢复。 |
State Backend | 状态后端,Flink 的状态存储引擎,Checkpoint 时将增量状态快照写入远程存储。 |
故障恢复机制
Flink 采用 Checkpoint 与自动故障恢复机制,确保可用区故障时作业自动恢复:
Checkpoint 持久化:作业运行期间定期将状态快照异步写入 OSS(跨可用区冗余存储),确保状态数据不因可用区故障而丢失。
JobManager 主备切换:Active JobManager 故障时,Standby JobManager 通过 ZooKeeper 选举成为新 Leader,接管作业管理。
TaskManager 重调度:故障可用区的 TaskManager 丢失后,ResourceManager 在存活可用区中申请新的 TaskManager,重新调度受影响的任务。
状态恢复:新调度的 TaskManager 从最近的 Checkpoint 恢复状态,RocksDB State Backend 支持增量恢复,缩短恢复时间。
数据重放:配合可回放数据源(如 Kafka),从 Checkpoint 记录的位点重新消费,保证 Exactly-Once 语义,数据不丢不重。
故障场景与恢复
单可用区故障
当一个可用区发生故障时,Flink 的处理流程如下:
故障检测:JobManager 检测到故障可用区中的 TaskManager 心跳超时,标记节点为不可用。
JobManager 切换:若 Active JobManager 位于故障可用区,Standby JobManager 迁移并重新拉起。
任务重调度:ResourceManager 在存活可用区中申请新的 TaskManager 资源,将受影响的任务重新调度。
状态恢复:新 TaskManager 从最近的 Checkpoint 恢复作业状态。
数据重放:Source 从 Checkpoint 位点重新消费数据源(如 Kafka),恢复数据处理。
客户端透明:Flink 作业的 Source/Sink 自动重连外部系统,故障恢复过程对上下游透明。
恢复指标:
指标 | 值 |
RPO(数据丢失) | 0(Checkpoint 状态持久化至 OSS 同城冗余存储,RPO 与 OSS 同城冗余型保持一致,确保数据的完整性和一致性。) |
RTO(服务恢复时间) | 分钟级(1~10 分钟,取决于状态大小和 Checkpoint 间隔) |
注意事项
完整链路的高可用必须确保您的上下游系统同样具备高可用。
Flink跨区访问外部上下游资源时,可能导致毫秒级的延迟,可用区之间网络延时SLA保障在3 ms内,详情请参见地域内可用区间平均网络时延 。上下游除云数据库Tair(兼容Redis)外,其他延迟通常没有问题,建议根据业务需求评估延迟的接受程度,进而确定是否要开启同城高可用功能。
混合计费工作空间开启同城高可用后,故障时系统优先保障固定计算资源上的作业迁移恢复,弹性计算资源上的作业尽力恢复,不产生额外费用。
地域及费用
目前仅Intel X86且包年包月(含混合计费)的工作空间支持购买跨可用区计算资源,费用高于单可用区,支持的地域及价格详情请参见包年包月。
如果您的工作空间为按量付费模式,可以先转为包年包月后,参考方式2和方式3进行使用。
部署模式为跨可用区的工作空间不支持转换为按量付费模式。
开启并使用同城高可用功能
方式1:新购工作空间时自动创建跨可用区项目空间后使用
在开通Flink工作空间时自动创建跨可用区项目空间。
Intel X86处理器架构且付费模式为包年包月的工作空间,部署模式选择为跨可用区,填写跨可用区CU类型的计算资源配额,选择两个不同可用区的虚拟交换机,详情请参见开通实时计算Flink版。
工作空间创建完成后,会默认生成名称为
工作空间名称-default-ha的跨可用区项目空间。单击目标跨可用区项目空间名称,在跨可用区项目空间内创建并运行作业。
在项目空间列表中,可通过CU类型列识别跨可用区项目空间(显示为跨可用区),单击该项目空间名称即可进入。
方式2:添加跨可用区CU并手动创建跨可用区项目空间后使用
开通工作空间时部署模式未选择为跨可用区,您可以后续通过添加跨可用区CU并创建跨可用的项目空间的方式使用。
方式3:单可用区项目空间开启同城高可用后使用
登录实时计算管理控制台。
确认当前工作空间如果还有未分配的 跨可用区CU 数,且大于待开启同城高可用的项目空间已分配的CU数。
如果工作空间未分配的跨可用区CU不足,您可以直接为工作空间添加跨可用区CU,或单击其他跨可用区的项目空间的资源分配,释放多余的跨可用区CU,详情请参见资源调整。
单击目标项目空间对应操作列的开启同城高可用后,单击确定。
单击确定后,项目空间中单可用区CU将被替换为等量的跨可用区CU,原先的单可用区CU将退还至工作空间。您后续可以进行再次分配或者进行资源缩容,以减少不必要的资源开支。
举例说明:假设工作空间A最初购买了5 CU的单可用区和5 CU跨可用区资源,其中项目空间A被分配了2 CU单可用区资源。当项目空间A开启同城高可用功能后,其原先分配的2 CU 单可用区资源会被退还至工作空间A的单可用区未分配资源池中,同时跨可用区资源中会有2 CU被重新分配给项目空间A使用。以下是开启前后工作空间资源情况对比:
状态
单可用区(已分配/已购买)
跨可用区(已分配/已购买)
开启前
2/5
0/5
开启后
0/5
2/5
在转换后的跨可用区类型项目空间创建并运行作业,详情请参见进入目标项目空间。
关闭项目空间的同城高可用功能
无论您以何种方式创建的跨可用区类型的项目空间,都可以按照以下操作关闭该功能。但关闭同城高可用功能并不会停止计费,停止计费操作请参见退订跨可用区CU。
退订跨可用区CU
工作空间跨可用区已分配CU数为0时,将不产生跨可用区费用。跨可用区CU退订操作步骤如下:
登录实时计算管理控制台。
确认工作空间下所有项目空间已关闭同城高可用功能。
详情请参见关闭项目空间的同城高可用功能。
将工作空间跨可用区目标CU调整为0。
在目标工作空间操作列下,选择。
将跨可用区的目标CU数改为0。
选中协议后,单击确定,完成支付。