【问题标题】:Apache Flink deployment in Kubernetes - availability & scalabilityKubernetes 中的 Apache Flink 部署 - 可用性和可扩展性
【发布时间】:2020-02-13 09:47:31
【问题描述】:

我使用 Kubernetes (Openshift) 来部署许多微服务。我希望利用它来部署我的一些 Flink 作业。 Flink 作业很关键 - 有些作业是无状态的,可以处理每个数据(只处理一次),有些作业是有状态的,可以在流中查找模式或对时间做出反应。没有作业可以容忍长时间停机或频繁关机(由于编程错误,Flink 退出的方式)。

我发现文档大多倾向于在 k8s 中以 Job Cluster 部署 Flink 作业。但是应该如何采取一种实际的方法来做到这一点呢?

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

【问题讨论】:

    标签: kubernetes apache-flink flink-streaming


    【解决方案1】:

    虽然k8s可以重启故障的Flink pod,但是Flink如何恢复其状态来恢复?

    从 Flink 文档我们有:

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

    这意味着您需要在 pod 中安装 Check Storage 才能恢复状态。

    Kubernetes 中,您可以使用 Persistent Volumes 在您的 pod 之间共享数据。

    其实支持的插件很多,见here

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

    要在 Kubernetes 中使用 self-healing 部署,您只需创建一个部署并将 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

    Flink Job cluster on Kubernetes

    Flink Kubernetes Deployments

    Running Flink on Kubernetes with KUDO

    【讨论】:

    • 这不是真的。您可以随时拥有多个 JobManager,其中只有一个是领导者,但您可以拥有尽可能多的技术。
    • @DominikWosiński 是的,你是对的!我的意思是在 Kubernetes 中你不需要关心 JobManager 的 HA。 documentation 说您可以使用备用副本,但在 Kubernetes 中不是必需的。我已经更新了我的答案。
    • 因此,作业集群模式具有必要的 Flink 并且作业逻辑部署为单个图像。如果需要,我可以在特定图像中配置多个TaskManager。将 Pod 扩展超过 1 个实例会影响作业逻辑(有状态和无状态作业)吗?增加 pod 是否意味着scale
    • JobManager 将管理检查点,从持久卷中读取状态。增加replicas 数字意味着增加并行运行的容器数量,这就是scale
    • 如果我缩放 pod,状态完整作业的行为如何?比如说,作业从 kafka 主题中读取数据,按其“状态”属性对消息进行分区,并每 10 分钟将消息写入文件。
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 2010-10-30
    • 2018-11-09
    • 1970-01-01
    • 2012-05-10
    • 2018-04-26
    • 2014-06-13
    • 2015-07-08
    相关资源
    最近更新 更多