storm分布式实时计算二

storm并发控制

storm计算支持在多台机器上水平扩容,通过将计算切分未多个多里的task再集群上并发执行来实现。

在storm中,一个task可以简单的理解为在集群某个节点上运行的一个spout或者bolt实例。

Node:storm集群下的多个服务器。

workers:一个node下的多个JVM(worker),一个topology会分配到多个worker上运行。

executor:一个worker下运行的多个线程,多个task可以指派给一个executor,默认情况下,每个executor分配一个task。

task:是spout或者bolt的实例,它们的nextTuple和execute方法会被executors线程调用执行。

给topology增加woker

Config config = new Config();

config.setNumWorkders(2);

配置executor和task

topologyBuilder.setSpout("spoutTest", new SentenceSpout(), 2);

topologyBuilder.setBolt("boltTest", new WordBolt()).setNumTasks(4);

数据流分组

数据流分组定义了一个数据流中tuple如何分发给topology中不同的bolt的task。

shuffle grouping:随机分组,每个bolt实例接收相同数量的tuple。

fileds grouping:根据指定字段的值进行分组。

all grouping:将所有的tuple复制后分发给所有bolt task。

global grouping:将所有的tuple路由到唯一一个task上。

none grouping:与shuffle一样。

direct grouping:数据源会调用emitDirect方法来判断一个tuple应该路由到哪个storm组件来接收。

local or shuffle grouping:和随机分组类似。

 

有保障机制的数据处理

storm保证spout每个发送出去的tuple都能够完整的执行处理。

spout可靠性

spout需要记录它发送的tuple,当下游bolt处理失败时spout可以重新发送。

ISpout接口支持ack与fail方法,用于确认或者失败后的处理。

需要注意的是collector.emit发送的tuple需要标记唯一的id。

bolt可靠性

当发送衍生的tuple时,需要锚定读取的tuple。

当处理消息成功或者失败时分别确认应答或者报错。

重新发送到指定bolt:collector.emit("制定的tuple",new Values(xxx))

确认应答:collector.ack(tuple)

失败:collector.fail(tuple)

posted @ 2024-05-21 12:45  使用D  阅读(2)  评论(0编辑  收藏  举报