`
zhengyun_ustc
  • 浏览: 83086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Storm 是如何跟踪一条消息以及它衍生出来的消息都被成功处理的

阅读更多

2012·2郑昀汇总

我们做 Notify Server 时可以间接借鉴这个解决方案的思路。
 
Storm 是一个分布式的、容错的实时计算系统,由 Twitter 开源。
先不介绍术语和背景知识,直接来一些吸引眼球的内容:
 
一,Tuple Tree
spout 发射一个消息(tuple),可能会导致成百上千的消息基于此消息被创建。这些消息构成一个树状结构,我们称之为“tuple tree”。
tuple 是如何被跟踪的呢?系统中有成千上万的消息,如果为每个 spout 发送的消息都构建一棵树的话,很快内存就会耗尽。所以,必须采用不同的策略来跟踪每个消息。
 
二,Acker 跟踪 Tuple
acker 对于 tuple 的跟踪算法是 storm 最大的突破。这个算法使得对于任意大的一个 tuple tree, 它只需要恒定的20字节就可以进行跟踪了
 
Storm 系统中有一组叫做“acker”的特殊任务,它们负责跟踪 DAG(有向无环图)中的每个消息。每当发现一个 DAG 被完全处理,它就向创建这个根消息的 spout 任务发送一个信号。
原理很简单:
1)当一个消息被创建的时候(无论是在 spout 还是 bolt 中),系统都为该消息分配一个 64bit 的随机值作为id。这些 messageid 是 acker 用来跟踪由 spout 消息派生出来的 tuple tree 的。
2)acker 对于每个 tuple 保存一个 ack-val 的校验值(一个64 bit数字),它的初始值是0。 然后每发射一个 tuple (即消息的创建),或者 ack 一个 tuple (即消息的被应答),那么 tuple 的 id 都要跟 ack-val 异或一下,并且把得到的值更新为 ack-val 的新值。假设每个发射出去的 tuple 都被 ack 了, 那么最后 ack-val 一定是0(因为一个数字跟自己异或得到的值是0)。
 
总的来说,ack-val 是这棵树上所有创建的 tuple-id 以及 ack 的 tuple-id 一起异或(XOR)。ack-val 表示了整棵树的的状态,无论这棵树多大,只需要这个固定大小的数字就可以跟踪整棵树。
每当 acker 发现一棵树的 ack val 值为0时,它就知道这棵树已经被完全处理了
因为消息的随机ID是一个64bit的值,因此ack val在树处理完之前被置为0的概率非常小。
 
三,Acker 有很多,选择哪一个呢?
当一个 tuple 需要 ack 的时候,它到底选择哪个 acker 来发送这个信息呢?
storm 用一致性哈希来把一个 tuple-message-id 对应到 acker , 因为每一个 tuple 知道它所有的祖宗的 tuple-message-id, 所以它自然可以算出要通知哪个 acker 来 ack。
 
参考资源:
1)2011,徐明明,Storm翻译稿系列
2)2013,量子统计,Storm入门教程第四章第五章
3)2011,徐明明,Storm 如何保证消息不丢失

赠图一枚:
0
3
分享到:
评论

相关推荐

    Storm实时数据处理

    Storm实时数据处理

    storm实时数据处理

    《storm实时数据处理》这本书深入探讨了Apache Storm这一强大的实时计算系统,它是大数据处理领域中的重要工具,尤其在实时流处理方面具有显著优势。Storm设计的核心理念是简单、可扩展和容错性,使得它在处理大规模...

    storm1.2.1-helloword可靠消息

    Apache Storm是一个开源的分布式实时计算系统,它允许开发者处理无界数据流,确保每个事件都能得到精确一次(exactly-once)的处理,从而实现高度可靠的消息传递。 首先,我们需要理解Storm的核心概念。Storm由多个...

    storm利用ack保证数据的可靠性源码

    - **故障恢复**:在节点故障时,Storm可以自动恢复未确认的tuple,因为每个tuple的处理路径都已被跟踪。 4. **拓扑配置** 用户可以通过设置`topology.message.timeout.secs`参数来调整tuple的超时时间,根据实际...

    Storm实时数据处理-超清文字版.pdf

    《Storm实时数据处理》这本书是大数据处理领域的重要参考资料,它主要聚焦于Apache Storm这一开源分布式实时计算系统。Storm被广泛应用于实时分析、持续计算、分布式RPC、机器学习等多个场景,其核心理念是允许用户...

    storm on yarn概念架构消息机制概述

    为了保证每条消息都能被完全处理,Storm提供了消息不丢失机制,这在容错性方面是非常关键的。Storm确保一旦消息被处理,它就不会丢失,并且可以通过追踪acknowledgments(确认信号)来处理失败的情况。 Storm的系统...

    细细品味Storm_Storm简介及安装

    - **低延迟和高性能**:Storm设计用于处理高频率、低延迟的数据流,可以处理每秒数百万条消息。 - **分布式和可扩展**:Storm可以在多个服务器上分布运行,通过添加更多的服务器轻松扩展处理能力。 - **容错**:...

    360°目标跟踪系统STorM32云台控制器

    "360°目标跟踪系统STorM32云台控制器"是一个专为实现全方位目标追踪功能而设计的系统,核心控制器是STorM32,这是一种常见的微控制器,广泛应用于Arduino类型的开源硬件项目中。该系统通过精确的电机控制和算法支持...

    基于Storm的分布式实时信号处理系统.pdf

    Storm技术提供了一种基于消息处理的计算模型,支持多个作业同时进行,每个作业可以视为一个拓扑,其中包含了数据处理的组件和流数据之间的关系。这使得Storm非常适合于对实时性要求极高的数据处理场景,例如实时分析...

    storm入门.pdf

    2. 可靠性:能够保证每个消息至少被处理一次。 3. 容错性:当工作节点失败时,任务可以自动重新分配。 4. 实时性:可以对流式数据进行实时处理。 5. 易于扩展:可以灵活调整spout和bolt的并行度来扩展处理能力。 ...

    Twitter storm

    当一个Bolt处理完一条消息后,必须显式地向Spout发送确认信息,这样Spout才能知道该消息已经被成功处理。 - **消息按序处理**:在某些场景下,需要按照消息的顺序进行处理。Storm支持按消息的发送顺序来处理数据,以...

    大数据-Storm实时数据处理

    storm是一个类似于Hadoop勺实时数据处理框架,也是一个非常有效的开源实时计算工具,通常被比作“实时的Hadoop”。  《大数据技术丛书:Storm实时数据处理》通过丰富的实例,系统讲解Storm的基础知识和实时数据处理...

    ( Storm实时数据处理.zip )PDF 高清版

    Apache Storm是一个开源的分布式实时计算系统,它被设计用来处理无界数据流,确保每个事件都能得到正确的处理,即使在高并发和大规模数据输入的情况下也能保持低延迟。本资料《Storm实时数据处理》的高清PDF版,将...

    Storm实时数据处理.pdf

    根据提供的文件信息,“Storm实时数据处理.pdf”,我们可以深入探讨与Apache Storm相关的实时数据处理技术。 ### Apache Storm简介 Apache Storm是一种分布式实时计算系统,能够处理无界数据流,即连续不断的数据...

    StormStorm集成Kafka 从Kafka中读取数据

    Apache Storm是一个开源的分布式实时计算系统,它能够持续处理无限的数据流,确保每个事件都得到精确一次(Exactly Once)的处理。而Apache Kafka则是一个高吞吐量的分布式发布订阅消息系统,常用于构建实时数据管道...

    storm 流式处理 安装软件(包括zookeeper,jzmq,zeroMQ,storm)

    Storm作为Apache软件基金会的顶级项目,是一个分布式、容错的实时计算系统,能够处理无界数据流,确保每个消息至少被处理一次,从而提供高可靠性的保障。 **Zookeeper在Storm中的角色** Zookeeper是一个分布式的,...

    Storm源码走读笔记

    Tuple接收过程包括worker创建接收线程、从socket接收消息、disruptor在线程间传递消息以及消息被executor处理。而Tuple发送则涉及到IConnection接口以及不同的grouping策略。 TridentTopology是Storm提供的高层次...

Global site tag (gtag.js) - Google Analytics