关键在于构建定制化镜像、用docker-compose编排集群、挂载配置与状态目录,并验证Web UI、JAR上传及带参数提交作业。

用 Docker 部署流计算任务,关键不是“跑起来”,而是让计算节点稳定协同、状态不丢、作业可管可控。Flink 和 Storm 这类框架对网络连通性、配置一致性、存储持久性要求高,直接用官方镜像 run 一下容易在提交作业或故障恢复时出问题。
选对基础镜像并定制化构建
别直接 docker run flink:1.18.1 或 storm:2.5 —— 官方镜像只含最小运行时,缺生产必需的 connector(如 Kafka、MySQL CDC)、自定义配置和端口暴露规则。推荐基于它构建自己的镜像:
- 覆盖
flink-conf.yaml:设jobmanager.rpc.address: jobmanager(不是 localhost),启用state.backend: filesystem并指向/opt/flink/checkpoints - 把 Kafka、Elasticsearch、JDBC 等 connector JAR 放进
/opt/flink/lib/目录 - Dockerfile 中显式声明
EXPOSE 8081 6123(Web UI 和 RPC 端口,后者是 TaskManager 注册必需)
用 docker-compose 编排集群而非手动启动
手动 run 多个容器极易出现 IP 写死、启动顺序错乱、DNS 解析失败等问题。用 docker-compose.yml 统一管理更可靠:
-
jobmanager服务必须声明ports: ["8081:8081"],并设环境变量JOB_MANAGER_RPC_ADDRESS=jobmanager -
taskmanager必须depends_on: [jobmanager],且通过environment或command显式传入相同地址 - 所有服务加入同一自定义网络(如
networks: [flink-net]),Docker 内置 DNS 才能把jobmanager解析为实际容器 IP
挂载配置与状态目录保障可靠性
容器重启后配置丢失、Checkpoint 断链,等于流任务失去容错能力。必须靠宿主机目录挂载来固化关键路径:
- 挂载
./conf/flink-conf.yaml:/opt/flink/conf/flink-conf.yaml替换默认配置 - 挂载
./checkpoints:/opt/flink/checkpoints和./savepoints:/opt/flink/savepoints,确保故障后可恢复 - 若需 SQL 任务热加载,可额外挂载
./sql:/opt/flink/sql
验证与提交作业的关键动作
容器启动成功只是第一步,真正跑通要确认三件事:
- 访问
http://localhost:8081,确认 JobManager Web UI 正常,且 TaskManager 列表显示 “registered”(非 unregistered) - 用
curl -X POST http://localhost:8081/jars/upload上传打包好的 Flink Job JAR(含 main class) - 提交时显式指定
parallelism和 checkpoint 参数,例如:{"execution-config": {"parallelism": 2}},避免因配置缺失导致任务退化为单线程


















