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

时间: 2024-11-01 13:43:13

Spark Streaming vs. Kafka Stream 哪个更适合你的相关文章

Spark修炼之道(进阶篇)——Spark入门到精通:第十六节 Spark Streaming与Kafka

作者:周志湖 主要内容 Spark Streaming与Kafka版的WordCount示例(一) Spark Streaming与Kafka版的WordCount示例(二) 1. Spark Streaming与Kafka版本的WordCount示例 (一) 启动kafka集群 root@sparkslave02:/hadoopLearning/kafka_2.10-0.8.2.1# bin/kafka-server-start.sh config/server.properties root

《Spark官方文档》Spark Streaming编程指南(二)

累加器和广播变量 首先需要注意的是,累加器(Accumulators)和广播变量(Broadcast variables)是无法从Spark Streaming的检查点中恢复回来的.所以如果你开启了检查点功能,并同时在使用累加器和广播变量,那么你最好是使用懒惰实例化的单例模式,因为这样累加器和广播变量才能在驱动器(driver)故障恢复后重新实例化.代码示例如下: Scala Java Python object WordBlacklist { @volatile private var ins

Spark Streaming 流式计算实战

这篇文章由一次平安夜的微信分享整理而来.在Stuq 做的分享,原文内容.  业务场景 这次分享会比较实战些.具体业务场景描述: 我们每分钟会有几百万条的日志进入系统,我们希望根据日志提取出时间以及用户名称,然后根据这两个信息形成 userName/year/month/day/hh/normal  userName/year/month/day/hh/delay 路径,存储到HDFS中.如果我们发现日志产生的时间和到达的时间相差超过的一定的阈值,那么会放到 delay 目录,否则放在正常的 no

Kafka+Spark Streaming+Redis实时计算整合实践

基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming.Spark SQL.MLlib.GraphX,这些内建库都提供了高级抽象,可以用非常简洁的代码实现复杂的计算逻辑.这也得益于Scala编程语言的简洁性.这里,我们基于1.3.0版本的Spark搭建了计算平台,实现基于Spark Streaming的实时计算. 我们的应用场景是分析用户使用手机App的行为,描述如下所示: 手机客户端会收集用户的行为事件(我们以点击

大数据-spark streaming如何更好的计算关系型数据库中数据?

问题描述 spark streaming如何更好的计算关系型数据库中数据? 各位大虾过来围观一下. spark streaming在计算日志时通常会使用kafka+spark的架构, 目前很少看到有大虾讲spark streaming计算关系型数据库中的数据. 希望有大虾过来围观讨论,如何更好的把关系型数据库中的数据同步至spark中, 进行实时计算.有什么更好的架构或者开源软件的解决方案 解决方案 官网上看到Spark Streaming内置就支持两类数据源, 1) 基础数据源(Basic s

【Spark Summit East 2017】 使用Kafka Connect和Spark Streaming构建实时数据管道

本讲义出自Ewen Cheslack Postava在Spark Summit East 2017上的演讲,主要介绍了面对使用Spark Streaming构建大规模实时数据管道的挑战,Kafka项目最近推出了新的工具-- Kafka Connect,该工具将帮助简化从Kafka导入和导出数据,Ewen Cheslack Postava分享了如何使用Kafka Connect和Spark Streaming构建实时数据管道.

【Spark Summit East 2017】物联网与自动驾驶汽车:使用Kafka与Spark Streaming进行同步定位和映射

本讲义出自Jay White Bear在Spark Summit East 2017上的演讲,主要介绍了在机器人和自主车辆领域公认的具有工业和研究价值的问题--同步定位和映射(SLAM)问题,演讲中分享了依靠Kafka和Spark Streaming构成的新集成框架,并使用在线算法实时地进行导航并且绘制空间地图来解决SLAM问题,并分享了在实现中面临的挑战以及为改善性能提出的优化建议.

【Spark Summit East 2017】Kafka、YARN与Spark Streaming作为一个服务

本讲义出自Jim Dowling在Spark Summit East 2017上的演讲,主要介绍了在容易进行调试的YARN上构建多租户Spark streaming应用程序的过程中遇到的挑战,并展示了如何使用ELK技术栈对Spark streaming应用程序进行日志记录和调试,以及如何使用Graphana和Graphite对应用进行监控以及优化以及使用Dr Elephant终止Spark streaming任务.

《Kafka Stream》调研:一种轻量级流计算模式

Confluent Inc(原LinkedIn Kafka作者离职后创业公司)在6月份预告推出Kafka Stream,Kafka Stream会在Kafka 0.10版本中推出. 对于流计算,已经有Storm.Spark,Samza,包括最近新起的Flink,Kafka为什么再自己做一套流计算呢?Kafka Stream 与这些框架比有什么优势?Samza.Consumer Group已经包装了Kafka轻量级的消费功能,难道不够吗? 花了一些时间阅读docs 和一些PPT,写一份粗略的调研材