我使用 Kubernetes (Openshift
( 来部署许多微服务。我希望利用它来部署我的一些 Flink 作业。Flink
作业至关重要 - 有些作业是无状态的,可以处理每个数据(恰好处理一次(,有些作业是有状态的,可以在流中查找模式或对时间做出反应。没有作业可以容忍长时间的停机或频繁的关机(由于编程错误,Flink 退出的方式(。
我发现文档大多倾向于在 k8s 中部署 Flink 作业作为Job Cluster
。但是,应该如何采取切实可行的方法呢?
- 虽然 k8s 可以重启失败的 Flink
pod
,但 Flink 如何恢复其状态进行恢复? - Flink
pod
可以复制多个吗?当存在两个或多个 pod 时,JobManager
&TaskManager
如何工作?如果不是为什么?其他方法?
虽然 k8s 可以重启失败的 Flink pod,但 Flink 如何恢复其状态以进行恢复?
从 Flink 文档中,我们有:
检查点允许 Flink 恢复流中的状态和位置,为应用程序提供与无故障执行相同的语义。
这意味着您需要在 Pod 中挂载检查存储才能恢复状态。
在Kubernetes中,您可以使用持久卷在 Pod 之间共享数据。
实际上有很多支持的插件,请参阅此处。
你可以拥有更多的TaskManager
副本,但在 Kubernetes 中,你不需要为JobManager
照顾 HA,因为你可以使用 Kubernetes自我修复部署。
要在 Kubernetes 中使用自我修复部署,您只需创建一个部署并将replica
设置为1
,如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- name: http
containerPort: 80
imagePullPolicy: IfNotPresent
最后,你可以查看以下链接来帮助你在 Kubernetes 中设置 Flink:
running-apache-flink-on-kubernetes
Kubernetes 上的 Flink Job 集群
Flink Kubernetes 部署
使用 KUDO 在 Kubernetes 上运行 Flink