kubernetes - Kubernetes 中的 Apache Flink 部署 - 可用性和可扩展性

标签 kubernetes apache-flink flink-streaming

我使用 Kubernetes (Openshift) 部署许多微服务。我希望利用它来部署我的一些 Flink 作业。 Flink 作业很关键——一些作业是无状态的,处理每个数据(恰好一次),一些作业是有状态的,在流中寻找模式或对时间使用react。任何作业都不能容忍长时间停机或频繁关机(由于编程错误,Flink 退出的方式)。

我发现文档大多倾向于在 k8s 中将 Flink 作业部署为 Job Cluster。但是应该如何采取务实的做法呢?

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

最佳答案

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

Flink Job cluster on Kubernetes

Flink Kubernetes Deployments

Running Flink on Kubernetes with KUDO

关于kubernetes - Kubernetes 中的 Apache Flink 部署 - 可用性和可扩展性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60204835/

相关文章:

kubernetes - 使用安全上下文 fsgroup 选项对卷安装的写入权限

debugging - 如何调试 Flink 应用程序进行内存和垃圾收集?

apache-flink - Flink 中数据流的本地聚合

apache-flink - Flink 批处理 : data local planning on HDFS?

apache-flink - Flink 多槽 TaskManager 最佳实践

apache-flink - Flink 一次性消息处理

docker - 如何将 RBAC 权限分配给系统 :anonymous service account in Kubernetes?

kubernetes - 无法在Kops实例上安装istio

kubernetes - .kube/config 中没有访问 token

mysql - 如何并行读取mysql的数据到flink?