《从0到1学习Flink》—— Flink JobManager 高可用性配置

前言

以前在 《从0到1学习Flink》—— Flink 配置文件详解 讲过 Flink 的配置,可是后面陆续有人来问我一些配置相关的东西,在加上我如今对 Flink 也更熟悉了些,这里我就再写下 Flink JobManager 的配置相关信息。服务器

在 《从0到1学习Flink》—— Apache Flink 介绍 一文中介绍过了 Flink Job 的运行架构图:session

JobManager 协调每一个 Flink 做业的部署。它负责调度和资源管理。架构

默认状况下,每一个 Flink 集群都有一个 JobManager 实例。这会产生单点故障(SPOF):若是 JobManager 崩溃,则没法提交新做业且运行中的做业也会失败。app

若是咱们使用 JobManager 高可用模式,能够避免这个问题。您能够为 standalone 集群和 YARN 集群配置高可用模式。jsp

standalone 集群高可用性

standalone 集群的 JobManager 高可用性的概念是,任什么时候候都有一个主 JobManager 和 多个备 JobManagers,以便在主节点失败时有新的 JobNamager 接管集群。这样就保证了没有单点故障,一旦备 JobManager 接管集群,做业就能够依旧正常运行。主备 JobManager 实例之间没有明确的区别。每一个 JobManager 均可以充当主备节点。分布式

例如,请考虑如下三个 JobManager 实例的设置:学习

如何配置

要启用 JobManager 高可用性功能,您必须将高可用性模式设置为 zookeeper,配置 ZooKeeper quorum,将全部 JobManagers 主机及其 Web UI 端口写入配置文件。spa

Flink 利用 ZooKeeper 在全部正在运行的 JobManager 实例之间进行分布式协调。ZooKeeper 是独立于 Flink 的服务,经过 leader 选举和轻量级一致性状态存储提供高可靠的分布式协调服务。Flink 包含用于 Bootstrap ZooKeeper 安装的脚本。
他在咱们的 Flink 安装路径下面 /conf/zoo.cfg 。指针

Masters 文件

要启动 HA 集群,请在如下位置配置 Masters 文件 conf/masters:server

1
2
localhost:8081
xxx.xxx.xxx.xxx:8081

masters 文件包含启动 JobManagers 的全部主机以及 Web 用户界面绑定的端口,上面一行写一个。

默认状况下,job manager 选一个随机端口做为进程通讯端口。您能够经过 high-availability.jobmanager.port 更改此设置。此配置接受单个端口(例如 50010),范围(50000-50025)或二者的组合(50010,50011,50020-50025,50050-50075)。

配置文件 (flink-conf.yaml)

要启动 HA 集群,请将如下配置键添加到 conf/flink-conf.yaml:

高可用性模式(必需):在 conf/flink-conf.yaml中,必须将高可用性模式设置为 zookeeper,以打开高可用模式。

1
high-availability: zookeeper

ZooKeeper quorum(必需):ZooKeeper quorum 是一组 ZooKeeper 服务器,它提供分布式协调服务。

1
high-availability.zookeeper.quorum: ip1:2181 [,...],ip2:2181

每一个 ip:port 都是一个 ZooKeeper 服务器的 ip 及其端口,Flink 能够经过指定的地址和端口访问 zookeeper。

另外就是高可用存储目录,JobManager 元数据保存在文件系统 storageDir 中,在 ZooKeeper 中仅保存了指向此状态的指针, 推荐这个目录是 HDFS, S3, Ceph, nfs 等,该 storageDir 中保存了 JobManager 恢复状态须要的全部元数据。

1
high-availability.storageDir: hdfs:///flink/ha/

配置 master 文件和 ZooKeeper 配置后,您可使用提供的集群启动脚本。他们将启动 HA 集群。请注意,启动 Flink HA 集群前,必须启动 Zookeeper 集群,并确保为要启动的每一个 HA 集群配置单独的 ZooKeeper 根路径。

示例

具备 2 个 JobManagers 的 Standalone 集群:

