当前位置: 首页 > news >正文

Flink 1.18.1 Standalone集群搭建保姆级教程:从SSH免密到Web UI验证,一次搞定

Flink 1.18.1 Standalone集群搭建实战指南:从零开始构建高可靠数据处理平台

引言

在当今数据驱动的时代,实时数据处理能力已成为企业技术栈中的关键组成部分。Apache Flink作为一款开源的流处理框架,以其高吞吐、低延迟的特性,在金融风控、实时推荐、物联网数据分析等领域大放异彩。对于刚接触Flink的技术人员来说,如何快速搭建一个稳定可靠的Standalone集群是掌握这项技术的第一步。

本文将带领你从零开始,一步步完成Flink 1.18.1 Standalone集群的搭建过程。不同于简单的步骤罗列,我们会深入每个环节背后的原理,解释为什么需要这些配置,以及在遇到常见问题时该如何排查和解决。无论你是开发人员还是运维工程师,都能通过本指南获得可立即应用于生产环境的实用知识。

1. 环境准备与基础配置

1.1 硬件与软件需求

在开始搭建Flink集群前,我们需要确保基础设施满足基本要求。以下是推荐的配置:

  • 服务器数量:至少3台(1个JobManager + 2个TaskManager)
  • 操作系统:Linux(CentOS 7+或Ubuntu 18.04+)
  • Java环境:JDK 8或11(推荐OpenJDK 11)
  • 内存:每台服务器至少4GB
  • 磁盘空间:每台服务器至少20GB可用空间
  • 网络:节点间千兆网络连接

提示:生产环境建议使用专用服务器而非虚拟机,以获得更好的性能表现。

1.2 系统基础配置

在所有节点上执行以下基础配置:

# 关闭防火墙(仅用于测试环境) systemctl stop firewalld systemctl disable firewalld # 禁用SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 配置主机名解析(在所有节点上执行) cat >> /etc/hosts <<EOF 192.168.0.168 node1 192.168.0.73 node2 192.168.0.34 node3 EOF # 安装必要工具 yum install -y wget vim openssh-clients # CentOS # 或 apt-get install -y wget vim openssh-client # Ubuntu

1.3 Java环境安装与配置

Flink运行依赖Java环境,以下是安装OpenJDK 11的步骤:

# CentOS yum install -y java-11-openjdk-devel # Ubuntu apt-get install -y openjdk-11-jdk # 验证安装 java -version

配置JAVA_HOME环境变量:

# 查找Java安装路径 readlink -f $(which java) | sed "s:/bin/java::" # 将输出结果添加到/etc/profile中 echo 'export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64' >> /etc/profile echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile source /etc/profile

2. Flink安装与集群配置

2.1 下载与安装Flink

在主节点(node1)上执行以下操作:

# 创建安装目录 mkdir -p /opt/flink cd /opt/flink # 下载Flink 1.18.1 wget https://archive.apache.org/dist/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz # 解压安装包 tar -xzf flink-1.18.1-bin-scala_2.12.tgz ln -s flink-1.18.1 current # 配置环境变量 echo 'export FLINK_HOME=/opt/flink/current' >> /etc/profile echo 'export PATH=$PATH:$FLINK_HOME/bin' >> /etc/profile source /etc/profile

2.2 配置SSH免密登录

集群节点间的SSH免密登录是Flink集群正常工作的基础。以下是详细配置步骤:

  1. 在主节点(node1)上生成SSH密钥对:
ssh-keygen -t rsa -b 4096 -N "" -f ~/.ssh/id_rsa
  1. 将公钥分发到所有节点(包括自身):
ssh-copy-id node1 ssh-copy-id node2 ssh-copy-id node3
  1. 验证免密登录:
ssh node1 date ssh node2 date ssh node3 date

注意:如果遇到"Permission denied"错误,检查以下几点:

  • 目标节点的sshd服务是否运行(systemctl status sshd)
  • /etc/ssh/sshd_config中是否允许公钥认证(PubkeyAuthentication yes)
  • 目标节点上的~/.ssh/authorized_keys文件权限是否为600

