从Flink架构中我们可以看到,JobManager这个组件非常重要,是中心协调器,负责任务调度和资源管理。默认情况下,每个Flink集群只有一个JobManager实例。这会产生单点故障(SPOF):如果JobManager崩溃,则无法提交新程序,正在运行的程序也会失败。通过JobManager的高可用性,用户可以从JobManager故障中恢复,从而消除SPOF。
JobManager高可用性的一般思想是,任何时候都有一个leader JobManager和多个standby JobManage,当leader出现故障时,其中一个standby JobManager接管leader。这保证了没有单点故障,并且只要standby JobManager接管了leader,程序就可以继续进行。如下图(有3个JobManager):
Flink的高可用性服务封装了使一切正常工作所需的服务:
- Leader election:从n个候选人中选出一个领导
- Service discovery:检索当前领导的地址
- State persistence