storm的acker机制理解。

sanmutongzi sanmutongzi     2022-08-17     151

关键词:

转载请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/6142356.html

      Storm 的拓扑有一些特殊的称为“acker”的任务,这些任务负责跟踪每个 Spout 发出的 tuple 的 DAG。开启storm tracker机制的前提有三个:

1. 在spout emit tuple的时候,要加上第3个参数messageid 
2. 在配置中acker数目至少为1 
3. 在bolt emit的时候,要加上第二个参数anchor tuple,以保持tracker链路。

     当一个 tuple 在拓扑中被创建出来的时候, 不管是在 Spout 中还是在 Bolt 中创建的 , 这个 tuple 都会被配置一个随机的 64 位 id。acker 就是使用这些 id 来跟踪每个 spout tuple 的 tuple DAG。这里贴一下storm源码分析里一个ack机制的例子。

  

 

 

理解下整个大体节奏分为几部分 

步骤1和2 spout把一条信息同时发送给了bolt1和bolt2,步骤3表示spout emit成功后去 acker bolt里注册本次根消息,ack值设定为本次发送的消息对应的64位id的异或运算值,上图对应的是T1^T2

步骤4表示bolt1收到T1后,单条tuple被拆成了三条消息T3T4T5发送给bolt3。步骤6 bolt1在ack()方法调用时会向acker bolt提交T1^T3^T4^T5的ack值。

步骤5和7的bolt都没有产生新消息,所以ack()的时候分别向acker bolt提交了T2T3^T4^T5的ack值。

综上所述,本次spout产生的tuple树对应的ack值经过的运算为 T1^T2^T1^T3^T4^T5^T2^T3^T4^T5按照异或运算的规则,ack值最终正好归零。

步骤8为acker bolt发现根spout最终对应的的ack是0以后认为所有衍生出来的数据都已经处理成功,它会通知对应的spout,spout会调用相应的ack方法。

 

storm这个机制的实现方式保证了无论一个tuple树有多少个节点,一个根消息对应的追踪ack值所占用的空间大小是固定的,极大地节约了内存空间。

 

参考文档

Storm ack和fail机制再论

Storm应用系列之——可靠性与acker机制

3 《strom源码分析》 第12章

 

storm的容错机制

任务级容错Bolt任务crash引起的消息未被应答。此时,acker中所有与此Bolt任务关联的消息都会因为超时而失败,对应的Spout的fail方法将被调用。acker任务失败。如果acker任务本身失败了,它在失败之前持有的所有消息都将超时而失... 查看详情

storm消息的可靠处理机制——ack整个tuple树异或

消息的可靠处理机制Storm内部通过一种巧妙的异或算法判读每个tuple是否被正确完整的处理。Spout的一个Task创建一个Tuple时,即在Spout的nextTuple()方法中实现从特定数据源读取数据的处理逻辑中,会与Acker进行通信,向Acker发送消息... 查看详情

storm中什么是-acker,acker工作流程介绍

概述我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理,完整处理的意思是指:一个tuple被完全处理的意思是:这个tuple以及由这个tuple所导致的所有的tuple都被成功处理。而一个tuple会被认为处理失败... 查看详情

storm事务

1.storm事务  对于容错机制,Storm通过一个系统级别的组件acker,结合xor校验机制判断一个msg是否发送成功,进而spout可以重发该msg,保证一个msg在出错的情况下至少被重发一次。但是在一些事务性要求比较高的场景中,需要保... 查看详情

spark与storm比对与选型

...个RDD,再处理实时计算延迟度毫秒级秒级吞吐量低高事务机制支持完善支持,但不够完善健壮性/容错性ZooKeeper,Acker,非常强 查看详情

spark同storm的对比

...D,再处理实时计算延迟度毫秒级秒级吞吐量低高事务机制支持完善支持,但不够完善健壮性/容错性ZooKeeper,Acker,非常强Checkpoint& 查看详情

storm篇--storm容错机制

一、前述Storm容错机制相比其他的大数据组件做的非常不错。二、具体原因结合Storm集群架构图:我们的程序提交流程如下:  其中各个组件的作用如下:Nimbus资源调度任务分配接收jar包Supervisor接收nimbus分配的任务启动、... 查看详情

storm消息可靠处理机制

...可靠性保障是Storm核心特性之一,其中消息树的跟踪管理机制是Storm核心算法之一,本文将详细介绍Storm消息可靠处理机制。我们从Storm初探中的例子入手。  查看详情

spark同storm的对比

...D,再处理实时计算延迟度毫秒级秒级吞吐量低高事务机制支持完善支持,但不够完善健壮性/容错性ZooKeeper,Acker,非常强Checkpoint,WAL,一般动态调整并行度支持不支持对于Storm来说:1、建议在那种需... 查看详情

storm篇--storm并发机制

一、前述为了提高Storm的并行能力,通常需要设置并行。二、具体原理1.Storm并行分为几个方面:Worker–进程一个Topology拓扑会包含一个或多个Worker(每个Worker进程只能从属于一个特定的Topology)这些Worker进程会并行跑在集群中不... 查看详情

storm集群上的开发,storm的内部原理,storm集群间的通信机制

 storm间的worker会互相通信,上一个worker的结果会交给下一个worker进行计算。看图   查看详情

storm通信机制

...用kafka等; 1、worker进程间的通信worker进程间消息传递机制, 查看详情

storm并发机制,通信机制,任务提交

一、storm的并发  (1)Workers(JVMs):在一个物理节点上可以运行一个或多个独立的JVM进程。一个Topology可以包含一个或多个worker(并行的跑在不同的物理机上),所以workerprocess就是执行一个topology的子集,并且worker只能对应于一个topolog... 查看详情

storm-可靠机制

一 可靠性简单介绍           Storm的可靠性是指Storm会告知用户每个消息单元是否在一个指定的时间(timeout)内被全然处理。全然处理的意思是该MessageId绑定的源Tuple以及由该源Tuple衍生的... 查看详情

storm如何分配任务和负载均衡?

  这里做一些补充:    1.worker是一个进程,由supervisor启动,并只负责处理一个topology,所以不会同时处理多个topology.    2.executor是一个线程,由worker启动,是运行task的物理容器,其和task是1->N关系.    3.compon... 查看详情

storm的ack机制

...ack了。好吧,那就让我开始啪啪打你们脸吧。先说一下ACK机制:为了保证数据能正确的被处理,对于spout产生的每一个tuple,storm都会进行跟踪。这里面涉及到ack/fail的处理,如果一个tuple处理成功是指这个Tuple以及这个Tuple产生的所... 查看详情

storm里面fieldsgrouping和field参数和declareoutputfields

...据给后面的bolt用  这个Field通常和fieldsGrouping分组机制一起使用,这个Field特别难理解,我自己也是在网上看了好多文章,感觉依旧讲的不是很清楚,是似而非,没有抓到重点。这个问题足足困扰了我3-4天时间,一直理解... 查看详情

storm消息可靠性的保障机制

参考【并发编程网】的Storm官方教程翻译以WordCountToPology为例://构造TopologyTopologyBuilderbuilder=newTopologyBuilder();builder.setSpout(SPOUT_ID,newSentenceSpout(),2)//指定Spout,2指的是使用2个executor来运行spout.setNumTasks(4);//指定t 查看详情