news 2026/11/3 17:37:29

Flink 1.20 Docker单机部署与监控配置实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink 1.20 Docker单机部署与监控配置实战

1. Flink 1.20 Docker单机部署实战

作为一名长期奋战在大数据一线的工程师,我深知快速搭建测试环境的重要性。今天要分享的是基于Docker的Flink 1.20单机部署方案,这个方案经过我们团队多次迭代优化,已经成为内部标准化的开发环境配置。

1.1 为什么选择Docker部署

在本地开发测试场景下,Docker部署Flink具有显著优势:

  • 环境隔离干净:不会污染宿主机环境,避免版本冲突
  • 启动速度快:相比传统集群部署,从零到运行只需5分钟
  • 配置灵活:通过volume挂载实现配置热更新
  • 资源占用少:单机模式对硬件要求低,适合笔记本开发

生产环境建议使用K8s或YARN部署,但本地开发测试场景下Docker方案无疑是最佳选择

1.2 准备工作

1.2.1 硬件要求

建议配置:

  • 至少4核CPU
  • 8GB内存
  • 20GB可用磁盘空间
1.2.2 软件依赖

确保已安装:

  • Docker 20.10+
  • Docker Compose 2.0+
  • 建议使用Linux或MacOS系统(Windows需配置WSL2)

2. 详细部署步骤

2.1 目录结构规划

合理的目录结构是后续维护的基础,建议按以下方式创建:

mkdir -p /data/flink/{lib,conf,sql,checkpoints,savepoints,jars}

目录用途说明:

目录用途生产环境建议
lib存放额外jar包(连接器、驱动等)建议使用Nexus私服管理
conf自定义配置文件建议版本化管理
sqlFlink SQL脚本建议Git管理
checkpointsCheckpoint持久化目录建议使用分布式存储
savepointsSavepoint持久化目录建议定期清理
jars监控相关依赖包可纳入CI/CD流程

2.2 监控依赖安装(可选)

如果需要采集系统资源指标,需要额外下载以下依赖:

# OSHI核心库 - Java系统信息采集神器 wget -P /data/flink/jars https://repo1.maven.org/maven2/com/github/oshi/oshi-core/6.4.11/oshi-core-6.4.11.jar # JNA及其平台库 - OSHI的底层依赖 wget -P /data/flink/jars https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar wget -P /data/flink/jars https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/5.13.0/jna-platform-5.13.0.jar

监控功能会增加约5%的资源开销,如果只是简单测试可以跳过

2.3 Docker Compose配置详解

创建docker-compose.yml文件,这是整个部署的核心:

version: '3.8' services: jobmanager: image: flink:1.20.1-scala_2.12-java17 hostname: jobmanager ports: - "8081:8081" # Web UI - "6123:6123" # RPC端口 - "9020:9020" # Prometheus指标端口 command: jobmanager environment: - TZ=Asia/Shanghai - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager state.backend: filesystem state.checkpoints.dir: file:///opt/flink/checkpoints/ state.savepoints.dir: file:///opt/flink/savepoints/ execution.checkpointing.interval: 30000 metrics.reporters: prom metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory metrics.reporter.prom.port: 9020 metrics.system-resource: true volumes: - /data/flink/jars/oshi-core-6.4.11.jar:/opt/flink/lib/oshi-core-6.4.11.jar - /data/flink/jars/jna-5.13.0.jar:/opt/flink/lib/jna-5.13.0.jar - /data/flink/jars/jna-platform-5.13.0.jar:/opt/flink/lib/jna-platform-5.13.0.jar - /data/flink/checkpoints:/opt/flink/checkpoints - /data/flink/savepoints:/opt/flink/savepoints taskmanager: image: flink:1.20.1-scala_2.12-java17 depends_on: - jobmanager command: taskmanager ports: - "9021:9021" # Prometheus指标端口 environment: - TZ=Asia/Shanghai - | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager state.backend: filesystem state.checkpoints.dir: file:///opt/flink/checkpoints/ state.savepoints.dir: file:///opt/flink/savepoints/ taskmanager.numberOfTaskSlots: 4 metrics.reporters: prom metrics.reporter.prom.factory.class: org.apache.flink.metrics.prometheus.PrometheusReporterFactory metrics.reporter.prom.port: 9021-9040 metrics.system-resource: true volumes: - /data/flink/jars/oshi-core-6.4.11.jar:/opt/flink/lib/oshi-core-6.4.11.jar - /data/flink/jars/jna-5.13.0.jar:/opt/flink/lib/jna-5.13.0.jar - /data/flink/jars/jna-platform-5.13.0.jar:/opt/flink/lib/jna-platform-5.13.0.jar - /data/flink/checkpoints:/opt/flink/checkpoints - /data/flink/savepoints:/opt/flink/savepoints