2.3 核心配置文件详解

2.3.1 flink-conf.yaml配置

编辑$FLINK_HOME/conf/flink-conf.yaml文件,以下是关键配置项:

# JobManager配置 jobmanager.rpc.address: node1 jobmanager.bind-host: 0.0.0.0 jobmanager.rpc.port: 6123 jobmanager.memory.process.size: 1600m # TaskManager配置 taskmanager.numberOfTaskSlots: 4 taskmanager.memory.process.size: 4096m # 网络与IO配置 taskmanager.network.memory.fraction: 0.1 taskmanager.network.memory.max: 1024mb io.tmp.dirs: /tmp # 检查点配置(根据需求调整) state.backend: filesystem state.checkpoints.dir: hdfs://namenode:8020/flink/checkpoints state.savepoints.dir: hdfs://namenode:8020/flink/savepoints # Web UI配置 rest.address: node1 rest.bind-address: 0.0.0.0 rest.port: 8081
2.3.2 masters文件配置

指定JobManager节点:

echo "node1:8081" > $FLINK_HOME/conf/masters
2.3.3 workers文件配置

指定所有TaskManager节点:

cat > $FLINK_HOME/conf/workers <<EOF node1 node2 node3 EOF

2.4 分发Flink安装包

将配置好的Flink分发到所有工作节点:

scp -r /opt/flink node2:/opt/ scp -r /opt/flink node3:/opt/ # 在工作节点上创建符号链接 ssh node2 "ln -s /opt/flink/flink-1.18.1 /opt/flink/current" ssh node3 "ln -s /opt/flink/flink-1.18.1 /opt/flink/current" # 同步环境变量 scp /etc/profile node2:/etc/ scp /etc/profile node3:/etc/ ssh node2 "source /etc/profile" ssh node3 "source /etc/profile"

3. 集群启动与验证

3.1 启动Flink集群

在主节点(node1)上执行:

$FLINK_HOME/bin/start-cluster.sh

启动日志通常会输出到$FLINK_HOME/log目录下。检查日志确认无错误:

tail -f $FLINK_HOME/log/flink-*-standalonesession-*.log

3.2 集群状态验证

3.2.1 命令行验证
# 查看集群状态 $FLINK_HOME/bin/flink list # 查看TaskManager状态 $FLINK_HOME/bin/flink run -m node1:8081 --class org.apache.flink.examples.java.wordcount.WordCount $FLINK_HOME/examples/batch/WordCount.jar
3.2.2 Web UI验证

访问http://node1:8081,你应该能看到类似如下的界面:

![Flink Web UI示意图]

在Web UI中,重点关注以下几个指标:

  • Task Managers:应该显示3个(node1, node2, node3)
  • Slots Available:总共应该有12个(每个TaskManager 4个slot × 3个节点)
  • JobManager Status:显示为"Healthy"

3.3 常见问题排查

以下是搭建过程中可能遇到的典型问题及解决方案:

问题现象可能原因解决方案
TaskManager未出现在Web UI网络连接问题/配置错误检查workers文件配置,查看TaskManager日志
Job提交失败资源不足/配置错误检查slot数量,调整taskmanager.memory.process.size
节点间通信失败防火墙/SSH配置问题禁用防火墙,验证SSH免密登录
Web UI无法访问绑定地址/端口冲突检查rest.address和rest.bind-address配置

对于更详细的日志分析,可以使用以下命令:

# 查看JobManager日志 less $FLINK_HOME/log/flink-*-standalonesession-*.log # 查看TaskManager日志(在各工作节点上) less $FLINK_HOME/log/flink-*-taskexecutor-*.log

4. 集群优化与生产建议

4.1 性能调优参数

对于生产环境,建议调整以下参数以获得更好性能:

# 在flink-conf.yaml中添加或修改 # 网络与缓冲 taskmanager.network.memory.max: 2048mb taskmanager.network.memory.fraction: 0.2 # 检查点优化 execution.checkpointing.interval: 30s execution.checkpointing.timeout: 10min execution.checkpointing.min-pause: 500ms # 状态后端(推荐使用RocksDB) state.backend: rocksdb state.backend.rocksdb.localdir: /data/flink/rocksdb # 高可用配置(可选) high-availability: zookeeper high-availability.zookeeper.quorum: zk1:2181,zk2:2181,zk3:2181 high-availability.storageDir: hdfs://namenode:8020/flink/ha/

