一 什么是拓扑
Storm中的拓扑,实际上就是一个有向图的计算。拓扑中节点包含数据的逻辑处理;节点之间的边显示数据如何在节点直接流动。
二 Java中如何建立拓扑
1 首先创建一个TopologyBuilder对象。
2 使用setSpout方法和setBolt方法,建立拓扑中的节点以及节点之间的联系。(方法的参数列表:第一个参数表示组件的id;第二个参数是Spout或者Bolt对象,包含数据的处理逻辑;第三个参数表示组件的并行度,也就是执行器(或线程)的数量,默认为1)。
如果要用一个Bolt订阅多个数据来源,在Bolt内部可以调用Tuple的getSourceComponent方法确定tuple来自哪个组件。
3 对拓扑中的参数进行配置(可以使用HashMap对象或者Storm中的backtype.storm.Config对象)。
4 使用TopologyBuilder对象创建拓扑,并提交拓扑。(可以选择提交到生产环境的Storm集群;或者开发调试环境的LocalCluster)。
三 流分组
流分组定义了元组(tuple)如何在组件(Spout和Bolt)之间分发。
Storm内置了7中流分组方式,此外,开发者还可以通过实现CustomStreamGrouping接口,开发自己的分组方式。
1 随机分组(shuffle grouping)
最常用的分组方式,它随机的将元组分发到Bolt的任务上,这样可以保证每个任务得到数量相同的元组,提高并发能力。