面对越来越多的流处理场景,流计算引擎也成为大数据学习当中的重头戏,在大厂面试当中,流计算引擎也是必问的面试题。今天的大数据开发学习分享,我们就来讲讲Spark Streaming与Kafka Streaming流处理对比。
Apache Spark
Apache Spark可以说是基于Hadoop MapReduce而来的一代框架,最初也是主打分布式离线计算,而后推出Spark Streaming作为流处理的主要组件。
Spark Streaming数据可以从Kafka、Flume、Kinesis或TCP套接字等许多源中摄取,并且可以使用复杂的算法进行处理,这些算法使用诸如map、reduce、join和window等高级函数表示。
在内部,它的工作原理如下。Spark Streaming接收实时输入数据流,并将数据分为批,然后由Spark engine进行处理,以批量生成最终结果流。
Spark Streaming提供了一种高级抽象,称为离散流或数据流,它表示连续的数据流。数据流可以从输入数据流(如Kafka、Flume和Kinesis)中创建,也可以通过对其他数据流应用高级操作来创建。在内部,数据流表示为RDD序列。
Kafka Stream
Kafka Streams是一个客户端库,用于处理和分析存储在Kafka中的数据,并将结果数据写回Kafka或将最终输出发送到外部系统。它建立在重要的流处理概念之上,例如正确区分事件时间和处理时间、窗口支持和简单(但有效)的应用程序状态管理。
它基于Kafka中已经包含的许多概念,例如通过划分主题来扩展。此外,由于这个原因,它作为一个轻量级的库,可以集成到一个应用程序中。然后,应用程序可以按需要操作——独立运行,在应用服务器中,作为Docker容器,或者通过诸如Meos之类的资源管理器。
Kafka Streams直接解决了流处理中的许多难题:
事件一次处理(不是微批次)的毫秒延迟。
状态处理,包括分布式连接和聚合。
方便的DSL。
使用类似数据流模型的无序数据窗口化。
分布式处理和容错,故障切换速度快。
无停机滚动部署。
Apache Spark可以与Kafka一起用于流式传输数据,但是如果您只是为了这个新应用程序部署一个Spark集群,这无疑是一个巨大的复杂性冲击。
为了克服这一复杂性,kafkawe可以使用成熟的流处理框架,Kafka流以如下目标出现在图中。
其目标是简化流处理,使其成为异步服务的主流应用程序编程模型。它充分利用Kafka不仅仅是一个消息代理。
Streams基于KTables和KStreams的概念,可以帮助他们提供事件时间处理。
提供与Kafka提供的核心抽象完全集成的处理模型,以减少流体系结构中移动件的总数。
将状态表的概念与事件流完全集成,并在单个概念框架中提供这两个事件。使Kafka Streams成为一个没有流处理集群的完全嵌入式库 - 只需Kafka和您的应用程序。它还会在添加应用程序的新实例或现有应用程序崩溃时平衡处理负载。并维护表的本地状态,并帮助从故障中恢复。
Spark Streaming和kafka Stream如何选择?
低延迟和易于使用的事件时间支持适用于Kafka Streams。它是一个相当集中的库,它非常适合某些类型的任务。不需要设置任何类型的特殊Kafka Streams集群,也没有集群管理器。如果需要进行简单的Kafka主题到主题转换,按键计算元素,使用来自其他主题的数据丰富流,或运行聚合或仅实时处理 - Kafka Streams更加适合。
如果事件时间不相关且秒范围内的延迟可以接受,则Spark是首选。它很稳定,几乎任何类型的系统都可以轻松集成。此外,它还附带了每个Hadoop发行版。此外,用于批处理应用程序的代码也可以用于流应用程序,因为API是相同的。
关于大数据开发学习,Spark Streaming与Kafka Streaming流处理对比,以上就为大家做了简单的介绍了。在现有的流处理引擎当中,Spark和kafka都有着各自的优势所在,适用于不同的场景需求,学习阶段都应有所掌握。
网友评论