Storm的分组策略和确保消息送达机制 · 十年饮冰,难凉热血
Posted lijianming180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Storm的分组策略和确保消息送达机制 · 十年饮冰,难凉热血相关的知识,希望对你有一定的参考价值。
分组策略
- shuffle 随机分组
- field分组
安装指定filed的key进行hash处理,
相同的field,一定进入到同一bolt.
该分组容易产生数据倾斜问题,通过使用二次聚合避免此类问题。
使用二次聚合避免倾斜。
App入口类
1 | public class { |
聚合bolt
1 | /** |
- all分组
使用广播分组。
1 | builder.setBolt("split-bolt", new SplitBolt(),2).allGrouping("wcspout").setNumTasks(2); |
- direct(特供)
只发送给指定的一个bolt.
1 | //a.通过emitDirect()方法发送元组 |
1 | //b.指定directGrouping方式。 |
- global分组
对目标target tasked进行排序,选择最小的taskId号进行发送tuple
类似于direct,可以是特殊的direct分组。
- 自定义分组
自定义CustomStreamGrouping类
1 | /** |
设置分组策略
1 | public class { |
storm确保消息如何被完全处理
WordCountSpout:通过回调函数
1 | public class WordCountSpout implements IRichSpout{ |
SplitBolt:
1 | public class SplitBolt implements IRichBolt { |
App:
1 | public class { |
测试结果:
以上是关于Storm的分组策略和确保消息送达机制 · 十年饮冰,难凉热血的主要内容,如果未能解决你的问题,请参考以下文章
Storm集群上的开发 ,Topology任务的编写 之 WordCount Spout和Blot的分组策略(一张图说明问题)