Apache Flink on K8s:四种运行模式,我该选择哪种?

本文分析了Apache Flink在Kubernetes上的四种运行模式:Session Cluster、Per Job Cluster、Native Session Cluster和即将推出的Native Per Job模式。讨论了每种模式的原理、特点、优缺点,并介绍了Flink-operator的优势,帮助用户根据业务场景选择合适的运行模式。
摘要由CSDN通过智能技术生成

1. 前言

Apache Flink 是一个分布式流处理引擎,它提供了丰富且易用的API来处理有状态的流处理应用,并且在支持容错的前提下,高效、大规模的运行此类应用。通过支持事件时间(event-time)、计算状态(state)以及恰好一次(exactly-once)的容错保证,Flink迅速被很多公司采纳,成为了新一代的流计算处理引擎。

2020 年 2 月 11 日,社区发布了 Flink 1.10.0 版本, 该版本对性能和稳定性做了很大的提升,同时引入了 native Kubernetes 的特性。对于 Flink 的下一个稳定版本,社区在 2020 年 4 月底冻结新特性的合入,预计在 2020 年 5 月中旬会推出 Flink 1.11,在新版本中将重点引入新特性,以扩容 Flink 的使用场景。

1.1 Flink 为什么选择 Kubernetes

Kubernetes 项目源自 Google 内部 Borg 项目,基于 Borg 多年来的优秀实践和其超前的设计理念,并凭借众多豪门、大厂的背书,时至今日,Kubernetes 已经成长为容器管理领域的事实标准。在大数据及相关领域,包括 Spark,Hive,Airflow,Kafka 等众多知名产品正在迁往 Kubernetes,Apache Flink 也是其中一员。

Flink 选择 Kubernetes 作为其底层资源管理平台,原因包括两个方面:

1)Flink 特性:流式服务一般是常驻进程,经常用于电信网质量监控、商业数据即席分析、实时风控和实时推荐等对稳定性要求比较高的场景;

2)Kubernetes 优势:为在线业务提供了更好的发布、管理机制,并保证其稳定运行,同时 Kubernetes 具有很好的生态优势,能很方便的和各种运维工具集成,如 prometheus 监控,主流的日志采集工具等;同时 K8S 在资源弹性方面提供了很好的扩缩容机制,很大程度上提高了资源利用率。

1.2 Flink on Kubernetes 的发展历史

在 Flink 的早期发行版 1.2 中,已经引入了 Flink Session 集群模式,用户得以将 Flink 集群部署在 Kubernetes 集群之上。

随着 Flink 的逐渐普及,越来越多的 Flink 任务被提交在用户的集群中,用户发现在 session 模式下,任务之间会互相影响,隔离性比较差,因此在 Flink 1.6 版本中,推出了 Per Job 模式,单个任务独占一个 Flink 集群,很大的程度上提高了任务的稳定性。

在满足了稳定性之后,用户觉得这两种模式,没有做到资源按需创建,往往需要凭用户经验来事先指定 Flink 集群的规格,在这样的背景之下,native session 模式应用而生,在 Flink 1.10 版本进入 Beta 阶段,我们增加了 native per job 模式,在资源按需申请的基础上,提高了应用之间的隔离性。

本文根据 Flink 在 Kubernetes 集群上的运行模式的趋势,依次分析了这些模式的特点,并在最后介绍了 Flink operator 方案及其优势。

2. Flink运行模式

本文首先分析了 Apache Flink 1.10 在 Kubernetes 集群上已经GA(生产可用)的两种部署模式,然后分析了处于 Beta 版本的 native session 部署模式和即将在 Flink 1.11 发布的 native per-job 部署模式,最后根据这些部署模式的利弊,介绍了当前比较 native kubernetes 的部署方式,flink-operator。

我们正在使用的 Flink 版本已经很好的支持了 native session 和 native per-job 两种模式,在 flink-operator 中,我们也对这两种模式也做了支持。

接下来将按照以下顺序分析了 Flink 的运行模式,读者可以结合自身的业务场景,考量适合的 Flink 运行模式。

  • Flink session 模式
  • Flink per-job 模式
  • Flink native session 模式
  • Flink native per-job 模式

这四种部署模式的优缺点对比,可以用如下表格来概括,更多的内容,请参考接下来的详细描述。

### 回答1: 在K8s运行Flink的执行命令案例如下:1. 下载Flink并将其解压到您的工作目录: ``` $ wget https://archive.apache.org/dist/flink/flink-1.10.2/flink-1.10.2-bin-scala_2.12.tgz $ tar xzf flink-1.10.2-bin-scala_2.12.tgz $ cd flink-1.10.2 ```2. 创建Flink配置文件: ``` $ cp conf/flink-conf.yaml.template conf/flink-conf.yaml ```3. 部署FlinkKubernetes: ``` $ ./bin/kubernetes-session.sh -n jobmanager ``` ### 回答2: Flink on Kubernetes (Flink over Kubernetes) 是一种将 Apache Flink 运行Kubernetes 集群中的方式。它通过结合 Flink 的流式处理和 Kubernetes容器化特性,为用户提供了一种弹性、可伸缩和高效的大数据处理框架。下面是一个 Flink on Kubernetes 的执行命令案例: 1. 启一个 Kubernetes 集群,并确保集群正常运行。 2. 在本地安装并配置好 kubectl 命令行工具,用于与 Kubernetes 集群进行交互。 3. 创建一个 Flink 集群的定义文件,例如 flink-cluster.yaml。该文件可以类似如下: ``` apiVersion: v1 kind: Namespace metadata: name: flink --- apiVersion: v1 kind: ServiceAccount metadata: name: flink-jobmanager namespace: flink --- apiVersion: apps/v1 kind: Deployment metadata: name: flink namespace: flink spec: replicas: 1 selector: matchLabels: component: jobmanager template: metadata: labels: component: jobmanager spec: serviceAccountName: flink-jobmanager containers: - name: jobmanager image: flink:latest ports: - containerPort: 8081 ``` 这个定义文件包含了创建 Flink 集群所需的 Kubernetes 资源。在这个例子中,我们使用了一个 Deployment 来创建一个 Flink JobManager 的实例。 4. 使用 kubectl 命令将定义文件部署到 Kubernetes 集群中: ``` kubectl apply -f flink-cluster.yaml ``` 这将会在 Kubernetes 集群中创建一个 Flink 集群的实例。 5. 可以使用 kubectl get 命令来查看创建的 Flink 集群的状态: ``` kubectl get all -n flink ``` 这将显示 Flink 集群的各种资源的当前状态,包括 Deployment、Pods、Service 和 JobManager。 6. 通过访问 Flink JobManager 的服务地址(例如:http://jobmanager-service:8081)可以打 Flink 的 Web UI,从而可以监控和管理 Flink 集群。 以上就是一个简单的 Flink on Kubernetes 的执行命令案例。使用这些命令,您可以在 Kubernetes 上快速部署和管理 Flink 集群,以实现弹性和可伸缩的大数据处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值