Flink 使用介绍相关文档目录
背景
Flink 集群通常包含一个Job Manager和多个Task Manager。Task Manager如果出现故障挂掉通常不会影响任务的执行,只是会减缓运行速度。然而单个Job Manager会出现严重的单点问题,如果Job Manager出现问题,整个任务会失败。有没有方法配置多个Job Manager呢?
环境信息
- Flink 1.17.2
Zookeeper高可用服务
Flink支持Zookeeper和Kubernetes两种高可用服务。通常大数据环境都会有Zookeeper集群。因此这里介绍Zookeeper高可用服务的配置方式。
flink-conf.yaml
包含如下HA配置:
#==============================================================================
# Standalone High Availability
#==============================================================================
# The high-availability mode. Possible options are 'NONE' or 'zookeeper'.
#
high-availability.type: zookeeper
# The path where metadata for master recovery is persisted. While ZooKeeper stores
# the small ground truth for checkpoint and leader election, this location stores
# the larger objects, like persisted dataflow graphs.
#
# Must be a durable file system that is accessible from all nodes
# (like HDFS, S3, Ceph, nfs, ...)
#
high-availability.storageDir: hdfs:///flink/ha/
# The list of ZooKeeper quorum peers that coordinate the high-availability
# setup. This must be a list of the form:
# "host1:clientPort,host2:clientPort,..." (default clientPort: 2181)
#
high-availability.zookeeper.quorum: 192.168.100.128:2181,192.168.100.129:2181
# ACL options are based on https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_BuiltinACLSchemes
# It can be either "creator" (ZOO_CREATE_ALL_ACL) or "open" (ZOO_OPEN_ACL_UNSAFE)
# The default value is "open" and it can be changed to "creator" if ZK security is enabled
#
# high-availability.zookeeper.client.acl: open
配置项的功能如下:
- high-availability.type: 配置为zookeeper。
- high-availability.storageDir: 指定job manager的元数据存储位置,需要指定在HDFS下的目录,这样多个节点上运行的job manager都可以访问到。
- high-availability.zookeeper.quorum: zookeeper的地址。
- high-availability.zookeeper.client.acl: Zookeeper ACL相关配置,如果不启用认证则不用修改此配置。
Standalone集群HA的配置和部署
配置Zookeeper高可用服务
按照上一节介绍的方式,配置Flink Zookeeper高可用服务。配置完毕之后,使用后面两节任意一种方式启动standalone集群。
使用一键脚本部署
首先执行部署命令的节点需要和集群其他的节点做免密配置。
编辑conf/masters
和conf/slaves
文件
masters文件需要配置各个Job Manager的IP地址和端口号信息,如下所示:
192.168.100.128:8080
192.168.100.129:8080
slaves文件需要配置各个Task Manager运行所在的节点,如下所示:
192.168.100.128
192.168.100.129
保存配置之后将Flink软件包,连同配置文件复制到集群中各个节点。同时需要配置各个节点的FLINK_HOME
环境变量。
最后,执行bin/start-cluster.sh
脚本,浏览器分别打开192.168.100.128:8080
和192.168.100.129:8080
,检查Flink管理页面是否能正常显示,以及Task Manager的数量其否正确。
使用手工启动的方式
和上面所述的方法类似,也需要复制Flink软件包和配置文件到各个节点,但无需再配置免密,也不需要修改masters和slaves文件。
分别在job manager和task manager节点执行如下命令:
# 在192.168.100.128节点
bin/jobmanager.sh start 192.168.100.128 8080
# 在192.168.100.129节点
bin/jobmanager.sh start 192.168.100.129 8080
# 在192.168.100.128和192.168.100.129节点
bin/taskmanager.sh start
到此Flink HA集群部署完毕。可以采用上述的验证方法进行验证。
Flink on yarn配置高可用
首先需要按照配置Zookeeper高可用服务一节,配置高可用服务。
Flink在yarn集群中运行我们不用去刻意启动多个Job Manager。如果Job Manager失败挂掉,有如下两个参数可以控制application master(即Job Manager)的重启次数。
Flink配置文件flink-conf.yaml
:
yarn.application-attempts: 4
Yarn的配置文件yarn-site.xml
:
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
<description>
The maximum number of application master execution attempts.
</description>
</property>
建议flink-conf.yaml
配置的AM重启次数不要超过yarn-site.xml
中配置的次数。
注意:如果没有配置Zookeeper高可用服务,
yarn.application-attempts
参数的默认值是1。JobManager失败后不会自动重启,整个作业将fail。
FAQ
SASL认证问题
作业启动出现如下错误:
WARN org.apache.flink.shaded.zookeeper3.org.apache.zookeeper.ClientCnxn [] - SASL configuration failed. Will continue connection to Zookeeper server without SASL authentication, if Zookeeper server allows it.
javax.security.auth.login.LoginException: No JAAS configuration section named 'Client' was found in specified JAAS configuration file: '/tmp/jaas-2133872725743762627.conf'.
原因是Flink连接Zookeeper默认使用SASL。禁用的方法为增加配置:
zookeeper.sasl.disable: true