FLINK ON K8S 基于Zookeeper和基于K8S原生HA的区别

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: FLINK ON K8S 基于Zookeeper和基于K8S原生HA的区别

背景


本文基于Flink 1.13.x


Flink on K8S


分析


基于原生K8S(基于ConfigMap) HA的数据交互图如下:

1.png基于Zookeeper HA的数据交互图如下:

2.png

可以看到这两者的最大的区别在于:


基于原生K8S的Active JobManager 会在选举成功后,持续向configMap中修改control-plane.alpha.kubernetes.io/leader的值,control-plane.alpha.kubernetes.io/leader的值如下:

annotations:
  control-plane.alpha.kubernetes.io/leader: '{"holderIdentity":"2ab0efc8-1bbc-4aae-800e-135e5d349092","leaseDuration":15.000000000,"acquireTime":"2022-10-08T04:03:26.033000Z","renewTime":"2022-10-11T13:55:46.342000Z","leaderTransitions":58949}'
  • 基于Zookeeper的Active JobManager在选举成功后,不会周期性的修改zknode里面的内容

这是为什么?


这是因为两者领导选举机制的实现不一样:


基于K8S原生HA的实现是基于组件KubernetesLeaderElector


基于k8s的HA最终是基于ConfigMap来实现的(谁先创建了configMap就是leader),必须定期的修改configMap里面的某一项值(内部实现是基于renewTime等),来向其他StandBy的JobManger表明,当前Active JobManager是活着的,具体的实现细节参考:KubernetesLeaderElector.run


基于Zookeeper的HA的实现是基于组件LeaderLatch


该方法的实现原理是基于zk的顺序的临时节点来实现的(谁先创建了该节点就是leader),而该方法的实现不需要Active JobManager周期修改里面的数据,因为Zookeeper的临时节点的特性就是,如果创建该节点的客户端挂了,该临时节点会自动删除,这样,其他standBy的JobManager可以通过该临时节点存在与否来判断是否Active节点存在,从而进行领导选举,具体的实现细节见LeaderLatch.internalStart


结论


通过以上分析,我们可以得到如下优劣:


基于K8S原生的HA,会定期修改ConfigMap的值,导致watch该ConfigMap的客户端会定期收到很多事件,而这种定期事件,最终会影响到K8S的ETCD集群的稳定性,从而影响K8S集群的稳定性


基于Zookeeper的HA,只有在Active节点下线以后,watch的节点才会收到对应的事件,相比K8S那种方式,对ZK的压力会小很多。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
Kubernetes 流计算 容器
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的。
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的。【1月更文挑战第22天】【1月更文挑战第106篇】
61 1
|
3月前
|
Kubernetes 固态存储 容器
pulsar on k8s
pulsar on k8s
|
30天前
|
Kubernetes 流计算 Perl
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
在Rancher K8s上部署Flink时,TaskManager连接不上并不断重启可能是由多种原因导致的
34 7
|
3月前
|
存储 Kubernetes Apache
pulsar on k8s 部署验证
pulsar on k8s 部署验证
|
8天前
|
分布式计算 大数据 数据处理
【Flink】Flink跟Spark Streaming的区别?
【4月更文挑战第17天】【Flink】Flink跟Spark Streaming的区别?
|
1月前
|
Kubernetes 网络协议 Java
在Kubernetes上运行Flink应用程序时
【2月更文挑战第27天】在Kubernetes上运行Flink应用程序时
37 10
|
2月前
|
SQL 消息中间件 Kubernetes
flink问题之on kubernetes 构建失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
45 1
|
2月前
|
SQL Kubernetes Java
Flink构建问题之flink 1.11 on kubernetes构建失败如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
2月前
|
Kubernetes Java Apache
Flink问题之托管Kubernetes报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
27 1
|
3月前
|
分布式计算 Kubernetes Java
spark on k8s native
spark on k8s native