【流式计算】Apache Storm,Apache Spark和Apache Samza

本文对比了Apache Storm、Spark Streaming及Samza三种实时计算系统。它们均为开源、低延迟且支持分布式处理,但传递模式和状态管理策略各异。Storm采用拓扑结构进行数据处理;Spark Streaming则将数据流划分为小批量进行处理;而Samza则关注于消息级别的处理。
摘要由CSDN通过智能技术生成

Enabling the Real-Time Enterprise with Data Streaming_yyth

✨ 有很多分布式计算系统可以实时或接近实时地处理大数据。本文将从三个Apache框架的简短描述开始,并试图对它们的异同点提供快速、高层次的概述。



▚ 01 Apache Storm


Apache Storm

    在Storm中,你可以设计一个称为拓扑结构topology的实时计算图,并将其提交给集群,其中主节点master node负责分发任务,工作节点worker nodes负责执行。在拓扑结构中,数据在spouts(发送表现为元数组tuples形式的数据流,元数组是指不可边的键值对key-value pairs)和bolts(转换数据流,比如计数count、过滤filter等)间传递。bolts本身可以在处理管道processing pipeline中,有选择地向其他bolts发送数据。




在这里插入图片描述

▚ 02 Apache Spark

Spark Structured Streaming | Apache Spark

    Spark Streaming(Spark核心API的拓展)并不像Storm那种(每次只处理一个),且支持连续的数据流处理。相反,它在处理前先将其划分为小批量small batches的时间间隔time intervels。Spark对连续数据流的抽象称为DStream(离散流Discretized Stream)。DStream为RDDs(弹性分布式数据集Resilient Distributed Datasets)的微批量micro-batche。RDDs是分布式集合,可以通过任意函数和数据滑动窗口的转换来并行操作。

在这里插入图片描述


2.1  Spark Streaming的工作原理

    它首先将固定的时间间隔的数据流作为一个DStream,并形成DStreams,内部为一系列的RDDs。通过Spark API处理RDDs,并批量返回RDDs的操作结果。

在这里插入图片描述
    整体的处理框架为:

在这里插入图片描述


在这里插入图片描述

▚ 03 Apache Smaza

Samza (apache.org)

    分布式流处理框架A distributed stream processing framework

    Samza的流处理方法是在接收到信息时,每次处理一个信息。Samza的流原语不是元组或者DStream,而是一个消息message。流被划分为分区partitions,每个分区是一个有序的只读消息序列,每个消息拥有一个唯一的ID(偏移量offset)。该系统还支持批处理,即从相同的流分区顺序消费多个消息。尽管Samza通常依赖Hadoop的YARN(Yet Another Resource Negotiator)和Apache Kafka。

在这里插入图片描述


在这里插入图片描述

▚ 04 对比分析


4.1  相同点

    这三种实时计算系统都是开源、低延迟、分布式、可扩展和容错的。它们都允许分布在具有故障转移功能的计算机集群上的并行任务来运行流处理代码。也提供了简单的API来抽象底层实现的复杂度。

    这三个框架对类似的概念使用了不同的词汇表:

在这里插入图片描述


4.2  差异点

    有三种传递模式:

  1. At-most-once:消息可能会丢失。这通常是最不理想的结果。

  2. At-least-once:消息可能被重新传递(没有丢失,但是会重复)。这对许多用例来说已经足够了。

  3. Exactly-once:每个消息传递一次且仅传递一次(没有丢失,没有重复)。这是个理想的特性,尽管很难在所有情况下保证。

    这三种框架的不同点,如下表所示:

在这里插入图片描述

    另一个方面是状态管理。它们使用不同的策略来存储状态。Spark Streaming将数据写入分布式文件系统(如HDFS)。Samza使用嵌入的键值对key-value存储。Storm可在应用层管理状态,或使用一个称为trident的更高层抽象。


在这里插入图片描述

▚ 05 小结

    上文仅初步了解了3中Apache框架,并没有详细介绍这些框架间的许多其他特性和更细微的差异。由于这些系统是不断演化的,因此,理解它们比较的局限性是重要的。


在这里插入图片描述


参考文章:

Streaming Big Data: Storm, Spark and Samza - Java Code Geeks - 2022

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值