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

请解释在 Apache Storm 中实现流式数据过滤和聚合的典型做法,并说明其背后的机制。

数据系统设计技术原理Apache Storm

考察说明

考察对 Storm 流处理模型及其 API 的理解,以及实际应用中如何实现过滤和聚合。

回答思路

  1. 【回答框架 1】Storm 的流处理基于 Spout 和 Bolt。Spout 作为数据源发射元组,Bolt 负责处理。过滤操作通常在 Bolt 中实现,通过检查元组字段,如果满足条件则调用 emit 方法转发,否则不发射,从而实现过滤。
  2. 【回答框架 2】聚合操作也可以在一个 Bolt 中完成,使用窗口机制。Storm 支持滑动窗口和滚动窗口,可以通过设置窗口长度和滑动间隔来控制。例如,使用 windowedBolt,在窗口内对元组进行分组并应用聚合函数,如 sum、count 等。
  3. 【回答框架 3】另一种实现聚合的方式是使用 PersistentAggregate 或借助外部存储。对于跨窗口的全局聚合,可以将部分聚合结果存入 Redis 或数据库,定期更新。
  4. 【回答框架 4】Storm 提供了 Trident API,它更高级,支持微批处理,提供 groupBy、aggregate 等操作,可以简化聚合逻辑,但会引入一定延迟。
  5. 【关键点 1】过滤在 Bolt 中通过条件判断和转发/丢弃实现,聚合常用窗口机制。
  6. 【关键点 2】窗口分为滑动和滚动,可通过配置控制窗口长度和滑动间隔。
  7. 【关键点 3】Trident API 提供更高级的聚合抽象,但增加延迟。
  8. 【易错点 1】窗口聚合要考虑事件时间与处理时间,乱序事件可能导致结果不准确。
  9. 【易错点 2】状态管理需考虑容错,使用外部存储时需要处理一致性。