关键配置解析:

配置项说明生产建议
state.backend状态后端类型生产建议用RocksDB
execution.checkpointing.intervalCheckpoint间隔根据业务容忍度调整
taskmanager.numberOfTaskSlots每个TM的slot数建议设置为CPU核心数
metrics.reporter.prom.port指标端口多TM时需要范围端口

特别注意:metrics.reporters: prom这行后面绝对不能加注释,否则会导致配置解析失败

3. 服务启动与验证

3.1 启动服务

docker compose up -d

检查服务状态:

docker compose ps

正常应该看到两个服务状态为running

3.2 访问Web UI

浏览器打开http://localhost:8081,应该能看到Flink的Web界面:

3.3 提交测试任务

准备一个简单的SQL文件/data/flink/sql/test.sql:

-- 创建数据源表 CREATE TABLE source_table ( id INT, data STRING ) WITH ( 'connector' = 'datagen', 'rows-per-second' = '10' ); -- 创建结果表 CREATE TABLE print_table ( id INT, data STRING ) WITH ( 'connector' = 'print' ); -- 执行查询 INSERT INTO print_table SELECT * FROM source_table;

提交任务:

docker exec -it flink-jobmanager-1 /opt/flink/bin/sql-client.sh -f /opt/flink/sql/test.sql

4. 监控配置

4.1 Prometheus采集配置

在Prometheus的prometheus.yml中添加:

scrape_configs: - job_name: 'flink-jm' static_configs: - targets: ['jobmanager:9020'] labels: group: jm - job_name: 'flink-tm' static_configs: - targets: ['taskmanager:9021'] labels: group: tm

4.2 告警规则配置

创建flink-rules.yml,包含三类告警规则:

  1. 任务级告警:

    • 任务停止
    • 任务重启
    • Checkpoint失败
  2. TaskManager告警:

    • 内存使用过高
    • GC时间过长
    • 反压告警
  3. 集群级告警:

    • JobManager不可用
    • TaskManager不可用
    • Slot不足

完整规则示例:

groups: - name: flink-job-alerts rules: - alert: Flink任务停止运行 expr: flink_jobmanager_job_uptime == 0 for: 1m labels: severity: critical annotations: summary: "任务 {{ $labels.job_name }} 已停止" - name: flink-taskmanager-alerts rules: - alert: Flink TM堆内存过高 expr: flink_taskmanager_Status_JVM_Memory_Heap_Used / flink_taskmanager_Status_JVM_Memory_Heap_Max > 0.85 for: 5m labels: severity: warning - name: flink-cluster-alerts rules: - alert: Flink JobManager不可用 expr: up{job="flink-jm"} == 0 for: 1m labels: severity: critical

5. 生产环境优化建议

虽然本文是单机部署方案,但有些优化点同样适用于生产环境:

  1. 状态后端优化:

    • 使用RocksDB替代文件系统
    • 配置增量Checkpoint
    • 设置合理的state.ttl
  2. 资源调优:

    • 调整JVM堆内存比例
    • 配置合理的网络缓冲区
    • 设置适当的并行度
  3. 高可用配置:

    • 配置ZooKeeper集群
    • 设置多个JobManager
    • 配置HA存储目录

6. 常见问题排查

6.1 TaskManager连接失败

现象:TaskManager日志显示连接JobManager失败

排查步骤:

  1. 检查jobmanager.rpc.address配置
  2. 验证网络连通性
  3. 检查端口映射是否正确

6.2 Checkpoint失败

现象:Web UI显示Checkpoint失败

解决方案:

  1. 检查目录权限
    chmod -R 777 /data/flink/checkpoints
  2. 增加Checkpoint超时时间
  3. 检查磁盘空间

6.3 指标采集异常

现象:Prometheus无法采集指标

排查步骤:

  1. 验证端口是否开放
    nc -zv localhost 9020
  2. 检查OSHI和JNA依赖是否正确安装
  3. 查看Flink日志确认Reporter初始化是否成功

7. 扩展与定制

7.1 添加自定义连接器

将连接器jar包放入/data/flink/lib目录,例如Kafka连接器:

wget -P /data/flink/lib https://repo1.maven.org/maven2/org/apache/flink/flink-connector-kafka/1.20.1/flink-connector-kafka-1.20.1.jar

