分布式流处理

Twitter Storm Stream Grouping编写自定义分组实现

非 Y 不嫁゛ 提交于 2019-12-04 16:50:58
##自定义Grouping测试 Storm是支持自定义分组的,本篇文章就是探究Storm如何编写一个自定义分组器,以及对Storm分组器如何分组数据的理解。 这是我写的一个自定义分组,总是把数据分到第一个Task: public class MyFirstStreamGrouping implements CustomStreamGrouping { private static Logger log = LoggerFactory.getLogger(MyFirstStreamGrouping.class); private List<Integer> tasks; @Override public void prepare(WorkerTopologyContext context, GlobalStreamId stream, List<Integer> targetTasks) { this.tasks = targetTasks; log.info(tasks.toString()); } @Override public List<Integer> chooseTasks(int taskId, List<Object> values) { log.info(values.toString()); return Arrays.asList(tasks.get(0));

Twitter Storm, 数据流分组策略,fieldsGrouping

南楼画角 提交于 2019-12-03 09:11:44
##Storm Grouping shuffleGrouping 将流分组定义为混排。这种混排分组意味着来自Spout的输入将混排,或随机分发给此Bolt中的任务。shuffle grouping对各个task的tuple分配的比较均匀。 fieldsGrouping 这种grouping机制保证相同field值的tuple会去同一个task,这对于WordCount来说非常关键,如果同一个单词不去同一个task,那么统计出来的单词次数就不对了。 All grouping 广播发送, 对于每一个tuple将会复制到每一个bolt中处理。 Global grouping Stream中的所有的tuple都会发送给同一个bolt任务处理,所有的tuple将会发送给拥有最小task_id的bolt任务处理。 None grouping 不关注并行处理负载均衡策略时使用该方式,目前等同于shuffle grouping,另外storm将会把bolt任务和他的上游提供数据的任务安排在同一个线程下。 Direct grouping 由tuple的发射单元直接决定tuple将发射给那个bolt,一般情况下是由接收tuple的bolt决定接收哪个bolt发射的Tuple。这是一种比较特别的分组方法,用这种分组意味着消息的发送者指定由消息接收者的哪个task处理这个消息。 只有被声明为Direct