storm_拓扑

本文介绍了Storm实时计算中的核心概念——拓扑。拓扑是一个有向图,由处理逻辑的节点和数据传递路径组成。通过TopologyBuilder简化了创建过程。文章还详细阐述了流分组的不同类型,包括随机分组、字段分组、广播分组、全局分组、无分组、直接分组和自定义分组,这些分组策略决定了数据在bolt任务间的分布方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是拓扑

要使用storm做实时计算,首先需要创建所谓的“拓扑”。一个拓扑是一个有向图的计算。在一个拓扑中的每个节点包含处理逻辑,节点之间的连接显示数据应该如何在节点之间传递。

 

2.Topology

TopologyBuilder是构建拓扑的类,用于指定执行的拓扑。拓扑底层是Thrift结构,由于Thrift API非常冗长,使用TopologyBuilder可以极大地简化建立拓扑的过程。

注:百度百科一下thrift。

thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

    创建和提交拓扑的过程如下:首先,使用new关键字创建一个topologyBuilder对象,然后调用setSpout方法设置Spout,接着调用setBolt方法设置Bolt,最后调用createTopology方法返回StormTopology对象给submitTopology方法作为输入参数。

如:

TopologyBuilder builder = new TopologyBuilder();

builder.setSpout("word", new WordSpout());

builder.setBolt("ExclamationBolt", new ExclamationBolt()).shuffleGrouping("word");

builder.setBolt("MergeBolt", new MergeBolt()).allGrouping("ExclamationBolt");

Config conf = new Config();

// 集群模式

StormSubmitter.submitTopology(args[0], conf, builder.createTopology());

// 地模式

LocalCluster cluster = new LocalCluster();

cluster.submitTopology("word", conf, builder.createTopology());

 

3.流分组

3.1什么是流分组

流分组是拓扑定义的一部分,为每个bolt指定应该接收哪个流作为输入。流分组定义了流/元组如何在bolt的任务之间进行分发。

在集群中,spout和bolt并行执行许多任务。如果你在任务层看拓扑是怎样执行的,则会看到流分组的示意图,如:

    Storm内置了七种流分组方式。

3.2随机分组

shuffle grouping对各个task的tuple分配的比较均匀。

3.3字段分组

fieldsGrouping

这种grouping机制保证相同field值的tuple会去同一个task,这对于WordCount来说非常关键,如果同一个单词不去同一个task,那么统计出来的单词次数就不对了。

 

3.4广播分组

All grouping

是指流被发送到所有Bolt的任务中。

 

3.5全局分组

Global grouping

Stream中的所有的tuple都会发送给同一个bolt任务处理,所有的tuple将会发送给拥有最小task_id的bolt任务处理。

 

3.6无分组

None grouping

3.7直接分组

Direct grouping

3.8自定义分组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值