zoukankan      html  css  js  c++  java
  • Storm的消息分发策略

    1.Shuffle grouping(随机分组)

    tuple会被随机分发到所有bolt,每个bolt会得到相同数量的tuple,使得负载均衡。

    2.Fields grouping(按字段分组)

    按field分发,只能发送给相同field的bolt。

    例如:

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

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

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

    3.Partial Key grouping(按部分字段分组)

    新版本的Storm新增的分组。效果跟Fields grouping类似,但具有负载均衡的能力。

    4.All grouping(广播分组)

    所有tuple都会发送到所有bolt上。性能较低,请谨慎使用!

    5.Global grouping(全局分组)

    所有tuple只会发送到一个bolt上——id最小的bolt。

    6.None grouping(不分组)

    实现效果类似于随机分组。但在底层实现中,Storm会把没有分组的bolt放在其订阅的bolt或spout的线程中执行。即逻辑上是分发了,但在内存中执行没实际分发。

    7.Direct grouping(直接分组)

    用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。只有被声明为direct stream的消息流可以声明这种分组方法。

    而且这种消息的tuple必须使用emitDirect方法来发射。消息处理者可以通过TopologyContext来获取处理它的消息的taskid(OutputCollector.emit方法也会返回taskid)。

    8.Local or shuffle grouping(本地或随机分组)

    如果目标bolt有一个或者多个task在同一个worker进程中,tuple将会被分发到这些正在工作的task中。否则,效果等同于Shuffle Grouping。即优先把数据发送到本机的处理器,避免网络传输,减少资源消耗。

    参考资料

    https://storm.apache.org/releases/current/Concepts.html

    https://blog.csdn.net/fenggms/article/details/83000175

    https://www.cnblogs.com/zhaoyan001/p/7975618.html

    https://blog.csdn.net/vessalasd1/article/details/50472123

  • 相关阅读:
    C语言宏定义##连接符和#符的使用
    C语言宏高级用法 [总结]
    101平衡模式 DIR的理解
    MACHINE_START 怎样调用
    SYSCALL_DEFINE3宏定义的分析
    ARM-Linux系统调用流程
    SYSCALL_DEFINE3 宏定义的转换
    socket编程之select()
    socket编程之select()
    Oracle 常用的查询操作
  • 原文地址:https://www.cnblogs.com/live41/p/15585799.html
Copyright © 2011-2022 走看看