我使用 Kubernetes (Openshift
) 部署许多微服务。我希望利用它来部署我的一些 Flink 作业。 Flink
作业很关键——一些作业是无状态的,处理每个数据(恰好一次),一些作业是有状态的,在流中寻找模式或对时间使用react。任何作业都不能容忍长时间停机或频繁关机(由于编程错误,Flink 退出的方式)。
我发现文档大多倾向于在 k8s 中将 Flink 作业部署为 Job Cluster
。但是应该如何采取务实的做法呢?
- 虽然k8s可以重启失败的Flink
pod
,但是Flink如何恢复状态才能恢复? - Flink
pod
能否复制多个?当存在两个或多个 pod 时,JobManager
和TaskManager
如何工作?如果不是为什么?其他方法?
最佳答案
Though k8s can restart the failed Flink pod, how can Flink restore its state to recover?
从 Flink 文档我们有:
Checkpoints allow Flink to recover state and positions in the streams to give the application the same semantics as a failure-free execution.
这意味着您需要在 pod 中安装一个Check Storage 才能恢复状态。
在 Kubernetes 中,您可以使用 Persistent Volumes在您的 pod 之间共享数据。
其实有很多支持的插件,看here .
您可以拥有更多 TaskManager
的副本,但在 Kubernetes 中您不需要为 JobManager
处理 HA,因为您可以使用 Kubernetes self-修复部署。
要在 Kubernetes 中使用 self 修复部署,您只需创建一个部署并将副本
设置为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 - Kubernetes 中的 Apache Flink 部署 - 可用性和可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60204835/