一、在 conf/flink-conf.yaml 中配置高可用模式和 Zookeeper :

1
2
3
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
high-availability.storageDir: hdfs:///flink/recovery

二、在 conf/masters 中 配置 masters:

1
2
localhost:8081
localhost:8082

三、在 conf/zoo.cfg 中配置 Zookeeper 服务:

1
server.0=localhost:2888:3888

四、启动 ZooKeeper 集群:

1
2
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.

五、启动一个 Flink HA 集群:

1
2
3
4
5
$ bin/start-cluster.sh
Starting HA cluster with 2 masters and 1 peers in ZooKeeper quorum.
Starting jobmanager daemon on host localhost.
Starting jobmanager daemon on host localhost.
Starting taskmanager daemon on host localhost.

六、中止 ZooKeeper 和集群:

1
2
3
4
5
6
7
$ bin/stop-cluster.sh
Stopping taskmanager daemon (pid: 7647) on localhost.
Stopping jobmanager daemon (pid: 7495) on host localhost.
Stopping jobmanager daemon (pid: 7349) on host localhost.

$ bin/stop-zookeeper-quorum.sh
Stopping zookeeper daemon (pid: 7101) on host localhost.

上面的执行脚本以下图可见:

YARN 集群高可用性

当运行高可用的 YARN 集群时,咱们不会运行多个 JobManager 实例,而只会运行一个,该 JobManager 实例失败时,YARN 会将其从新启动。Yarn 的具体行为取决于您使用的 YARN 版本。

如何配置?

Application Master 最大重试次数 (yarn-site.xml)

在 YARN 配置文件 yarn-site.xml 中,须要配置 application master 的最大重试次数:

1
2
3
4
5
6
7
<property>
  <name>yarn.resourcemanager.am.max-attempts</name>
  <value>4</value>
  <description>
    The maximum number of application master execution attempts.
  </description>
</property>

当前 YARN 版本的默认值为 2(表示容许单个 JobManager 失败两次)。

Application Attempts (flink-conf.yaml)

除了上面能够配置最大重试次数外,你还能够在 flink-conf.yaml 配置以下:

1
yarn.application-attempts: 10

这意味着在若是程序启动失败,YARN 会再重试 9 次(9 次重试 + 1 次启动),若是启动 10 次做业还失败,yarn 才会将该任务的状态置为失败。若是由于节点硬件故障或重启,NodeManager 从新同步等操做,须要 YARN 继续尝试启动应用。这些重启尝试不计入 yarn.application-attempts 个数中。

容器关闭行为

  • YARN 2.3.0 < 版本 < 2.4.0. 若是 application master 进程失败,则全部的 container 都会重启。
  • YARN 2.4.0 < 版本 < 2.6.0. TaskManager container 在 application master 故障期间,会继续工做。这具备如下优势:做业恢复时间更快,且缩短全部 task manager 启动时申请资源的时间。
  • YARN 2.6.0 <= version: 将尝试失败有效性间隔设置为 Flink 的 Akka 超时值。尝试失败有效性间隔表示只有在系统在一个间隔期间看到最大应用程序尝试次数后才会终止应用程序。这避免了持久的工做会耗尽它的应用程序尝试。

示例:高可用的 YARN Session

一、配置 HA 模式和 Zookeeper 集群 在 conf/flink-conf.yaml:

1
2
3
high-availability: zookeeper
high-availability.zookeeper.quorum: localhost:2181
yarn.application-attempts: 10

 

二、配置 ZooKeeper 服务 在 conf/zoo.cfg:

1
server.0=localhost:2888:3888

 

三、启动 Zookeeper 集群:

1
2
$ bin/start-zookeeper-quorum.sh
Starting zookeeper daemon on host localhost.

 

四、启动 HA 集群:

1
$ bin/yarn-session.sh -n 2

 

总结

本篇文章再次写了下 Flink JobManager 的高可用配置,如何在 standalone 集群和 YARN 集群中配置高可用。

相关文章
相关标签/搜索