Flink On K8S 高可用

原理:

尽管TaskManager通过增加Deployment的副本可以实现高可用性,但JobManager仍然是单点故障。

Flink 借助ZooKeeper和诸如HDFS之类的分布式文件系统提供了HA解决方案。在独立集群中,将启动多个JobManager,并选择其中一个作为领导者。

在YARN或Kubernetes部署中,仅需要一个JobManager实例。群集的元信息存储在ZooKeeper中,检查点数据存储在HDFS中。当JobManager关闭时,Kubernetes将重新启动容器,而新的JobManager将还原最后一个检查点并恢复作业。

指令:

要启用JobManager HA,请同时更改JobManager和TaskManager的启动命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
command: ["/opt/flink/bin/standalone-job.sh"]
args: ["start-foreground",
"-Djobmanager.rpc.address=${JOB}-jobmanager",
"-Dparallelism.default=1",
"-Dblob.server.port=6124",
"-Dqueryable-state.server.ports=6125",
"-Dhigh-availability=zookeeper",
"-Dhigh-availability.zookeeper.quorum=192.168.99.1:2181",
"-Dhigh-availability.zookeeper.path.root=/flink",
"-Dhigh-availability.cluster-id=/${JOB}",
"-Dhigh-availability.storageDir=hdfs://192.168.99.1:9000/flink/recovery",
"-Dhigh-availability.jobmanager.port=6123",
]
1
2
3
4
5
6
7
8
command: ["/opt/flink/bin/taskmanager.sh"]
args: ["start-foreground",
"-Dhigh-availability=zookeeper",
"-Dhigh-availability.zookeeper.quorum=192.168.99.1:2181",
"-Dhigh-availability.zookeeper.path.root=/flink",
"-Dhigh-availability.cluster-id=/${JOB}",
"-Dhigh-availability.storageDir=hdfs://192.168.99.1:9000/flink/recovery",
]
  • 在minikube主机上准备ZooKeeper和HDFS环境,以便Flink容器可以通过192.168.99.1:2181和访问它们192.168.99.1:9000
  • 群集元数据将存储/flink/${JOB}在ZooKeeper中。
  • 检查点数据存储/flink/recovery在HDFS中。确保您创建/flink具有适当权限的目录。
  • jobmanager.rpc.address从TaskManager的参数中删除该属性,因为将从ZooKeeper中获取JobManager的RPC主机和端口。默认情况下,RPC端口是随机的,因此我们通过更改为固定端口high-availability.jobmanager.port,该端口在k8s服务中公开。
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2018-2020 丁振莹
  • 访问人数: | 浏览次数:

你的每一分支持,是我努力下去的最大的力量 ٩(๑❛ᴗ❛๑)۶

支付宝
微信