7.2 多TaskManager部署

复制taskmanager服务配置并修改名称:

taskmanager2: <<: *taskmanager ports: - "9022:9022"

7.3 自定义配置

创建/data/flink/conf/flink-conf.yaml进行个性化配置,然后在compose文件中取消对应挂载注释

8. 性能测试数据

我们在4核8G的机器上进行了基准测试:

场景TPS延迟资源占用
单TM单Slot5k50msCPU 30%
单TM4Slot18k45msCPU 85%
双TM各4Slot35k40msCPU 90%

测试使用DataGen源和Print Sink,实际业务性能会有所不同

9. 版本升级指南

升级到新版本Flink的步骤:

  1. 修改compose文件中的镜像版本
  2. 停止现有服务
    docker compose down
  3. 备份checkpoints和savepoints
  4. 启动新版本服务
    docker compose up -d
  5. 从savepoint恢复任务

10. 最佳实践总结

经过多个项目的实践验证,我们总结了以下经验:

  1. 目录权限:提前设置好挂载目录的权限,避免运行时出错
  2. 资源配置:根据任务特点调整TM的slot数和堆内存大小
  3. 监控告警:至少配置任务停止和Checkpoint失败的告警
  4. 版本管理:将docker-compose.yml纳入版本控制
  5. 日志收集:配置ELK收集容器日志,方便排查问题

这套方案已经在我们团队内部使用了2年多,支撑了数十个开发测试环境的快速搭建。特别是在POC验证阶段,能够帮助研发同学快速验证想法,大幅提升了开发效率。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 17:36:52

Windows下3D高斯泼溅算法环境搭建全攻略

1. 环境准备&#xff1a;搭建3D高斯泼溅算法的开发环境 作为一名长期从事计算机视觉和图形渲染的开发者&#xff0c;我最近在Windows系统上搭建3D高斯泼溅(Gaussian Splatting)算法环境时踩了不少坑。这个算法作为新兴的3D场景表示方法&#xff0c;相比传统的NeRF有着更快的渲染…

作者头像 李华
网站建设 2026/11/3 17:35:53

系统顶层设计模块:模块边界、接口契约与容量估算实践

1. 顶层设计模块到底在解决什么问题做过几年系统建设的人大概都有过这种体验&#xff1a;需求评审会上大家点头如捣蒜&#xff0c;等到真正开工&#xff0c;三个团队各自画出的架构图放在一起&#xff0c;接口对不上、数据口径对不上、连"用户"这个词指代的实体都不是…

作者头像 李华
网站建设 2026/11/3 17:35:49

企业级配置中心选型与实战精要

1. 项目背景与核心价值 配置中心在现代企业级应用架构中扮演着神经中枢的角色。过去五年间&#xff0c;我参与过7个不同行业的配置中心落地项目&#xff0c;从金融行业的严格合规要求到电商大促期间的动态调参&#xff0c;配置管理的好坏直接决定了系统的弹性能力。这个标题提到…

作者头像 李华
网站建设 2026/11/3 17:35:40

SpringBoot 3整合Knife4j与Nginx实现安全API文档管理

1. 项目背景与核心需求最近在开发一个基于SpringBoot 3的后端服务时&#xff0c;遇到了API文档管理的痛点。传统的Swagger UI在界面美观度和功能丰富性上已经不能满足我们的需求&#xff0c;特别是在需要将文档提供给外部合作伙伴使用时。经过技术选型&#xff0c;我们最终决定…

作者头像 李华
网站建设 2026/11/3 17:35:09

Wallpaper Engine mpkg文件解析与MP4导出全指南

1. 为什么“mpkg转mp4”是个伪命题&#xff1f;从Wallpaper Engine底层机制讲清楚 很多人在搜索栏里敲下“mpkg转mp4”&#xff0c;点开结果却越看越迷糊&#xff1a;有的教程让你拖进某个解包工具&#xff0c;有的说要改后缀名&#xff0c;还有的推荐一堆带“破解”字眼的第三…

作者头像 李华
网站建设 2026/11/3 17:35:04

2026年CRM系统趋势与权威评测解析

1. CRM系统行业现状与2026年趋势前瞻2026年的CRM市场已经呈现出明显的智能化、垂直化和生态化特征。根据Gartner最新调研数据&#xff0c;全球CRM软件市场规模预计将达到1450亿美元&#xff0c;年复合增长率保持在12%以上。这个数字背后反映的是企业数字化转型进入深水区后&…

作者头像 李华