Storm
大约 2 分钟
storm 是什么
storm 是一个分布式实时流处理框架。 storm的特点是
- 扩展性强,当算力不足时可以水平扩展机器数量来提高算力
- 可靠性高,保证数据不丢失,数据可以消费一次或者多次
- 语言无关性好,storm作业可以使用各种语言编写
storm 架构
- 主从架构 架构简单高效,会存在单主节点问题,可靠性低。 HDFS、YARN、HBase、Spark、Flink、Storm
- 对称架构 架构复杂低效,没有单点问题,可靠性高。 Zookeeper、Kafka
Storm也是主从架构,主节点名叫 Nimbus,从节点名叫 Supervisor。 Nimbus -- zookeeper -- Supervisor
- Nimbus: 接收客户端 topo 代码,拆分成多个 task,将映射关系等信息存入 zookeeper,将 task 分配给 Supervisor
- Supervisor: 从 Nimbus 中接收代码,从 zk 中读取 Nimbus 分配的 task 相关信息,启动工作进程 worker,并监控 worker
- Worker: 从 zk 上读取 Nimbus 分配的 task 相关信息,启动一个或多个 Executor 线程执行 task
- zookeeper: Nimbus 高可用、 Nimbus 和 Supervisor 通讯、 Supervisor 和 Worker 通讯
storm 与 flink 对比
总体来讲无论在吞吐量还是延迟性上flink的性能要高于storm
Storm | Flink | |
---|---|---|
状态管理 | 无状态 | 有状态 |
窗口支持 | 事件窗口支持弱,缓存整个窗口数据,窗口结束时一起计算 | 窗口支持较完善,自带一些窗口聚合方法,自动管理窗口状态 |
消息投递 | At Most Once At Least Once | At Most Once At Least Once Exactly Once |
容错方式 | ACK机制: 对每个消息进行全链路跟踪,失败或超时这些异常情况会重发 | Checkpoint机制: 通过分布式一致性快照,对数据流和算子状态进行保存,在出现异常情况时,系统进行回滚 |
应用状态 | 主要看各自的使用情况,总体而言管理平台比较成熟 | 主要看各自的使用情况,总体而言管理平台比较成熟 |
有界流和无界流
- 有界流: (Bounded Stream)有明确的开始和结束标志,数据的流量是固定的有限的。常用场景:批处理、历史数据分析、数据迁移
- 无界流: (Unbounded Stream)没有明确的开始和结束标志,数据的流量是不固定的无限的。常用场景:实时数据分析、时间处理、在线机器学习