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翻译稿系列;
3)2011,徐明明,Storm 如何保证消息不丢失;
赠图一枚:
相关推荐
Storm实时数据处理
《storm实时数据处理》这本书深入探讨了Apache Storm这一强大的实时计算系统,它是大数据处理领域中的重要工具,尤其在实时流处理方面具有显著优势。Storm设计的核心理念是简单、可扩展和容错性,使得它在处理大规模...
Apache Storm是一个开源的分布式实时计算系统,它允许开发者处理无界数据流,确保每个事件都能得到精确一次(exactly-once)的处理,从而实现高度可靠的消息传递。 首先,我们需要理解Storm的核心概念。Storm由多个...
- **故障恢复**:在节点故障时,Storm可以自动恢复未确认的tuple,因为每个tuple的处理路径都已被跟踪。 4. **拓扑配置** 用户可以通过设置`topology.message.timeout.secs`参数来调整tuple的超时时间,根据实际...
《Storm实时数据处理》这本书是大数据处理领域的重要参考资料,它主要聚焦于Apache Storm这一开源分布式实时计算系统。Storm被广泛应用于实时分析、持续计算、分布式RPC、机器学习等多个场景,其核心理念是允许用户...
为了保证每条消息都能被完全处理,Storm提供了消息不丢失机制,这在容错性方面是非常关键的。Storm确保一旦消息被处理,它就不会丢失,并且可以通过追踪acknowledgments(确认信号)来处理失败的情况。 Storm的系统...
- **低延迟和高性能**:Storm设计用于处理高频率、低延迟的数据流,可以处理每秒数百万条消息。 - **分布式和可扩展**:Storm可以在多个服务器上分布运行,通过添加更多的服务器轻松扩展处理能力。 - **容错**:...
"360°目标跟踪系统STorM32云台控制器"是一个专为实现全方位目标追踪功能而设计的系统,核心控制器是STorM32,这是一种常见的微控制器,广泛应用于Arduino类型的开源硬件项目中。该系统通过精确的电机控制和算法支持...
Storm技术提供了一种基于消息处理的计算模型,支持多个作业同时进行,每个作业可以视为一个拓扑,其中包含了数据处理的组件和流数据之间的关系。这使得Storm非常适合于对实时性要求极高的数据处理场景,例如实时分析...
2. 可靠性:能够保证每个消息至少被处理一次。 3. 容错性:当工作节点失败时,任务可以自动重新分配。 4. 实时性:可以对流式数据进行实时处理。 5. 易于扩展:可以灵活调整spout和bolt的并行度来扩展处理能力。 ...
当一个Bolt处理完一条消息后,必须显式地向Spout发送确认信息,这样Spout才能知道该消息已经被成功处理。 - **消息按序处理**:在某些场景下,需要按照消息的顺序进行处理。Storm支持按消息的发送顺序来处理数据,以...
storm是一个类似于Hadoop勺实时数据处理框架,也是一个非常有效的开源实时计算工具,通常被比作“实时的Hadoop”。 《大数据技术丛书:Storm实时数据处理》通过丰富的实例,系统讲解Storm的基础知识和实时数据处理...
Apache Storm是一个开源的分布式实时计算系统,它被设计用来处理无界数据流,确保每个事件都能得到正确的处理,即使在高并发和大规模数据输入的情况下也能保持低延迟。本资料《Storm实时数据处理》的高清PDF版,将...
根据提供的文件信息,“Storm实时数据处理.pdf”,我们可以深入探讨与Apache Storm相关的实时数据处理技术。 ### Apache Storm简介 Apache Storm是一种分布式实时计算系统,能够处理无界数据流,即连续不断的数据...
Apache Storm是一个开源的分布式实时计算系统,它能够持续处理无限的数据流,确保每个事件都得到精确一次(Exactly Once)的处理。而Apache Kafka则是一个高吞吐量的分布式发布订阅消息系统,常用于构建实时数据管道...
Storm作为Apache软件基金会的顶级项目,是一个分布式、容错的实时计算系统,能够处理无界数据流,确保每个消息至少被处理一次,从而提供高可靠性的保障。 **Zookeeper在Storm中的角色** Zookeeper是一个分布式的,...
Tuple接收过程包括worker创建接收线程、从socket接收消息、disruptor在线程间传递消息以及消息被executor处理。而Tuple发送则涉及到IConnection接口以及不同的grouping策略。 TridentTopology是Storm提供的高层次...