Apache Storm 2.8.9 配置参数详解
详解 Apache Storm 2.8.9 的 storm.yaml 核心参数——ZooKeeper 连接、nimbus.seeds、supervisor.slots.ports、UI/Logviewer 端口、四守护进程与 Worker 的 childopts/堆 256-512MB、资源容量上限,全部默认值经 localconfvalue 实测并给出生产模板
Apache Storm 2.8.9 配置参数详解
目标:详解 Apache Storm 2.8.9 的
conf/storm.yaml核心配置——ZooKeeper 连接、Nimbus 种子、Supervisor 资源槽位、UI/Logviewer 端口、四个守护进程与 Worker 的 JVM 堆(256-512MB)与资源容量参数,并给出生产模板。文中默认值均通过storm localconfvalue在真实环境实测。
一、环境信息
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- Apache Storm:2.8.9(安装目录
/opt/storm) - 配置文件:
/opt/storm/conf/storm.yaml - ZooKeeper:3.8.7(独立部署,
/opt/zookeeper) - Java:OpenJDK 17.0.20.1
- 端口:Nimbus 6627、UI 8080、Logviewer 8081、ZooKeeper 2181、Worker slots 6700-6703
- 本机 storm.yaml:显式配置了
storm.zookeeper.servers、nimbus.seeds、storm.local.dir、supervisor.slots.ports、ui.port、logviewer.port与四个*.childopts
二、前置条件
- 已按《Ubuntu 22.04 安装 Apache Storm 2.8.9 指南》完成 Storm 2.8.9 与 ZooKeeper 3.8.7 安装。
- 配置修改后需重启对应守护进程生效(systemd:
systemctl restart <单元>)。 - 验证配置用
storm localconfvalue(本地解析值)与jps -v(JVM 实际生效参数)。
三、参数查看与修改方式
Storm 配置按「内置默认值 → conf/storm.yaml 覆盖 → 拓扑级 conf 覆盖」三级生效。日常改 /opt/storm/conf/storm.yaml(YAML 格式,键值冒号分隔,列表用缩进短横线)。
查看解析值(本地视角,含 storm.yaml 覆盖结果):
/opt/storm/bin/storm localconfvalue ui.port
/opt/storm/bin/storm localconfvalue worker.heap.memory.mb
实测回显:
ui.port: 8080
worker.heap.memory.mb: 768
查看 Nimbus 侧解析值(远程读取主 Nimbus 的生效配置):
/opt/storm/bin/storm remoteconfvalue ui.port
实测回显:
ui.port: 8080
💡 Storm 2.8 发行包不再附带
defaults.yaml文件,内置默认值已编译进 jar;把storm.yaml临时改名后执行localconfvalue即可读出某键的出厂默认值(实测:nimbus.childopts默认-Xmx1024m、ui.childopts默认-Xmx768m、supervisor.childopts默认-Xmx256m、logviewer.childopts默认-Xmx128m、nimbus.seeds默认localhost、storm.local.dir默认storm-local相对路径)。查完记得把storm.yaml改回原名。
修改生效路径:
vim /opt/storm/conf/storm.yaml
systemctl restart storm-nimbus
systemctl restart storm-supervisor
systemctl restart storm-ui
systemctl restart storm-logviewer
四、参数总览
| 参数 | 内置默认值 | 本机配置值 | 说明 |
|---|---|---|---|
storm.zookeeper.servers | (无) | 127.0.0.1 | ZooKeeper 主机列表 |
storm.zookeeper.port | 2181 | 2181 | ZooKeeper 客户端端口 |
nimbus.seeds | localhost | 127.0.0.1 | Nimbus 种子主机列表 |
nimbus.thrift.port | 6627 | 6627 | Nimbus Thrift 服务端口 |
nimbus.childopts | -Xmx1024m | -Xms256m -Xmx512m | Nimbus JVM 参数 |
storm.local.dir | storm-local | /data/storm | 本地状态目录 |
supervisor.slots.ports | 6700 6701 6702 6703 | 6700-6703 | Worker 槽位端口 |
supervisor.childopts | -Xmx256m | -Xms256m -Xmx512m | Supervisor JVM 参数 |
supervisor.memory.capacity.mb | 4096.0 | 4096.0 | Supervisor 可分配内存总量(MB) |
supervisor.cpu.capacity | 400.0 | 400.0 | Supervisor 可分配 CPU 总量(核×100) |
worker.heap.memory.mb | 768 | 768 | 单个 Worker 堆内存(MB) |
worker.childopts | -Xmx%HEAP-MEM%m ...(见 5.3.4) | 同默认 | Worker JVM 参数模板 |
ui.port | 8080 | 8080 | UI 端口 |
ui.host | 0.0.0.0 | 0.0.0.0 | UI 监听地址 |
ui.childopts | -Xmx768m | -Xms256m -Xmx512m | UI JVM 参数 |
logviewer.port | 8081 | 8081 | Logviewer 端口 |
logviewer.childopts | -Xmx128m | -Xms256m -Xmx512m | Logviewer JVM 参数 |
topology.workers | 1 | 1 | 拓扑默认 Worker 数(提交时可覆盖) |
topology.message.timeout.secs | 30 | 30 | 消息处理超时(秒) |
topology.debug | false | false | 拓扑调试日志开关 |
实测取值方式均为
/opt/storm/bin/storm localconfvalue <键>;「本机配置值」与默认值相同的键表示未覆盖或显式写成默认。
五、核心参数分类详解
5.1 ZooKeeper 连接参数
5.1.1 storm.zookeeper.servers
ZooKeeper 主机列表。单机写本机,集群逐行列出所有主机:
storm.zookeeper.servers:
- "10.0.0.11"
- "10.0.0.12"
- "10.0.0.13"
本机单机实测值:
storm.zookeeper.servers:
- "127.0.0.1"
5.1.2 storm.zookeeper.port
ZooKeeper 客户端端口,默认 2181。非标准端口部署时才需覆盖:
storm.zookeeper.port: 2181
⚠️ ZooKeeper 3.8+ 的 AdminServer 默认也监听 8080,与
ui.port冲突(实测 UI 因此起不来)。在 ZooKeeper 侧zoo.cfg加admin.enableServer=false或改admin.serverPort,与 Storm 配置无关但属于最常见的联合配置坑。
5.2 Nimbus 参数
5.2.1 nimbus.seeds
Nimbus 种子地址列表,客户端与 Supervisor 由此发现主 Nimbus。HA 部署列出所有候选 Nimbus 主机:
nimbus.seeds: ["127.0.0.1"]
💡 2.x 已废弃
nimbus.host(实测localconfvalue nimbus.host返回null),统一用nimbus.seeds。
5.2.2 nimbus.thrift.port
Nimbus Thrift RPC 端口(storm 客户端、UI 都连它),默认 6627:
nimbus.thrift.port: 6627
5.2.3 nimbus.childopts(JVM 堆 256-512MB)
Nimbus JVM 参数。内置默认 -Xmx1024m 对小内存服务器偏大,实测改为:
nimbus.childopts: "-Xms256m -Xmx512m"
重启后核对生效值:
jps -v | grep Nimbus | tr ' ' '\n' | grep -E "Xms|Xmx"
实测回显:
-Xms256m
-Xmx512m
5.3 Supervisor 与 Worker 资源参数
5.3.1 supervisor.slots.ports
Worker 槽位:每个端口对应一个 Worker 进程,决定单 Supervisor 最多并发 Worker 数。默认 6700-6703 共 4 个:
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
扩容即追加端口(如 6704、6705)并重启 supervisor。
5.3.2 supervisor.childopts
Supervisor 自身 JVM 参数(不含 Worker),实测限 256-512MB:
supervisor.childopts: "-Xms256m -Xmx512m"
5.3.3 supervisor.memory.capacity.mb 与 supervisor.cpu.capacity
调度器视角的 Supervisor 资源总量上限(默认实测值):
supervisor.memory.capacity.mb: 4096.0
supervisor.cpu.capacity: 400.0
💡
localconfvalue ui.port等常规验证之外,这两个值也与 UI 集群摘要一致:实测curl http://127.0.0.1:8080/api/v1/cluster/summary返回"totalMem":4096.0,"totalCpu":400.0,"slotsTotal":4。小内存机器部署时把supervisor.memory.capacity.mb调到物理内存可承受的值,避免调度器超卖。
5.3.4 worker.heap.memory.mb 与 worker.childopts
单 Worker 堆内存默认 768MB;worker.childopts 中的 %HEAP-MEM% 占位符在 Worker 启动时被替换为该值(实测解析值):
worker.childopts: -Xmx%HEAP-MEM%m -XX:+IgnoreUnrecognizedVMOptions -XX:+PrintGCDetails -Xloggc:artifacts/gc.log -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=1M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=artifacts/heapdump
压缩 Worker 堆到 256MB(小机器多 Worker 场景):
worker.heap.memory.mb: 256
Worker 堆也可按拓扑覆盖:提交时在 storm jar <jar路径> <主类> <拓扑名> 后追加 -c topology.worker.heap.memory.mb=512。
5.3.5 storm.local.dir
Nimbus/Supervisor 本地状态目录(jar 上传暂存、心跳、worker-ids)。默认 storm-local(相对安装目录),生产显式落到数据盘:
storm.local.dir: "/data/storm"
⚠️ 多节点部署时这是各节点本地目录,禁止挂同一共享盘;Nimbus 与 Supervisor 在同一台机器时可用同一目录(实测单机用
/data/storm)。
5.4 UI 与 Logviewer 参数
5.4.1 ui.port 与 ui.host
UI 端口默认 8080,监听地址默认 0.0.0.0(实测值):
ui.port: 8080
ui.host: 0.0.0.0
5.4.2 logviewer.port
Logviewer(Worker/守护进程日志网页查看)端口,默认 8081:
logviewer.port: 8081
5.4.3 ui.childopts 与 logviewer.childopts
两个 Web 类守护进程的 JVM 参数,实测限 256-512MB(默认分别为 -Xmx768m、-Xmx128m):
ui.childopts: "-Xms256m -Xmx512m"
logviewer.childopts: "-Xms256m -Xmx512m"
5.5 拓扑级参数(defaults,提交时可覆盖)
5.5.1 topology.workers
拓扑默认 Worker 数(默认 1)。WordCount 示例自带 topology.workers=3(实测提交回显 Submitting topology wordcount in distributed mode with conf {...,"topology.workers":3,...}),运行中改用 rebalance(实测 workers 3→2):
/opt/storm/bin/storm rebalance wordcount -w 5 -n 2
5.5.2 topology.message.timeout.secs
Tuple 处理超时(默认 30 秒),超时触发重放。要求低延迟可调小,业务可能长阻塞时调大:
topology.message.timeout.secs: 30
5.5.3 topology.debug
调试日志开关(默认 false)。排障时提交拓扑带 -c topology.debug=true,会显著增加日志量,用完关闭。
六、生产配置模板
适用场景:8-16GB 内存服务器、SSD、单机伪集群或作为 3 节点 Storm 集群中每台 Supervisor 的基准模板;守护进程堆统一 256-512MB,资源容量按物理内存对齐。
storm.zookeeper.servers:
- "10.0.0.11"
- "10.0.0.12"
- "10.0.0.13"
nimbus.seeds: ["10.0.0.11", "10.0.0.12"]
storm.local.dir: "/data/storm"
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
- 6705
ui.port: 8080
logviewer.port: 8081
nimbus.childopts: "-Xms256m -Xmx512m"
supervisor.childopts: "-Xms256m -Xmx512m"
ui.childopts: "-Xms256m -Xmx512m"
logviewer.childopts: "-Xms256m -Xmx512m"
supervisor.memory.capacity.mb: 8192.0
supervisor.cpu.capacity: 800.0
worker.heap.memory.mb: 512
内存说明:四个守护进程合计堆上限约 2GB(各 512MB);Worker 按
worker.heap.memory.mb: 512× 6 槽位上限约 3GB,supervisor.memory.capacity.mb: 8192需与物理内存留出系统与 ZooKeeper 余量后对齐;16GB 内存机器建议 Worker 槽位与容量按 6 Worker × 512MB 上量并压测后调整。磁盘需为/data/storm(拓扑 jar 暂存)与/opt/storm/logs预留 20GB+。
七、常见问题
7.1:改了 storm.yaml 不生效
定位:配置只在守护进程启动时读取。
解决:逐个重启对应单元(systemctl restart storm-nimbus 等)后,用 localconfvalue 与 jps -v 复核(JVM 类参数必须看 jps -v 实际回显,文件值≠生效值)。
7.2:UI 端口 8080 被占,UI 起不来
定位:ZooKeeper 3.8+ AdminServer 默认监听 8080(实测 netstat -tlnp 中 8080 归属 ZooKeeper 进程)。
解决:ZooKeeper zoo.cfg 加 admin.enableServer=false 重启;或 Storm 侧改 ui.port: 8082。
7.3:YAML 缩进错误导致启动失败
定位:supervisor.slots.ports 这类列表必须用短横线缩进逐行书写;写成行内 [6700,6701] 虽合法但与官方模板不一致,手改缩进时最常见混用 TAB 导致解析失败。
解决:统一空格缩进,改完先 localconfvalue 验证解析,再重启服务。
7.4:Worker 起不来,报内存不足
定位:Worker 申请堆 = worker.heap.memory.mb(默认 768),多 Worker 同时启动时超过机器可用内存。
解决:调低 worker.heap.memory.mb(如 256/512)、减少 supervisor.slots.ports,或提高 supervisor.memory.capacity.mb 与物理内存对齐后重启 supervisor。
7.5:localconfvalue 显示的默认值与文档不同
定位:Storm 各小版本默认值有差异(如 2.8.x 的守护进程默认堆与 2.4 不同)。
解决:以本机 storm localconfvalue <键> 实测值为准(本文全部默认值均按此法实测自 2.8.9)。
八、参考链接
- Storm 2.8.9 官方配置参考:https://storm.apache.org/releases/2.8.9/defaults.html
- Storm 2.8.9 集群搭建文档:https://storm.apache.org/releases/2.8.9/Setting-up-a-Storm-cluster.html
- Apache Storm 下载:https://archive.apache.org/dist/storm/
- Storm internal configuration 文档:https://storm.apache.org/releases/2.8.9/Internal-Configuration.html