Spark Streaming vs. Kafka Stream 哪个更适合你

简介:

Spark Streaming vs. Kafka Stream 哪个更适合你

译者注:本文介绍了两大常用的流式处理框架,Spark Streaming和Kafka Stream,并对他们各自的特点做了详细说明,以帮助读者在不同的场景下对框架进行选择。以下是译文。流式处理的需求每天都在增加,仅仅对大量的数据进行处理是不够的。数据必须快速地得到处理,以便企业能够实时地对不断变化的业务环境做出反应。流式处理是持续而又并发地对数据进行实时处理。流式处理是处理数据流或传感器数据的理想平台,而“复杂事件处理”(CEP)则利用了逐个事件处理和聚合等技术。对于实时数据处理功能,我们有很多选择可以来实现,比如Spark、Kafka Stream、Flink、Storm等。在这个博客中,我将讨论Apache Spark和Kafka Stream的区别。

Apache Spark

Apache Spark是大规模数据处理的通用框架,支持多种不同的编程语言和概念,例如MapReduce、内存处理、流式处理、图形处理和机器学习。它也可以用于Hadoop的顶层。数据可以从多种来源(例如Kafka、Flume、Kinesis或TCP套接字)获取,并且使用一些复杂的算法(高级功能,例如映射、归约、连接和窗口等)对数据进行处理。

在框架内部,它的工作原理如下图。 Spark Streaming接收实时输入数据流,并将数据分成多个批次,然后由Spark引擎对其进行处理,批量生成最终的结果流。

Spark Streaming提供了一个被称为离散化数据流(discretized stream,缩写为DStream)的高级抽象,它代表了一个持续的数据流。DStream可以从诸如Kafka、Flume或Kinesis等来源的输入数据流中创建,或者通过对其他DStream执行高级操作来创建。在框架内部,DStream可以看成是一系列的RDD(Resilient Distributed Datasets,弹性分布式数据集)。

Kafka Stream

Kafka Streams是一个用于处理和分析数据的客户端库。它先把存储在Kafka中的数据进行处理和分析,然后将最终所得的数据结果回写到Kafka或发送到外部系统去。它建立在一些非常重要的流式处理概念之上,例如适当区分事件时间和处理时间、窗口支持,以及应用程序状态的简单(高效)管理。同时,它也基于Kafka中的许多概念,例如通过划分主题进行扩展。此外,由于这个原因,它作为一个轻量级的库可以集成到应用程序中去。这个应用程序可以根据需要独立运行、在应用程序服务器中运行、作为Docker容器,或通过资源管理器(如Mesos)进行操作。

Kafka Streams直接解决了流式处理中的很多困难问题:

  • 毫秒级延迟的逐个事件处理。
  • 有状态的处理,包括分布式连接和聚合。
  • 方便的DSL。
  • 使用类似DataFlow的模型对无序数据进行窗口化。
  • 具有快速故障切换的分布式处理和容错能力。
  • 无停机滚动部署。

Apache Spark可以与Kafka一起使用来传输数据,但是如果你正在为新应用程序部署一个Spark集群,这绝对是一个复杂的大问题。

为了克服这个复杂性,我们可以使用完整的流式处理框架,Kafka streams正是实现这个目的的最佳选择。

我们的目标是简化流式处理,使之成为异步服务的主流应用程序编程模型。这是我知道的第一个库,它充分利用了Kafka,而不仅仅把Kafka当做是一个信息中介。

Streams建立在KTables和KStreams的概念之上,这有助于他们提供事件时间处理。

给出一个与Kafka的核心抽象高度集成的处理模型,能够减少流式架构中移动件的总数。

将状态表与事件流完全整合起来,并在单个概念框架中提供这两个东西,这使得Kafka Streams完全成为一个嵌入式的库,而不是流式处理集群(只是Kafka和你的应用程序)。当你向应用程序加入了一个新的实例,或者现有的实例发生崩溃的时候,它能够自动均衡负载,并维护表的本地状态,使得系统能够从故障中恢复出来。

Kafka Streams具备低延迟的特点,并且支持易于使用的事件时间。它是一个非常重要的库,非常适合某些类型的任务。这也是为什么一些设计可以针对Kafka的工作原理进行深入地优化的原因。你不需要设置任何种类的Kafka Streams集群,也没有集群管理器。如果你需要实现一个简单的Kafka的主题到主题的转换、通过关键字对元素进行计数、将另一个主题的数据加载到流上,或者运行聚合或只执行实时处理,那么Kafka Streams适合于你。

如果事件时间不相关,并且秒级的延迟可以接受,那么Spark是你的第一选择。它相当稳定,并且可以很容易地集成到几乎任何类型的系统中去。此外,每个Hadoop发行版都包含它。而且,用于批处理应用程序的代码也可以用于流式应用程序,因为API是相同的。

结论

我认为,Kafka Streams最适用于“Kafka > Kafka”场景,而Spark Streaming可用于“Kafka > 数据库”或“Kafka > 数据科学模型“这样的场景。


本文作者:Mahesh Chand Kandpal

来源:51CTO

相关文章
|
消息中间件 分布式计算 资源调度
Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快。从技术上讲,这意味着我们的大数据处理将变得更加复杂且更具挑战性。而且,许多用例(例如,移动应用广告,欺诈检测,出租车预订,病人监护等)都需要在数据到达时进行实时数据处理,以便做出快速可行的决策。这就是为什么分布式流处理在大数据世界中变得非常流行的原因。
146 0
Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
|
消息中间件 分布式计算 Kafka
Spark Streaming应该如何消费Kafka?
前言 在项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从kafka中不断拉取数据进行词频统计。
1993 0
|
消息中间件 分布式计算 Kafka
Spark修炼之道(进阶篇)——Spark入门到精通:第十六节 Spark Streaming与Kafka
作者:周志湖 主要内容 Spark Streaming与Kafka版的WordCount示例(一) Spark Streaming与Kafka版的WordCount示例(二) 1. Spark Streaming与Kafka版本的WordCount示例 (一) 启动kafka集群 root@sparkslave02:/hadoopLearning/kafka_2
4109 0
|
3月前
|
机器学习/深度学习 SQL 分布式计算
Apache Spark 的基本概念和在大数据分析中的应用
介绍 Apache Spark 的基本概念和在大数据分析中的应用
159 0
|
14天前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
3月前
|
机器学习/深度学习 SQL 分布式计算
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
介绍 Apache Spark 的基本概念和在大数据分析中的应用。
|
2天前
|
分布式计算 大数据 数据处理
[AIGC大数据基础] Spark 入门
[AIGC大数据基础] Spark 入门
|
2月前
|
分布式计算 大数据 Java
Spark 大数据实战:基于 RDD 的大数据处理分析
Spark 大数据实战:基于 RDD 的大数据处理分析
122 0
|
3月前
|
分布式计算 监控 大数据
Spark RDD分区和数据分布:优化大数据处理
Spark RDD分区和数据分布:优化大数据处理
|
4月前
|
分布式计算 大数据 Linux
Python大数据之PySpark(三)使用Python语言开发Spark程序代码
Python大数据之PySpark(三)使用Python语言开发Spark程序代码
108 0