采用ZooKeeper实现高可用的Flink集群如何获取Leader节点
获取Flink ZooKeeper HA集群JobManager Leader节点的方法
以下三种方法都可以快速拿到当前活跃的Leader节点地址,你可以根据自己的使用场景选择:
方法1:直接查询ZooKeeper存储的Leader信息
Flink会将JobManager的Leader地址持久化到配置的ZK路径下,默认节点路径为/${high-availability.zookeeper.path.root}/${high-availability.cluster-id}/rest_server_lock,你可以直接通过ZK客户端读取该节点内容:
# 连接你的ZK集群,替换成实际的ZK节点地址和端口 zkCli.sh -server zk1:2181,zk2:2181,zk3:2181 # 读取Leader节点内容,替换路径为你集群实际的ZK路径 get /flink/my_flink_cluster/rest_server_lock
返回结果中会直接包含Leader的REST服务地址,格式通常为http://<Leader_IP>:<REST_PORT>,直接提取其中的IP即可。
方法2:通过任意JobManager节点的REST接口跳转获取
Flink所有JobManager节点收到非自身的请求时,都会自动重定向到当前Leader节点,你可以随便访问任意一个JobManager的REST服务地址,从跳转后的地址中拿到Leader IP:
你也可以直接用curl命令一键获取,不需要手动跳转:
# 替换成任意一个JobManager的IP和REST端口 curl -Ls -o /dev/null -w %{url_effective} http://任意JM_IP:8081/config
命令返回的最终URL前缀就是当前Leader的访问地址。
方法3:无需手动获取(作业操作场景推荐)
如果你只是需要提交、取消、停止作业,完全不需要手动查询Leader IP,只要你执行Flink CLI命令的节点上的flink-conf.yaml配置了和集群一致的高可用参数即可:
high-availability: zookeeperhigh-availability.zookeeper.quorum: 你的ZK集群地址列表high-availability.cluster-id: 你的集群对应ID
配置完成后直接执行CLI命令即可,Flink会自动从ZK中发现当前Leader节点完成操作,示例提交作业命令:
flink run -c com.xxx.YourJobMain /path/to/your-job.jar
注意:如果你修改过Flink的rest.port、high-availability.zookeeper.path.root等自定义配置,上述命令和路径中的对应值需要替换为你实际配置的参数
内容的提问来源于stack exchange,提问作者chenxi13
相关产品推荐
相关产品推荐

