数据岗位面试题更新 2026-08-05

在 Apache Storm 中,Worker 进程与 Executor 线程之间有哪些关键差异?你通常依据什么原则来确定这两者的数量配置?

数据性能优化系统设计技术原理Apache Storm

考察说明

考查对 Storm 运行时资源模型的理解及配置调优思路。

回答思路

  1. 【回答框架 1】Worker 是运行拓扑的 JVM 进程,负责隔离和资源分配;Executor 是 Worker 内运行组件(Spout/Bolt)的线程,负责并发执行任务。一个 Worker 可包含多个 Executor,一个 Executor 可执行一个组件的多个任务。
  2. 【回答框架 2】Worker 数量通过配置参数 topology.workers 设置,决定整个拓扑占用的进程数;Executor 数量通过 setSpout/setBolt 方法中的 parallelism_hint 设置,表示组件的初始并发度。调整 Worker 数影响集群资源占用和进程隔离粒度,调整 Executor 数影响线程级并发。
  3. 【回答框架 3】配置数量需考虑集群资源(CPU、内存)、数据流量、组件计算复杂度以及延迟要求。通常先按数据量和算子耗时估算并行度,再根据资源上限设置 Worker 数,避免单个 Worker 内线程过多导致竞争,也避免 Worker 过多导致资源浪费和调度开销。
  4. 【回答框架 4】实际调优建议:从默认配置开始,压测观察吞吐和延迟,逐步调整 Executor 数或 Worker 数,关注资源使用率和反压情况,以实际应用负载和设备资源为准确定最佳组合。
  5. 【回答框架 5】配置数量没有固定公式,依赖具体的拓扑结构、数据规模和硬件环境,需通过实验和监控数据迭代优化。
  6. 【关键点 1】Worker 是进程级资源单元,Executor 是线程级并发执行单元。
  7. 【关键点 2】Worker 数量由 topology.workers 配置,Executor 数量由组件并行度设置决定。
  8. 【关键点 3】配置数量需综合资源限制、负载特征和性能目标,并通过压测验证。
  9. 【关键点 4】线程数公式 Ncpu × (1 + W/C) 仅可作为初始估算,最终以资源上限、延迟目标和压测为准。
  10. 【易错点 1】不能简单把 Executor 数量等同于并发度,实际运行的任务数还受 task 配置影响。
  11. 【易错点 2】仅增加 Worker 数而不考虑资源限制,可能导致集群资源耗尽或调度延迟增大。
  12. 【易错点 3】将 Worker 和 Executor 混为一谈,忽略进程与线程在隔离性和资源管理上的不同。