APP下载

Spark Streaming在实时计算中的应用研究

2018-12-17谢艳晴

电脑知识与技术 2018年25期

谢艳晴

摘要:Spark Streaming作为目前最为流行的一种实时流计算框架,在大数据时代,企业搭建实时计算平台中占据着举足轻重的地位。其良好的扩展性、高吞吐量以及容错机制能够满足我们很多场景应用。

关键词:Spark Streaming;实时计算

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)25-0258-02

随着大数据时代的到来,数据呈爆炸式的增长,原本单机的数据处理已经无法满足大数据时代业务的场景需要,如每日GB/TB级离线日志分析,网站/APP海量用户的点击浏览行为在线分析等等。在需求的驱动下,业界很快打造出了一些优秀的分布式计算框架,如Hadoop、Spark等。

实时计算是一种在线的将海量数据实时进行分析处理,一般延时限制在秒级的应用场景。该场景的数据源是实时的不间断的,比如对于大型网站、海量用户APP的流式数据:用户点击了什么功能,搜索了什么内容等,实时的数据计算和处理可以实现实时营销(商品推荐、优惠券活动),也可以实现动态实时地监控网站不同时段的用户流量和用户分布的监控。实时计算系统在互联网公司拥有不可估量的价值,尤其是对电商平台、金融互联网平台等,需要从用户的实时行为中计算分析做营销的平台。

1 Spark Streaming实时计算框架

1.1 Spark Streaming简介

为了满足实时计算场景的需求,使数据处理能够达到实时的响应和反馈,又随之出现了实时计算框架:Apache Storm、Apache Flink以及Spark Streaming等。一个项目除了实时计算之外,还往往会包括离线批处理、交互式查询等业务功能。Spark Streaming是基于Spark Core API,所以与Spark中的其他模块Spark Core(离线批处理)、Spark SQL(交互式查询)能够保持非常好的兼容性,三者可以进行无缝整合,给系统提供非常高的可扩展性。所以Spark Streaming是目前在企业中最为流行的实时计算框架。

Spark Streaming可以从多种实时数据源读取数据,例如Kafka、Flume、Kinesis以及TCP sockets,也可以通过例如map,reduce,join,window等的高级函数组成的复杂算法处理。最终将处理后的数据持久化到HDFS,数据库或者实时仪表盘中[1]。

在内部,它的工作原理如下图2所示,Spark Streaming接收实时输入数据流并将数据切分成batch(批)数据,然后由Spark引擎处理它们以生成最终的分批流结果。

1.2 Spark Streaming优劣对比

Spark Streaming不是真正的流失处理框架,而是一次处理一批数据。这种粗粒度的准实时处理框架,一次读完或异步读完之后处理数据,且其计算可基于大内存进行,因此具有较高的吞吐量,但是不可以避免会出现相应的计算延时,所以Spark Streaming适合秒级响应的准实时计算系统[2]。

Storm是纯流式的实时计算框架,用于不能忍受1秒以上延时的场景使用,比如实时金融系统,要求纯实时进行金融交易和分析。若Storm框架在程序中需要对数据进行延时批处理和交互查询时,在编程实现方面就没有Spark Streaming来得更加简单,快捷些。

2 Spark Streaming消费Kafka

Kafka是实时数据源的一种,本文以kakfa为例,重点研究Spark Streaming消费kafka的两种方式[3]。

2.1 Receiver DStream

容器方式采用Kafka高阶API以建造容器的方式来专门、持续不断、异步读取Kafka的数据、读取时间间隔以及每次读取offsets范围可以由参数来配置。读取的数据保存在Receiver中,当driver触发batch任务的时候,Receiver中的数据会转移到剩余的Executor中去执行。在执行完毕之后,Receiver会相应更新Zookeeper的offsets。该方式为保证数据不丢失,可通过配置spark.streaming.receiver.writeAheadLog.enable参数,使数据保存两份,但是也会造成存储浪费和影响效率。

2.2 Direct DStream

直接方式采用Kafka简单的consumer api方式来读取数据,无须经由zookeeper,此方式也不需要专门Receiver来持续读取数据。当batch任务触发时,由Executor读取数据,并参与到其他Executor的数据计算过程中去。Driver来决定读取多少offsets,并将offsets交由checkpoints来维护。将触发下次batch任务,再由Executor读取kakfa数据并计算。相比于Receiver方法,该方式效率有了明显提示,并且節约了计算资源,但是没有维护zookeeper,故在监控可视化方面,需要单独对zookeeper进行维护。

3 结论

实时计算在各大电商、金融等平台中已经成为不可或缺的一部分。实时计算框架中Spark Streaming相比于其他框架,因其作为Spark生态中的一部分所以在项目中更加实用。本文概述了Spark Streaming的特点和工作原理,之后以高级实时数据源Kafka为例,剖析了Streaming消费Kafka的两种模型,并论述了两种模型的优缺点,为读者搭建实时计算系统提供参考。

参考文献:

[1] 党寿江,刘学,王星凯,等.基于Spark Streaming的实时数据采集分析系统设计[J].网络新媒体技术,2017,6(5):48-53.

[2] 裴国才.流计算及其在电信实时营销中的应用[J].信息通信,2018(3).

[3] 韩德志,陈旭光,雷雨馨,等.基于Spark Streaming的实时数据分析系统及其应用[J].计算机应用,2017,37(5):1263-1269.

【通联编辑:梁书】