背景
因参与大数据项目调研需要使用Apache Flink进行数据处理并写入Elasticsearch数据库,故而整理该集群搭建文章避免遗忘。本次搭建使用三台物理服务器。
服务器信息
192.168.2.244(master、slave)
192.168.2.245(slave)
192.168.2.246(slave)
192.168.2.244作为master节点,同时兼slave节点
其他两台服务器作为slave节点
操作系统
- Cent OS 7
软件版本
- JDK 14.0.2
- Apache Flink 1.10.0
搭建步骤
- 安装JDK 14.0.2,配置JAVA_HOME等环境变量
- slave节点,配置无密码登录
- 三台服务器都执行以下命令创建目录
3.1 mkdir -p /data/tools/ /data/flinkdata - master节点服务器执行以下操作
4.1 拷贝Flink程序包到 /data/tools 目录
4.2 解压Flink程序包
4.3 进行Flink程序目录
4.4 配置conf/flink-conf.yaml文件
4.5 配置conf/masters
4.6 配置conf/slaves
4.7 scp -r 修改好配置的Flink目录复制到slave服务器/data/tools/目录,目录路径要求和master节点一致
4.8 bin/start-cluster.sh 启动集群
flink-conf.yaml配置
jobmanager.memory.process.size: 4096m //根据服务器内存设置
taskmanager.numberOfTaskSlots: 128 //根据服务器CPU核心数修改
io.tmp.dirs: /data/flinkdata
cluster.evenly-spread-out-slots: true
jobmanager.rpc.address: 192.168.2.244 //master服务器的IP
cluster.evenly-spread-out-slots
true: 将工作负载分散到所有当前可用的TMs上。
false: 只有单台服务器负载满了,才会将任务分配给下台服务器
举栗子:
假如三台服务器集群,每台128 Slots。如果只运行9 Slot的任务,cluster.evenly-spread-out-slots为false的情况下,那这任务只会跑一台服务器上。反之会平均分配到集群的每台服务器。
关于该配置项有个奇怪的现象:
在两个机房搭建过Flink集群,同样的软件,同样的配置(没有配置cluster.evenly-spread-out-slots),唯一区别的就是一个机房是同等配置的4台服务器(Slot: 128 x 4,以下简称:机房A),一个机房是配置差异的3台服务器(Slot分别为:20 x 2、64 x 1,以下简称:机房B)
机房B
cluster.evenly-spread-out-slots没有设置,但是16 Slot的任务在运行的时候平均分配到对应的服务器
机房A
cluster.evenly-spread-out-slots没有设置,但是16 Slot的任务在运行的时候不会平均分配到对应的服务器。只有将cluster.evenly-spread-out-slots设置为true的时候,才会均分。
masters配置
192.168.2.244:8081
slaves配置
192.168.2.244
192.168.2.245
192.168.2.246
参考链接
Flink官方集群搭建教程