随着大数据技术的不断发展,人们对于大数据的实时性处理要求也在不断提高,传统的 MapReduce 等批处理框架在某些特定领域,例如实时用户推荐、用户行为分析这些应用场景上逐渐不能满足人们对实时性的需求,因此诞生了一批如 S3、Samza、Storm 这样的流式分析、实时计算框架。Spark 由于其内部优秀的调度机制、快速的分布式计算能力,所以能够以极快的速度进行迭代计算。正是由于具有这样的优势,Spark 能够在某些程度上进行实时处理,Spark Streaming 正是构建在此之上的流式框架。
流式大数据处理框架介绍
Samza
Samza 是一个分布式的流式数据处理框架(streaming processing),Linkedin 开源的产品, 它是基于 Kafka 消息队列来实现类实时的流式数据处理的。更为准确的说法是,Samza 是通过模块化的形式来使用 Apache Kafka 的,因此可以构架在其他消息队列框架上,但出发点和默认实现是基于 Apache Kafka。
本质上说,Samza 是在消息队列系统上的更高层的抽象,是一种应用流式处理框架在消息队列系统上的一种应用模式的实现。
总的来说,Samza 与 Storm 相比,传输上完全基于 Apache Kafka,集群管理基于 Hadoop YARN,即 Samza 只负责处理这一块具体业务,再加上基于 RocksDB 的状态管理。由于受限于 Kafka 和 YARN,所以它的拓扑结构不够灵活。
Storm
Storm 是一个开源的、大数据处理系统,与其他系统不同,它旨在用于分布式实时处理且与语言无关。Storm 不仅仅是一个传统的大数据分析系统,它可以被用于构建复杂事件处理 (CEP) 系统。CEP 系统从功能上来说,通常被分类为计算和面向检测两类,两者都可通过用户定义的算法在 Storm 中实现。举例而言,CEP 可用于识别事件洪流中有意义的事件,然后实时地处理这些事件。
Storm 框架与其他大数据解决方案的不同之处,在于它的处理方式。Apcahe Hadoop 本质上来说是一个批处理系统,即目标应用模式是针对离线分析为主。数据被引入 Hadoop 的分布式文件系统 (HDFS),并被均匀地分发到各个节点进行处理,HDFS 的数据平衡规则可以参照本文作者发表于 IBM 的文章《HDFS 数据平衡规则及实验介绍》,进行深入了解。当处理完成时,结果数据返回到 HDFS,然后可以供处理发起者使用。Storm 则支持创建拓扑结构来转换没有终点的数据流。不同于 Hadoop 作业,这些转换从不会自动停止,它们会持续处理到达的数据,即 Storm 的流式实时处理方式。
Spark Streaming
Spark Streaming 类似于 Apache Storm,用于流式数据的处理。根据其官方文档介绍,Spark Streaming 有高吞吐量和容错能力强这两个特点。Spark Streaming 支持的数据输入源很多,例如:Kafka、Flume、Twitter、ZeroMQ 和简单的 TCP 套接字等等。数据输入后可以用 Spark 的高度抽象原语如:map、reduce、join、window 等进行运算。而结果也能保存在很多地方,如 HDFS,数据库等。另外 Spark Streaming 也能和 MLlib(机器学习)以及 Graphx 完美融合。
在 Spark Streaming 中,处理数据的单位是一批而不是单条,而数据采集却是逐条进行的,因此 Spark Streaming 系统需要设置间隔使得数据汇总到一定的量后再一并操作,这个间隔就是批处理间隔。批处理间隔是 Spark Streaming 的核心概念和关键参数,它决定了 Spark Streaming 提交作业的频率和数据处理的延迟,同时也影响着数据处理的吞吐量和性能。
我们可以通过如下命令启动 WordCount 程序,如清单 1 所示。
领取专属 10元无门槛券
私享最新 技术干货