1. 简介
在Flink部署架构中,JobManager负责协调Flink任务调度和资源管理。
默认情况下,每个Flink集群都有一个JobManager实例,这会产生单点故障(SPOF single point of failure),如果JobManager进程崩溃,则无法提交新任务且运行中的任务也会失败。
启用JobManager HA后,就可以JobManager崩溃故障中恢复,消除单点故障。目前Flink支持独立集群和YARN集群两种HA配置方式。
YARN集群模式主要依赖YARN的HA机制,具体的行为还依赖YARN版本,本文将主要介绍独立集群的HA机制。
2. 独立集群HA
独立集群的JobManager的机制是,一个leader JobManager和多个standby JobManager,当leader JobManager崩溃后,多个standby JobManager选举后产生新的leader JobManager。
leader JobManager和standby JobManager之间没有区别,任何JobManager都可以承担leader或standby角色。
3. 源码分析
3.1 HighAvailabilityMode
public enum HighAvailabilityMode {
NONE(false),
ZOOKEEPER(true),
FACTORY_CLASS(true);
private final boolean haActive;
HighAvailabilityMode(boolean haActive) {
this.haActive = haActive;
}
}
Flink定义了三种高可用性模式枚举
- NONE:非HA模式
- ZOOKEEPER:基于ZK实现HA
- FACTORY_CLASS:自定义HA工厂类,该类需要实现HighAvailabilityServicesFactory接口
3.2 HighAvailabilityOptions
HighAvailabilityOptions定义了HA相关配置项
- HA_MODE:HA模式,可以设置为NONE、ZOOKEEPER,或设置为自定义HA工厂类名
- HA_CLUSTER_ID:Flink集群id,区分多个Flink集群
- HA_STORAGE_PATH:Flink储存HA元数据的文件系统路径
- HA_JOB_MANAGER_PORT_RANGE:JobManager监听端口范围,JobManager在此范围内随机选择一个端口号
- HA_ZOOKEEPER_QUORUM:ZK集群节点的地址和端口号
- HA_ZOOKE