5.Storm-Stream Grouping

Stream Grouping:为每个 bolt 指定应该接受哪个流作为输入,流分组定义了如何在 bolt 的任务直接进行分发。

Shuffle Grouping 随机分组:保证每个 bolt 接收到的 tuple 数目相同。

Field Grouping按字段分组:比如按 uesrid 来分组,具有同样 userid 的 tuple 会被分到相同的 bolts,不同的 userid 则会被分配到不用 bolts。

All Grouping广播发送:对于每一个 tuple,所有的 bolts 都会收到。

Global Grouping全局分组:这个 tuple 被分配到 storm 中的一个 bolt 的其中一个 task。再具体一点就是分配给 id 最低的那个 task。

Non Grouping无分组:假设你不关心流失如何分组的就可以使用这种方式,目前这种分组和随机分组是一样的结果,不同的是 storm 会把这个 bolt 放到 bolt 的订阅者的同一个线程中执行。

Direct Grouping直接分组:这种分组意味着消息的发送者指定由消息接受者的哪个 task 处理这个消息。只有被声明为  Direct Grouping 的消息流可以声明这种分组方法。而且这种消息 tuple 必须使用 emitDirect 方法来发射。消息处理者可以通过 TopologyContext 来获取处理它的消息的 taskid (OutputCollector.emit 方法也会返回 taskid)。

本地分组:如果目标 bolt 在同一工作进程存在一个或者多个任务,元素会随机分配给执行任务,否则该分组方式与随机分组方式是一样的。

 

5.1 代码示例:

用 https://blog.csdn.net/Willson_L/article/details/83587487 这个例子的代码,做修改。

Shuffle Grouping 随机分组

builder.setBolt("write-bolt", new PrintBolt(), 4).shuffleGrouping("print-bolt")

生成8个文件,并且每个文件中的数据是随机的。

 

Field Grouping按字段分组

builder.setBolt("write-bolt", new WriteBolt(), 8).fieldsGrouping("print-bolt", new Fields("write"));

生成小于等于5个文件,随机的。每个文件分配的数据也是随机的。但是每个文件出现的数据是固定的。例如第一次执行,第一个文件生成的数据有php和java。那第二次执行,第一个文件有可能是java也可能是其他的。而且这个文件出现的数据,在其他的文件不在再出现。

 

All Grouping广播发送

builder.setBolt("write-bolt", new WriteBolt(), 4).allGrouping("print-bolt");

每个文件接受的数据和条数都是一样的,顺序大致相等。

 

Global Grouping全局分组

builder.setBolt("write-bolt", new WriteBolt(), 4).globalGrouping("print-bolt");

所有数据汇集到一个文件中。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值