8. Storm的分发策略

Storm当中的分组策略,一共有八种:

所谓的grouping策略就是在Spout与Bolt、Bolt与Bolt之间传递Tuple的方式。总共有八种方式:

1)shuffleGrouping(随机分组)随机分组;将tuple随机分配到bolt中,能够保证各task中处理的数据均衡;

2)fieldsGrouping(按照字段分组,在这里即是同一个单词只能发送给一个Bolt)

按字段分组; 根据设定的字段相同值得tuple被分配到同一个bolt进行处理;

举例:builder.setBolt("mybolt", new MyStoreBolt(),5).fieldsGrouping("checkBolt",new Fields("uid"));

说明:该bolt由5个任务task执行,相同uid的元组tuple被分配到同一个task进行处理;该task接收的元祖字段是mybolt发射出的字段信息,不受uid分组的影响。

该分组不仅方便统计而且还可以通过该方式保证相同uid的数据保存不重复(uid信息写入数据库中唯一);

3)allGrouping(广播发送,即每一个Tuple,每一个Bolt都会收到)广播发送:所有bolt都可以收到该tuple

4)globalGrouping(全局分组,将Tuple分配到task id值最低的task里面)全局分组:tuple被发送给bolt的同一个并且最小task_id的任务处理,实现事务性的topology

5)noneGrouping(随机分派)不分组:效果等同于shuffle Grouping.

6)directGrouping(直接分组,指定Tuple与Bolt的对应发送关系)

直接分组:由tuple的发射单元直接决定tuple将发射给那个bolt,一般情况下是由接收tuple的bolt决定接收哪个bolt发射的Tuple。这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。 只有被声明为Direct Stream的消息流可以声明这种分组方法。而且这种消息tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的taskid (OutputCollector.emit方法也会返回taskid)。

7)Local or shuffle Grouping本地或者随机分组,优先将数据发送到本机的处理器executor,如果本机没有对应的处理器,那么再发送给其他机器的executor,避免了网络资源的拷贝,减轻网络传输的压力

8)customGrouping (自定义的Grouping)

最新文章

  1. Revolving Digits[EXKMP]
  2. php知识分享
  3. Microsoft Visual Studio 2012注册密钥
  4. TP学习笔记一(tp的目录结构 , tp的输出方式)
  5. Android 利用ListView制作带竖线的多彩表格
  6. PostgreSQL Cascade Replication
  7. Linux下高并发socket最大连接数所受的各种限制
  8. Div 3 - SGU 105(找规律)
  9. 【转】轻量级文本编辑器,Notepad最佳替代品:Notepad++--不错
  10. (转:亲测)cnblogs博文浏览[推荐、Top、评论、关注、收藏]利器代码片段
  11. 关于AutoCAD.NET的辅助方法
  12. ntp-keygen.c
  13. android/底层获取上下文对象
  14. python之定义参数模块argparse(一)基本使用
  15. rocketmq在linux搭建双master遇到的坑
  16. <jsp:param>标签给属性赋值时的一个坑
  17. POI 导出文档整理
  18. 混合开发 Hybird Cordova PhoneGap web 跨平台 MD
  19. java 加密
  20. WebAPI+Html跨域时对session的支持

热门文章

  1. string和stringBuffer,stringBuilder的区别
  2. 学校实训作业:Java爬虫(WebMagic框架)的简单操作
  3. 线上学习-语言模型 language model
  4. HttpClient和HtmlUnit的比较总结以及使用技巧
  5. 关于Android发送邮件
  6. 一、json与jsonp的使用
  7. java编译问题之Description Resource Path Location Type Java compiler level does not match the version of
  8. mybatis=<>的写法
  9. SpringBoot下配置Druid
  10. Spring Boot 2 实战:如何自定义 Servlet Filter