Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL

  • Redis

  • Keydb

  • TiDB

  • MongoDB

  • Elasticsearch

  • Kafka

  • victoriametrics

  • BigData

    • Flink 集群部署指南
    • Sqlserver

    • 数据库
    • BigData
    Carry の Blog
    2024-09-20
    目录

    Flink 集群部署指南原创

    # Flink 集群部署详细指南(基于 CentOS 7.9)

    本文旨在帮助你基于 CentOS 7.9 完整地部署 Apache Flink 集群,涵盖从安装到高可用配置和日常运维,并附带一些性能优化建议。我们还将针对生产环境中的常见问题进行探讨,确保部署稳定且高效。


    # 1. Flink 简介

    Apache Flink 是一个开源的分布式流处理框架,支持实时数据流和批处理。它在流数据处理、数据管道构建以及大数据分析方面具有强大的能力。Flink 集群模式由以下组件组成:

    • JobManager:负责任务调度、资源分配和管理,是 Flink 的核心。
    • TaskManager:执行实际任务,可以根据需求水平扩展多个 TaskManager 实例,以提升并行处理能力。
    • Dispatcher:提供 REST API,用于提交任务。
    • ZooKeeper (可选):用于高可用部署,确保 JobManager 的状态在宕机时能够自动恢复。

    # 2. 环境准备

    # 操作系统和依赖工具

    • 操作系统:本文基于 CentOS 7.9 进行部署,其他 Linux 发行版如 Ubuntu 也适用。
    • Java:Flink 需要 JDK 1.8 或 11,推荐使用稳定的 JDK 11。
    • SSH:用于节点间通信,需配置无密码登录。
    • ZooKeeper:用于实现 Flink 集群的高可用性(可选)。

    # 配置要求

    • 至少两台服务器(1 个 JobManager + 1 个 TaskManager),建议配置 4 GB 内存和 4 核 CPU 的机器。
    • 确保服务器之间的网络互通,且防火墙已正确配置。

    # 3. Flink 集群部署步骤

    # 3.1 安装 JDK 11

    首先,安装 Java 环境:

    yum install java-11-openjdk-devel -y
    java -version  # 确认安装版本
    
    1
    2

    # 3.2 下载和解压 Flink

    从 Apache 官方网站下载最新的稳定版 Flink(如 1.19.x):

    wget https://downloads.apache.org/flink/flink-1.19.1/flink-1.19.1-bin-scala_2.12.tgz
    tar -xzf flink-1.19.1-bin-scala_2.12.tgz
    cd flink-1.19.1
    
    1
    2
    3

    # 3.3 配置 Flink

    在 conf 目录下修改 Flink 的配置文件:

    • 编辑 flink-conf.yaml 文件:
    jobmanager.rpc.address: <JobManager的IP或主机名>
    taskmanager.numberOfTaskSlots: 4  # 每个 TaskManager 的 Slot 数量,根据硬件性能调整
    parallelism.default: 2  # 默认并行度
    state.backend: filesystem  # 使用文件系统存储状态
    state.checkpoints.dir: file:///path/to/checkpoints  # Checkpoint 保存路径
    state.savepoints.dir: file:///path/to/savepoints  # Savepoint 保存路径
    
    1
    2
    3
    4
    5
    6
    • 编辑 masters 文件,设置 JobManager 的 IP 地址和端口:
    <JobManager的IP>:8081
    
    1
    • 编辑 workers 文件,列出所有 TaskManager 节点的 IP 地址:
    <TaskManager1的IP>
    <TaskManager2的IP>
    
    1
    2

    # 3.4 分发 Flink 到各节点

    如果集群使用多台服务器,则需要将 Flink 安装包分发到其他 TaskManager 节点:

    scp -r flink-1.19.1 user@<TaskManager1的IP>:/home/user/
    scp -r flink-1.19.1 user@<TaskManager2的IP>:/home/user/
    
    1
    2

    确保每个节点的配置文件一致。

    # 3.5 启动 Flink 集群

    • 启动 JobManager:
    ./bin/start-cluster.sh
    
    1
    • 验证集群:访问 http://<JobManager的IP>:8081,检查 Flink Web UI,确认集群正常启动,TaskManager 已注册。

    • 启动 TaskManager:

    ./bin/taskmanager.sh start
    
    1

    # 4. 高可用配置(可选)

    为了确保集群的高可用性,我们需要配置 ZooKeeper 来保存 JobManager 的状态信息。

    # 4.1 安装 ZooKeeper

    yum install zookeeper -y
    
    1

    # 4.2 配置高可用

    修改 flink-conf.yaml,添加以下配置:

    high-availability: zookeeper
    high-availability.storageDir: hdfs:///flink/recovery  # 或者使用本地文件系统
    high-availability.zookeeper.quorum: <ZooKeeper的IP>:2181
    high-availability.cluster-id: /flink-cluster
    
    1
    2
    3
    4

    # 4.3 启动 ZooKeeper

    zkServer.sh start
    
    1

    通过集成 ZooKeeper,Flink 将支持 JobManager 的自动故障切换与恢复。


    # 5. 日常运维

    # 5.1 日志管理

    Flink 生成的日志存储在 log 目录下,可以通过以下命令查看实时日志:

    tail -f log/flink-*.log
    
    1

    为避免日志文件过大,推荐使用 logrotate 进行日志轮转管理。

    # 5.2 监控集群

    在生产环境中,监控集群至关重要。可以通过 Flink 自带的 Web UI 监控集群状态,或者集成 Prometheus 和 Grafana 获取更详细的资源监控数据。


    # 6. 性能优化建议

    # 6.1 Task Slots 和并行度配置

    • Task Slots 数量:可以根据每台服务器的 CPU 核心数和内存来调整 taskmanager.numberOfTaskSlots,通常与 CPU 核心数匹配。
    • 默认并行度:根据作业负载调整 parallelism.default,并确保资源分配合理。

    # 6.2 内存优化

    编辑 flink-conf.yaml,根据任务需求调整 TaskManager 的堆内存大小:

    taskmanager.memory.process.size: 4g  # 任务复杂度决定堆大小
    
    1
    #Flink#集群部署#实时流处理
    上次更新: 4/24/2025

    ← VictoriaMetrics 集群版安装与配置

    最近更新
    01
    tidb fast ddl
    04-04
    02
    TiDB配置文件调优 原创
    04-03
    03
    如何移除TiDB中的表分区 原创
    04-03
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式