`
arual
  • 浏览: 10785 次
社区版块
存档分类
最新评论

storm重发机制

 
阅读更多
 原理
ACK 是storm一大亮点. 主要由ack bolt 完成.
每个spout/bolt emit一个tuple (包含此消息的rootId, tupleId, 用户发送的消息内容)出去下游bolt 的同时,也会发一个ack tuple(只包含此消息的rootId, tupleId) 给ack bolt .


 
a) spout将<rootId, tuple1Id> 发送到ackBolt, 也将<rootId, tuple1Id, tuple1>发到bolt1.
b) bolt1 收到了spout 发过来的tuple1, 在execute方法处理完成后,对tuple1 处理后, 产生了tuple2, tuple3 发送到bolt2. bolt1 会把新产生的tuple2 和tuple3 的<rootId , tuple2Id> , <rootId , tuple3Id> 发到ackBolt. 同时也会把收到的tuple1 的<rootId, tuple1Id> 发到ackBolt.
注:  tuple1, tuple2, tuple3, 都有相同的rootId, 因为他们都来自spout 发射的同一条信息.(rootId 是spout 内部生成的, 对每一条消息唯一).
c) ackBolt 不停的收到<rootId,tupleId>, 会对rootId 相同的tupleId 做异或. 因为只有tupleId 成双成对出现时, 才说明消息在两个compponent 间 成功被传递被处理了.
如果每个rootId 的tupleId异或结果不为0(有timeout 限制, 不会一直等下去), ackBolt认为此消息失败. 会发送失败反馈给此rootId 对应的spout.(用户可重写spout中的failed(messageId) 来重发数据)
关于ACK 导致消息重复消费
虽然storm的亮点是消息不丢失(ACK). 但也有其弊端.
比如说消息a1 在 bolt3 执行时消息超时没有处理完, 那么storm(ack bolt)会认为其failed, 并发送failed反馈 给spout--> spout 重发数据 (记为消息a1')
此时, a1在bolt3 处理完成(只是超时一点点),也还是会流转到下游bolt, 然后成功结束. 而消息a1' 也同样被各个bolt 执行. 发生消息重复处理.
解决办法: 如果是做数据分析, 少量消息重发应该无伤大雅. 如果做对重发敏感的业务逻辑(比如处理订单). 可以在每个bolt 的execute最开始 加一段判断此订单是否被处理的小逻辑(比如去query redis, 看此订单编号是否存在)
分享到:
评论

相关推荐

    基于STORM分布式计算的海量数据统计系统设计方法研究.pdf

    数据重发机制是指当数据处理失败时,系统能够重新发送数据,直到确保数据被正确处理。而ACK机制则是一种确认机制,它确保每条消息都能被正确地处理一次,而不会丢失。 文章还通过一个电商订单统计系统的实例,详细...

    基于Storm和Hadoop的大数据处理架构的研究.pdf

    Storm提供数据重发机制和任务持久化,保证数据处理的可靠性。Storm的Topology模型采用消息传递方式进行交互,数据处理过程是动态的且每次读取的数据量小。Storm可以持续运行,直至主动终止,这是它的优势之一。 4. ...

    strom源码分析

    - 实时性保证:分析Storm如何保证消息至少被处理一次,以及Storm是如何处理消息的背压(backpressure)和失败重发机制。 - 任务分配:分析Nimbus如何将Topology中的Spout和Bolt分配到集群中的不同节点。 - 并行度...

    storm进行大数据实时分析.docx

    【Storm实时大数据分析】 ...总的来说,Storm通过其独特的实时处理机制和灵活的架构,简化了大数据实时分析的复杂性,使得开发者能够快速构建并部署实时数据处理系统,应对不断增长的实时数据分析需求。

    storm基础框架分析

    2、Storm处理消息时会根据Topology生成一棵消息树,Storm如何跟踪每个消息、如何保证消息不丢失以及如何实现重发消息机制?上篇:storm是如何保证atleastonce语义的回答了第2个问题。本篇来建立一个基本的背景,来...

    Storm事务性拓扑详解教程.docx

    在标准的Storm拓扑中,处理数据主要依赖于`ack`和`fail`机制。当一个元组被成功处理后,会发送一个`ack`信号,如果处理失败则发送`fail`。然而,当元组需要重发时,可能会导致重复处理,这就引入了不准确性和一致性...

    hadoop实战-part2.pdf

    Storm的自动容错机制能够处理进程、机器和网络异常,保证消息可以重发。 Storm在典型应用场景中能够解决时延性要求高的问题。例如,传统的MapReduce批处理方式难以满足秒级的数据处理需求,而Storm能够保持进程常驻...

    数据打点作业分享

    - **解决方案**:设计一个本地缓冲区来存储未能即时发送的数据,一旦网络恢复正常即可自动重发。 2. **服务端写入数据时遇到的问题:** - **解决方案**: - 实施数据节点性能监控与报警机制。 - 建立双节点...

Global site tag (gtag.js) - Google Analytics