SparkStreaming 流计算实战
一、简介
Spark Streaming 是 Spark 最早推出的流处理组件,它基于流式批处理引擎,基本原理是把输入数据以某一时间间隔批量的处理(微批次),当批处理时间间隔缩短到秒级时,便可以用于实时数据流。
Spark 2.0 引入了 Structured Streaming, 将微批次处理从高级 API 中解耦出去。它简化了 API 的使用,API 不再负责进行微批次处理;开发者可以将流看成是一个没有边界的表,并基于这些“表”运行查询。Structured Streaming 的默认引擎基于微批处理引擎,并且可以达到最低 100ms 的延迟和数据处理的 exactly-once 保证。
Spark 2.3 继续向更快、更易用、更智能的目标迈进,引入了低延迟的持续流处理模式,可以达到端到端最低 1ms 的延迟和数据处理的 at-least-once 的保证。
采用何种处理模式只需要进行简单的模式配置即可。
二、实践
对于 Spark Core 的方式读取本地文件进行 wordCount 的实例,spark Core 的方式本质上属于批处理,举个简单的例子,一款 App 通过埋点的方式采集了用户点击各个功能的日志数据,通过跑批来统计一段时间内点击总量为 topK(K>0) 的功能,就会用到这种方式来计算。
但是,如果想统计前一个小时,前半个小时,前 10 分钟甚至更细粒度的时间段内,该 app 点击量为 topK 的功能怎么半,难道要每隔一段时间启动一个新批任务来计算么,显然不是。这种处理模式就是流处理。
SparkStreaming 是目前应用比较广泛的流处理框架(组件),它可以通过定义一个时间间隔来完成每隔多久进行一次计算。从以上的描述中,你可能也意识到了 SparkStraming 本质上还是属于批处理,但是当间隔时间越来越短,也就变成了微批,我们就可以粗略的看做为流处理啦。目前 SparkStreaming 可以做到秒级的时间间隔,已经能够满足大部分的流处理场景应用了。
SparkStreaming 一般结合 Kafka 等消息队列相互协作,我们本期学习重点在于 SparkStreaming,因此用 netcat 来模拟 socket 数据源进行 SparkStreaming 调试。
1.安装并启动 netcat
netcat 工具非常轻便容易安装,安装完成后运行下面命令开启服务端口:
2.创建 SparkStreaming 示例
3.运行
3.1 在 netcat 启动的页面输入字符模拟数据产生过程
3.2 可以看到 SparkStreaming 每隔 5s 钟进行了实时计算
4.以上就是流处理等一般过程,也是最基本的流处理
版权声明: 本文为 InfoQ 作者【小舰】的原创文章。
原文链接:【http://xie.infoq.cn/article/87ca33cb696e54e771ba84f41】。文章转载请联系作者。
评论