当前位置: 代码迷 >> 综合 >> Apache Flink Standalone 集群搭建
  详细解决方案

Apache Flink Standalone 集群搭建

热度:53   发布时间:2023-12-12 20:19:14.0

背景

因参与大数据项目调研需要使用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节点

操作系统

  1. Cent OS 7

软件版本

  1. JDK 14.0.2
  2. Apache Flink 1.10.0

搭建步骤

  1. 安装JDK 14.0.2,配置JAVA_HOME等环境变量
  2. slave节点,配置无密码登录
  3. 三台服务器执行以下命令创建目录
    3.1 mkdir -p /data/tools/ /data/flinkdata
  4. 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官方集群搭建教程

  相关解决方案