Storm架构运行原理

整体架构

Storm集群主要包含Nimbus和Supervisor两部分,集群协调依赖于外部Zookeeper。
Storm特性:
1、分布式计算
2、高性能、低延时
3、可扩容
4、高度容错
5、数据可靠(ACK)
在这里插入图片描述
Nimbus:集群管理中心,支持HA,负责接收客户端提交的拓扑(Topology),将任务分发给Supervisor,并监控Supervisor的运行状态。
Supervisor:集群worker节点,负责接收Nimbus分配的任务,并监控自身任务运行状态,向Nimbus进行汇报。
Zookeeper:整个集群的协调者,Nimbus和Supervisor通信是通过Zookeeper进行的,集群中心跳信息、状态信息、配置信息和任务信息都存储在Zookeeper中。

工作流程

在这里插入图片描述
1、客户端编写Storm应用程序,编译打包成Storm可识别的Topology图,上传到Nimbus主节点
2、Nimbus将Topology解析,把任务分发到各个Supervisor节点
3、Supervisor接收到任务后启动Executor,运行Task任务

拓扑Topology

在Storm中,任务是以Topology形式提交的。Storm按照拓扑结构进行解析和任务划分,生成相应的执行计划,最终将各个任务分发给Worker节点。
在这里插入图片描述
一个Topology由Spout、Tuple、Bolt三部分构成。
Spout:数据源。通常情况下都是在Spout中从外部接入数据,将数据转化成Storm中的数据流
Tuple:数据流。Topology中传递的数据。
Bolt:数据处理节点。实现业务处理逻辑的地方。

消息容错ACK

Ack是Storm中完整的消息容错机制,ack的使用和其实现算法是storm最突出的亮点。
由Spout流出的每一个tuple,直到最后bolt处理结束,都会被ack标记为成功或失败,失败数据可重新返回Spout进行处理,保障数据的可靠性,这就是Storm中ack机制。
消息语义:
best effort:多次执行。使用ACK
at least once:至少执行一次。关闭ACK
exactly once:正好执行一次,通过Trident API实现。
Fully processed:即tuple成功处理,一个tuple在拓扑树中每一个环节都被处理。
Ack机制中:
1、在规定时间内,如果spout收到ack响应,则认为改tuple被成功处理
2、在规定时间内,spout没有收到ack响应或收到fail响应,则认为该tuple处理失败
3、超过规定时间默认标记为失败,通过Config.TOPOLOGY_MESSAGE_TIMEOUT_SECS 设置超时时间

ack机制除了数据容错之外,还可以用作限流:
当bolt处理速度跟不上spout生产速度时,可以通过设置pending数量来进行限流,当spout有等于或超过pending数的tuple没有收到ack或fail响应时,跳过执行nextTuple, 从而限制spout发送数据。
Config.TOPOLOGY_MAX_SPOUT_PENDING设置pending数量

ACK使用

注意:当spout标记tuple为fail时,不会自动重新发送失败的数据,需要在spout中自己获取数据进行手动发送。

要在程序中实现ack机制,需要进行以下配置:
1、设置Config.setNumAckers最少使用1个acker
2、在spout中需要重写ack和fail方法,如果数据源是消息队列,失败就重新将消息推送到消息队列中,否则需要本地缓存spout产生的tuple,成功处理的要从缓存移除
3、spout发射tuple的时候指定messageId
3、在bolt中完成处理tuple时,执行OutputCollector.ack(tuple), 当失败处理时,执行OutputCollector.fail(tuple)
4、在bolt中发射消息时指定tuple血缘关系(Anchoring ), OutputCollector.emit(tuple,new Values(“new tuple”)),如果不想手动标记Anchoring、ack、fail,可实现BaseBasicBolt,内部自动实现了这些功能

提示:BaseRichBolt需要手动调用ack和fail方法,并指定血缘关系(Anchoring)。
BaseBasicBolt在execute方法执行完毕后自动完成ack和Anchoring。

Ack关闭:
1、关闭Acker监控线程,设置Config.TOPOLOGY_ACKERS为0
2、在spout中emit消息时不指定messageId
3、在botl中emit消息时不指定Anchoring

水平一般,能力有限,大数据小学生一枚。文章主要用于个人学习和总结,如果能给他人带来帮助,纯属意外。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值