4.2 资源隔离与调度

对于多租户环境,考虑以下策略:

  1. 资源隔离:通过YARN或Kubernetes部署模式实现
  2. Slot共享组:限制哪些任务可以共享slot
  3. CPU隔离:使用cgroups限制每个TaskManager的CPU使用

4.3 监控与告警

建议配置以下监控项:

  • 关键指标监控

    • 检查点成功率与耗时
    • 背压指标
    • 各算子的延迟
    • 资源使用率(CPU、内存、网络)
  • 集成方案

    • Prometheus + Grafana
    • ELK收集和分析日志
    • 自定义告警规则

示例Prometheus配置:

# 在flink-conf.yaml中 metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter metrics.reporter.prom.port: 9250-9260

4.4 安全加固建议

对于生产环境,务必考虑以下安全措施:

  1. 网络层

    • 限制Web UI和RPC端口的访问IP
    • 启用TLS加密通信
  2. 认证授权

    • 配置Kerberos认证
    • 启用基于角色的访问控制(RBAC)
  3. 数据安全

    • 启用传输加密
    • 配置敏感信息加密

5. 实际应用案例演示

5.1 运行WordCount示例

让我们通过经典案例验证集群功能:

# 提交WordCount批处理作业 $FLINK_HOME/bin/flink run -m node1:8081 \ $FLINK_HOME/examples/batch/WordCount.jar \ --input hdfs://namenode:8020/input/text.txt \ --output hdfs://namenode:8020/output/wordcount # 提交流处理Socket示例(需要先启动Socket服务) $FLINK_HOME/bin/flink run -m node1:8081 \ $FLINK_HOME/examples/streaming/SocketWindowWordCount.jar \ --hostname localhost \ --port 9000

5.2 自定义作业提交

开发一个简单的Flink作业并提交到集群:

// SimpleStreamingJob.java public class SimpleStreamingJob { public static void main(String[] args) throws Exception { final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.addSource(new FlinkKafkaConsumer<>("input-topic", new SimpleStringSchema(), properties)) .flatMap((String value, Collector<Tuple2<String, Integer>> out) -> { for (String word : value.split("\\s")) { out.collect(new Tuple2<>(word, 1)); } }) .keyBy(0) .sum(1) .addSink(new FlinkKafkaProducer<>("output-topic", new SimpleStringSchema(), properties)); env.execute("Kafka WordCount"); } }

打包并提交作业:

mvn clean package $FLINK_HOME/bin/flink run -m node1:8081 target/your-job.jar

5.3 集群管理常用命令

掌握以下命令对日常运维很有帮助:

# 停止集群 $FLINK_HOME/bin/stop-cluster.sh # 单独启动/停止TaskManager $FLINK_HOME/bin/taskmanager.sh start|stop # 查看运行中的作业 $FLINK_HOME/bin/flink list -m node1:8081 # 取消作业 $FLINK_HOME/bin/flink cancel -m node1:8081 <jobID> # 保存点操作 $FLINK_HOME/bin/flink savepoint -m node1:8081 <jobID> [targetDirectory] $FLINK_HOME/bin/flink run -s :savepointPath [:runArgs]

6. 升级与维护策略

6.1 版本升级流程

  1. 准备阶段

    • 备份配置文件和重要数据
    • 阅读新版本发布说明和迁移指南
    • 在测试环境验证升级过程
  2. 执行升级

    # 停止当前集群 $FLINK_HOME/bin/stop-cluster.sh # 安装新版本 wget https://archive.apache.org/dist/flink/flink-1.18.1/flink-1.18.1-bin-scala_2.12.tgz tar -xzf flink-1.18.1-bin-scala_2.12.tgz ln -sfn flink-1.18.1 current # 应用原有配置 cp flink-1.17.0/conf/* flink-1.18.1/conf/ # 启动新集群 $FLINK_HOME/bin/start-cluster.sh
  3. 验证阶段

    • 运行健康检查作业
    • 监控关键指标
    • 逐步迁移生产作业

