数据流分组:
数据流分组定义了一个数据流的Tuple如何分发给Topology中不同的Bolt的Task。
Storm定义了七种内置数据流分组的方式:
Shuffle Grouping (随机分组)这种方式会随机分发
Fields Grouping (字段分组)根据指定字段的值进行分组
All Grouping (全复制分组) 将所有的Tuple复制分发给所有的Bolt Task。
Globle Grouping (全局分组) 将所有的Tuple路由到唯一一个Task上,Storm按照最小的Task ID来选择接受数据的Task。注意,当使用全局分组方式时,设置Bolt的Task并发度是没有意义的,同时要注意所有的Tuple转发到一个JVM实例上,可能会引起JVM瓶颈
None Grouping (不分组) 在功能上和随机分组相同,是为了将来预留的
Direc Grouping (指向型分组)调用emitDirect()方法来判断一个Tuple应该由哪个Task来接收,只能在声明了是指向型的数据流上使用
Local or Shuffle Grouping(本地或随机分组)
数据保障机制:
Spout可靠性:
Bolt每收到一个Tuple,都需要向上游确认应答ack,如果Tuple树上的每个Bolt都进行了确认应答,Spout会调用ack方法来标明这条消息已经完全处理了。
nimbus的工作机制:
nimbus守护进程的主要职责是管理,协调和监控在集群上运行的Topology,包括Topology的发布,任务指派,事件处理失败时重新指派任务,将Topology发布到Storm集群,将预先打包成Jar文件的Topology和配置信息提交到nimbus服务器上,一旦nimbus接收到了Topology的压缩包,会将Jar包分发到足够数量的supervisor节点上,将supervisor节点接收到了Topology压缩文件,nimbus就会指派Task(Bolt和Spout实例)到每个supervisor并且发送信息指示supervisor生成足够的worker来执行指派的Task。
nimbus一般情况下不会引发单点故障,如果nimbus守护进程在Topology运行时停止了,只要分配的supervisor和worker健康运行,Topology一直继续数据处理
supervisor的工具机制:
supervisor守护进程等待nimbus分配任务后生成并监控worker执行任务,supervisor和worker都是运行在不同的JVM进程上,如果由supervisor拉起的一个worker进程因为错误异常退出,supervisor守护进程会尝试重新生成新的worker进程。