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

标签: bigdata | 发表时间:2017-06-26 08:00 | 作者:
出处:http://itindex.net/relian

大数据

作者:Mahesh Chand Kandpal
翻译:雁惊寒

译者注:本文介绍了两大常用的流式处理框架,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 > 数据科学模型“这样的场景。

End.

转载请注明来自36大数据(36dsj.com): 36大数据» Spark Streaming vs. Kafka Stream 哪个更适合你

相关 [spark streaming vs] 推荐:

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

- - IT瘾-bigdata
作者:Mahesh Chand Kandpal. 译者注:本文介绍了两大常用的流式处理框架,Spark Streaming和Kafka Stream,并对他们各自的特点做了详细说明,以帮助读者在不同的场景下对框架进行选择. 流式处理的需求每天都在增加,仅仅对大量的数据进行处理是不够的. 数据必须快速地得到处理,以便企业能够实时地对不断变化的业务环境做出反应.

[原]Spark Streaming原理简析

- - 张包峰的博客
StreamingContext实例化的时候,需要传入一个 SparkContext,然后指定要连接的 spark matser url,即连接一个 spark engine,用于获得executor. 实例化之后,首先,要指定一个接收数据的方式,如. 这样从socket接收文本数据. 这个步骤返回的是一个 ReceiverInputDStream的实现,内含 Receiver,可接收数据并转化为RDD放内存里.

Spark Streaming 自定义接收器

- - zzm
Spark Streaming可以从任意数据源接受流数据,而不仅仅是那些内置支持的数据源(如Flume、kafka等). 这就要求开发人员实现一个接收器(recevier),用于接收来自有关数据源的数据. 本篇手册以一个自定义的接收器(recevier)实现和其在spark streaming中的应为为主线进行讲解.

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

- - 简单之美
基于Spark通用计算平台,可以很好地扩展各种计算类型的应用,尤其是Spark提供了内建的计算库支持,像Spark Streaming、Spark SQL、MLlib、GraphX,这些内建库都提供了高级抽象,可以用非常简洁的代码实现复杂的计算逻辑、这也得益于Scala编程语言的简洁性. 这里,我们基于1.3.0版本的Spark搭建了计算平台,实现基于Spark Streaming的实时计算.

Spark Streaming + Elasticsearch构建App异常监控平台

- - 美团点评技术团队
本文已发表在《程序员》杂志2016年10月期. 如果在使用App时遇到闪退,你可能会选择卸载App、到应用商店怒斥开发者等方式来表达不满. 但开发者也同样感到头疼,因为崩溃可能意味着用户流失、营收下滑. 为了降低崩溃率,进而提升App质量,App开发团队需要实时地监控App异常. 一旦发现严重问题,及时进行热修复,从而把损失降到最低.

Spark Streaming+kafka订单实时统计实现

- - CSDN博客推荐文章
前几篇文章我们分别学习Spark RDD和PairRDD编程,本文小编将通过简单实例来加深对RDD的理解. 开发环境:window7+eclipse+jdk1.7. 部署环境:linux+zookeeper+kafka+hadoop+spark. 本实例开发之前,默认已搭好了开发环境和部署环境,如果未搭建,可以参考本人相关大数据开发搭建博客.

Spark Streaming 1.6 流式状态管理分析 - 简书

- -
Spark 1.6发布后,官方声称流式状态管理有10倍性能提升. 这篇文章会详细介绍Spark Streaming里新的流式状态管理. 在流式计算中,数据是持续不断来的,有时候我们要对一些数据做跨周期(Duration)的统计,这个时候就不得不维护状态了. 而状态管理对Spark 的 RDD模型是个挑战,因为在spark里,任何数据集都需要通过RDD来呈现,而RDD 的定义是一个不变的分布式集合.

spark streaming 从kafka 拉数据如何保证数据不丢失 | sunbiaobiao

- -
spark streaming 从kafka 拉数据如何保证数据不丢失. 为什么使用 direct 方式. 因为按需拉数据,所以不存在缓冲区,就不用担心缓冲区把内存撑爆了. 这个在Receiver-based Approach 就比较麻烦,你需要通过spark.streaming.blockInterval等参数来调整.

Spark 实战, 第 2 部分:使用 Kafka 和 Spark Streaming 构建实时数据处理系统

- -
Spark 实战, 第 2 部分:使用 Kafka 和 Spark Streaming 构建实时数据处理系统. 2015 年 7 月 27 日发布. 在很多领域,如股市走向分析, 气象数据测控,网站用户行为分析等,由于数据产生快,实时性强,数据量大,所以很难统一采集并入库存储后再做处理,这便导致传统的数据处理架构不能满足需要.

Hadoop Streaming 编程

- - 学着站在巨人的肩膀上
Hadoop Streaming是Hadoop提供的一个编程工具,它允许用户使用任何可执行文件或者脚本文件作为Mapper和Reducer,例如:. 采用shell脚本语言中的一些命令作为mapper和reducer(cat作为mapper,wc作为reducer). 本文安排如下,第二节介绍Hadoop Streaming的原理,第三节介绍Hadoop Streaming的使用方法,第四节介绍Hadoop Streaming的程序编写方法,在这一节中,用C++、C、shell脚本 和python实现了WordCount作业,第五节总结了常见的问题.