6.2 日常维护建议

  • 日志管理

    • 配置日志轮转(log4j.properties)
    • 集中收集和分析日志
  • 备份策略

    • 定期备份配置文件和检查点
    • 实现配置版本控制
  • 容量规划

    • 监控资源使用趋势
    • 提前规划扩容

6.3 故障恢复流程

  1. JobManager故障

    • 检查日志定位原因
    • 从最近检查点恢复
    • 考虑配置高可用模式
  2. TaskManager故障

    • 自动重启策略
    • 检查资源使用情况
    • 验证节点健康状况
  3. 数据一致性检查

    • 验证检查点完整性
    • 检查端到端精确一次语义
# 从保存点恢复作业示例 $FLINK_HOME/bin/flink run -m node1:8081 \ -s hdfs://namenode:8020/flink/savepoints/savepoint-123456 \ -n /path/to/your-job.jar
http://www.jsqmd.com/news/582529/

相关文章:

  • Windows系统盘空间告急?Driver Store Explorer帮你轻松清理冗余驱动,快速释放10GB+
  • 高级AI工程师必备:技术选型与架构设计能力提升
  • STL转STEP:3D打印与CAD设计间的桥梁搭建指南
  • Oracle Ogg集成模式升级全攻略:从条件检查到性能优化
  • 三相三电平维也纳Vienna整流器DPWM调制仿真之旅
  • 告别手动压缩!用Python的shutil.make_archive()自动备份你的项目文件
  • Simulink新手必看:二相混合式步进电机驱动器建模避坑指南(附2019b模型文件)
  • 暗黑破坏神3自动化辅助全链路优化指南:从部署到效能提升的效率革命
  • 2026最新储气罐品牌推荐!东北/吉林/长春优质储气罐厂商权威榜单 - 十大品牌榜
  • GOERTEK SPL06-001 LGA-8 压力传感器
  • 保姆级教程:用PyTorch从零复现DeepLab v3+(附MobileNet v2/Xception双Backbone代码详解)
  • 4大核心优势打造高效阅读体验:面向多场景的Rust小说下载解决方案
  • OBS插件终极指南:如何实现单个视频源独立录制与多场景应用
  • RISC-V向量指令集实战:5分钟搞定V扩展的向量加载存储操作
  • 实战演练:基于快马平台开发集成jdk监控工具的web化性能诊断系统
  • AI技术原理--AI上下文窗口:为什么AI没有真正的记忆
  • 2026年4月远程控制软件横评:谁才是你的“跨端神经中枢”?
  • 不用虚拟机!Acer笔记本实战Windows10与Ubuntu20.04双系统共存
  • BROADCHIP广芯 BCT0104EGD-TR QFN 转换器/电平移位器
  • 数据仓库架构设计:分布式架构实现原理与高可用保障实战指南
  • 别再折腾双系统了!用免费VMware Player在Win11上5分钟搞定NOI Linux虚拟机(含性能优化技巧)
  • SEO网站排名优化需要用哪些软件_SEO移动端优化需要用到的软件
  • 别再手动查日志了!用Skywalking 9.x快速定位Spring Boot微服务性能瓶颈
  • 2026超级个体与一人公司:AI赋能、能力模型与生态红利|附10份行业研究报告PDF、数据和可视化模板汇总下载
  • Axure RP高效配置指南:零基础也能懂的本地化方案
  • 5大维度重构华硕笔记本控制体验:写给硬件爱好者的GHelper实战指南
  • EMD - KPCA - SSA - KELM分类组合预测:新手友好的Matlab实现
  • 收藏!后端转AI Agent真实经历|800份投递仅2面试,小白/程序员入门大模型避坑指南
  • 大模型Agent Skills核心解析,一文分清Skills、Tool与MCP
  • 别再让TTS念错数字和日期了!用阿里CosyVoice-ttsfrd给你的文本做个‘朗读前体检’