Storm是什么?
Storm是一个分布式实时流处理框架
为什么做Storm?
1. 解决什么问题
2. 之前方法的不足
方法
数据模型
Storm采用拓扑的数据处理模型,一个拓扑就是一个有向图(可以有环),其中顶点代表计算,边代表数据流。顶点可以分为两类:spouts和bolts。
(从数据库角度来看,一个拓扑可以看作一个逻辑查询计划)
- spouts:拓扑的元组源,通常从队列中拉取数据
- bolts:处理元组,并将处理后的元组传递给下游bolts
生产者spouts/bolts和消费者bolt之间如何发送数据?
拓扑定义了bolt的输入数据流,每个spout或bolt是由集群中一组task来执行(每个组件需要指定task数量),流分组定义了spout/bolt中对应的task产生的Tuple如何分发给下游bolt中的task。
Storm中定义了以下几种分组策略,参考:Storm中Stream分组
- Shuffle grouping:Task中的数据随机分发,可以保证同一级bolt中task处理的Tuple数量一致
- Fields grouping:以tuple中一个Field或多个Field进行分组
- All grouping:每个task产生的tuple会分发给下游所有task
- Global grouping:将整个流发送给一个task
- Local grouping:如果目标bolt中的task和发送tuple的task在同一个worker进程中,就将数据直接发送给当前worker进程中的目标task
Storm中如何保证at least once和at most once处理语义?
参考:Storm ACK机制
Trident实现Exactly-once
Storm中容错处理
参考官方文档:守护进程容错