部署 Flink Standalone 基础集群
最近在学数据同步时接触了 Flink,这里记录一下如何部署一个 Flink Standalone 基础集群。
前言
Flink 是一个流式计算框架,支持事件驱动、精确一次、状态管理等特性,适用于实时数据处理、数据分析等场景。Flink 常用有三种部署模式:Standalone, YARN, Kubernetes。
Standalone 模式是 Flink 的默认部署模式,适用于小规模集群和开发环境,而生产环境中,由于 Standalone 模式缺乏高可用[1]、便于扩缩容的特点,较少使用。
推荐在生产环境中根据团队的实际需求选择 YARN 或 Kubernetes 部署模式。
部署
1. 获得 Flink
可以通过 Flink 官网下载页面 获得最新版/特定发布版本的官方构建,同时还包含了一些特殊需求的组件(例如官方支持的 AWS 连接器等插件,Hadoop 组件等)。
如果需要构建自己的 Flink 版本,可以参考 Flink 官方文档。
在此以官方构建的 1.12.7 release
为例。
2. 环境准备
本次部署的是一个开发环境的 Flink Standalone 分布式集群,准备了四台虚拟机,进行了如下配置:
主机名 | IP 地址 | 角色 | host 解析 |
---|---|---|---|
hadoop1 | 192.168.46.137 | JobManager | hadoop1 |
hadoop2 | 192.168.46.138 | TaskManager | hadoop2 |
hadoop3 | 192.168.46.139 | TaskManager | hadoop3 |
hadoop4 | 192.168.46.140 | TaskManager | hadoop4 |
2.1 在每台虚拟机上安装好 Java 环境,并配置好 SSH 服务 (密钥登录是可选的)。
2.2 接着可以选择:
- 在下一步完成需要的 Flink 配置之后,向每台部署机器分发相同的 Flink 可执行文件和配置文件。
- 或使用 NFS 等网络文件系统,将 Flink 安装包和配置文件共享到所有节点。
前者在需要修改时操作更为繁琐,但允许在每台机器上独立配置 Flink,后者则更为方便(但独立配置支持差)。
3. 配置 Flink
在此,我们选择在每台机器上独立配置 Flink。
3.1 解压 Flink 可执行文件到 hadoop1 的 /opt
目录下,配置好权限。
3.2 在 hadoop1 上配置 conf/flink-conf.yaml
文件,主要进行如下配置:
# 配置 JobManager 的地址和 RPC 端口
## 地址选择配置为 host 解析的地址
## RPC 端口默认即为 6123,可以不修改
jobmanager.rpc.address: hadoop1
jobmanager.rpc.port: 6123
# 按需配置 JobManager 和 TaskManager 的内存配置、Slot 等任务相关配置
jobmanager.memory.process.size: 2600m
taskmanager.memory.process.size: 3296m
taskmanager.numberOfTaskSlots: 200
parallelism.default: 1
# 配置 Rest 监听地址,支持外网访问
rest.bind-address: 0.0.0.0
rest.address: 0.0.0.0
# 可选配置全局的任务重试策略
restart-strategy: fixed-delay
## 最大重试次数
restart-strategy.fixed-delay.attempts: 3
## 重试间隔
restart-strategy.fixed-delay.delay: 10s
# 在 TaskManager 中尽可能的均匀分配任务
# 这个特性是从 Flink 1.11 才引入的,分配任务时会尽可能的均匀分配到 TaskManager
cluster.evenly-spread-out-slots: true
3.3 在 conf
目录下新建 masters
和 workers
两个文件,分别配置 JobManager 和 TaskManager 的地址:
masters
hadoop1:6123
workers
hadoop2
hadoop3
hadoop4
这两个文件用于 Flink 启动时识别和发现 JobManager 和 TaskManager。
3.4 将配置好的 Flink 文件夹分发到其他节点。你可以在每台从属机(运行 TaskManager 的机器)上单独按需修改 TaskManager 相关的配置,例如按机器性能修改槽位数量、内存等。
4. 启动 Flink 集群
4.1 在 JobManager 节点上启动 Flink 集群:
cd /opt/flink-1.12.7
./bin/start-cluster.sh
运行集群启动脚本后,如果没有配置 SSH 密钥登录,需要输入每个节点的密码,通过 SSH 启动集群。
集群启动后可以通过 Flink Web UI (默认端口 8081)查看集群状态,或在每台机器上使用 jps
命令查看进程,确认所有节点的 TaskManager 和 JobManager 进程都已启动。
4.2 在 JobManager 节点上停止 Flink 集群:
cd /opt/flink-1.12.7
./bin/stop-cluster.sh
与启动类似,停止集群时也可能需要输入每个节点的密码。
5. 可选内容
5.1 单独增删 TaskManager
你可以在需要运行 TaskManager 的节点上通过 bin/taskmanager.sh start
脚本启动一个新的 TaskManager,通过 bin/taskmanager.sh stop
停止此节点的一个 TaskManager,或通过 bin/taskmanager.sh stop-all
停止此节点所有 TaskManager。
5.2 高可用性
Flink Standalone 模式的高可用性是通过 Zookeeper 实现的,可以通过配置 high-availability
相关参数实现。具体配置可以参考 Flink 官方文档。
参考文档: Flink Documentation
Flink Standalone 模式的高可用性是通过 Zookeeper 实现的,但是相对来说功能有限。 ↩︎