Storm
为hadoop提供流处理,运维简单,高度容错,支持多种语言的实时数据处理系统。
Storm集群主要由一个主节点和一群工作节点组成,通过Zookeeper集群协调。
集群架构:
-
Nimbus:主节点运行的一个后台程序,用于响应分布在集群中节点,分配任务和检测故障。
-
Supervisor:工作节点运行的一个后台程序,用于收听工作指派并基于要求工作进程。
Topology
在storm中,应用程序实现实时处理的逻辑被封装进Storm中的topology中,一个topplpgy是一组Spout组建和Bolt组件通过Stream Gruoping进行连接的图。
- Spout:在一个topology中产生源数据流的组件,从来源处读取数据并放入topology。
- Bolt:在一个topology中接受数据然后执行处理的组件。
- Stream(流):Storm将输入的数据看成流,它是以tuple为单位组成的一条有向无界的数据流。
- Stream Groupings:消息分组方法。有六种分组方法
- 随机分组(shuffle grouping):随机分发tuple到Bolt的任务,保证每个任务获得相等数量tuple。
2.字段分组(Fields grouping):根据指定字段分割数据流,并分组。例如,根据“userid”字段,相同“user-id”的元组总是分发到同一个任务,不同“user-id”的元组可能分发到不同的任务。
3.全部分组(ALL grouping):tuple被复制到bolt的所有任务。这种类型需要谨慎使用。
4. 全局分组(Global grouping):全部流都分配到bolt的同一个任务。明确地说,是分配给ID最小的那个task。
5. 无分组(None grouping)
6. 直接分组(Direct grouping)