对于一个企业级的应用,稳定性是首要要考虑的问题,然后才是性能,因此 HA 机制是必不可少的;
和 Hadoop 一代一样,从架构中我们可以很明显的发现 JobManager 有明显的单点问题(SPOF,single point of failure)。 JobManager 肩负着任务调度以及资源分配,一旦 JobManager 出现意外,其后果可想而知。Flink 对 JobManager HA 的处理方式,原理上基本和 Hadoop 一样;
对于 Standalone 来说,Flink 必须依赖于 Zookeeper 来实现 JobManager 的 HA(Zookeeper 已经成为了大部分开源框架 HA 必不可少的模块)。在 Zookeeper 的帮助下,一个 Standalone 的 Flink 集群会同时有多个活着的 JobManager,其中只有一个处于工作状态,其他处于 Standby 状态。当工作中的 JobManager 失去连接后(如宕机或 Crash),Zookeeper 会从 Standby 中选举新的 JobManager 来接管 Flink 集群。
(当然,对于flink的集群模式来说,除了standalone外,还有yarn cluster模式,这种模式的在hadoop节点的HA处搭建)
1:修改conf/flink-conf.yaml
jobmanager.rpc.address: hadoop01【注意。HA的需要按照机器分配】 jobmanager.rpc.port: 6123 jobmanager.heap.mb: 1024 taskmanager.heap.mb: 1024 taskmanager.numberOfTaskSlots: 2 taskmanager.memory.preallocate: false parallelism.default: 1 jobmanager.web.port: 8081 taskmanager.tmp.dirs: /opt/cdh/flink-1.5.0/tmp #开启HA state.backend: filesystem state.backend.fs.checkpointdir: hdfs://hadoop01:9000/flink-checkpoints high-availability: zookeeper high-availability.storageDir: hdfs://hadoop01:9000/flink/ha/ high-availability.zookeeper.quorum: hadoop01:2181,hadoop02:2181,hadoop03:2181 high-availability.zookeeper.client.acl: open
参数解释:
state.backend 启用检查点,支持两种后端备份点: jobmanager:内存状态,备份到JobManager的 ZooKeeper的内存。应仅用于最小状态(Kafka偏移量)或测试和本地调试。 filesystem:状态在TaskManager的内存中,并且状态快照存储在文件系统中。支持Flink支持的所有文件系统,例如HDFS,S3 ... state.backend.fs.checkpointdir:用于将检查点存储在Flink支持的文件系统中的目录。注意:状态后端必须可以从JobManager访问,file://仅用于本地设置 high-availability: zookeeper 定义用于群集执行的高可用性模式 high-availability.storageDir 用于存储JobManager元数据的目录; 这是持久的状态后端,只有一个指向这个状态的指针存储在ZooKeeper中。完全像检查点目录一样,它必须可以从JobManager访问 high-availability.zookeeper.quorum zookeeper的地址
2:
# The number of milliseconds of each tick tickTime=2000 # The number of ticks that the initial synchronization phase can take initLimit=10 # The number of ticks that can pass between sending a request and getting an acknowledgement syncLimit=5 # The directory where the snapshot is stored. # dataDir=/tmp/zookeeper # The port at which the clients will connect clientPort=2181 # ZooKeeper quorum peers server.1=hadoop01:2888:3888 server.2=hadoop02:2888:3888 server.3=hadoop03:2888:3888
3:
指定哪些节点作为master,然后由flink选择哪台机器作为activity的master
hadoop01:8081
hadoop02:8082
4:
hadoop01
hadoop02
hadoop03
5:
1:启动zookeeper Bin/zkServer.sh start (所有的zookeeper确保启动成功) bin/zkServer.sh start (所有的zookeeper确保启动成功) 2:启动hdfs(检查点和元数据信息存储在了hdfs) Start-dfs.sh start-dfs.sh 3:启动flink bin/start-cluster.sh bin/start-cluster.sh