在Kubernetes中部署Apache Flink-可用性和;可伸缩性

在Kubernetes中部署Apache Flink-可用性和;可伸缩性,kubernetes,apache-flink,flink-streaming,Kubernetes,Apache Flink,Flink Streaming,我使用Kubernetes(Openshift)部署许多微服务。我希望利用这一点来部署我的一些Flink工作Flink作业非常关键—有些作业是无状态的,可以处理每个数据(只处理一次),有些作业是有状态的,可以在流中查找模式或对时间做出反应。任何作业都不能容忍长时间停机或频繁停机(由于编程错误,就像Flink退出一样) 我发现文档大多倾向于在k8s中部署Flink作业,作为作业集群。但是,我们应该如何采取切实可行的方法呢 虽然k8s可以重新启动失败的Flinkpod,但Flink如何恢复其状态以

我使用Kubernetes(
Openshift
)部署许多微服务。我希望利用这一点来部署我的一些Flink工作
Flink
作业非常关键—有些作业是无状态的,可以处理每个数据(只处理一次),有些作业是有状态的,可以在流中查找模式或对时间做出反应。任何作业都不能容忍长时间停机或频繁停机(由于编程错误,就像Flink退出一样)

我发现文档大多倾向于在k8s中部署Flink作业,作为
作业集群
。但是,我们应该如何采取切实可行的方法呢

  • 虽然k8s可以重新启动失败的Flink
    pod
    ,但Flink如何恢复其状态以恢复
  • Flink
    pod
    可以复制多个吗?当存在两个或多个POD时,
    JobManager
    TaskManager
    如何工作?如果不是,为什么?其他方法
虽然k8s可以重新启动失败的Flink pod,但Flink如何恢复其状态以恢复

从Flink文档中,我们有:

检查点允许Flink恢复流中的状态和位置,从而为应用程序提供与无故障执行相同的语义

这意味着您需要在POD中安装检查存储,才能恢复状态

Kubernetes中,您可以使用它在播客中共享数据

实际上有很多受支持的插件,请参阅

您可以拥有更多的
TaskManager
副本,但在Kubernetes中,您不需要为
JobManager
处理HA,因为您可以使用Kubernetes自愈部署

要在Kubernetes中使用自愈部署,只需创建一个部署并将
副本设置为
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:


事实并非如此。你可以在任何时候拥有多个工作经理,其中只有一个是领导者,但你可以拥有技术上想要的任何数量。@Dominikowsiński是的,你是对的!我的意思是,在Kubernetes中,对于
JobManager
,您不需要关心HA。据说可以使用备用副本,但在Kubernetes中没有必要。我已经更新了我的答案。因此,作业集群模式具有必要的Flink&作业逻辑是从单个映像部署的。如果需要,我可以在特定映像中配置多个
TaskManager
。将POD扩展到多个实例是否会影响作业逻辑(有状态和无状态作业)?增加pod是否意味着
scale
JobManager
将管理检查点,从持久卷读取状态。增加
副本数
意味着增加并行运行的容器数,这是
缩放
。如果缩放pod,状态完全作业的行为如何?比如,作业读取卡夫卡主题,按其“status”属性对消息进行分区,并每10分钟将消息写入一个文件。