SparkStreaming😫
目录
1、SparkStreaming与Storm
SparkStreaming:是一个分布式的流式准实时计算引擎,Storm是一个实时计算框架。
- 实时性:Storm的实时性比SparkStreaming要高,SparkStreaming可以通过设置达到几秒进行一次计算,但Strom是通过来一条数据触发一次计算。
- 吞吐量:Storm是通过Spout收集数据,经过Bolt节点进行数据的计算,是移动数据,不是移动计算,而SparkStreaming是一个批处理计算,获取计算的数据节点位置,进行计算移动,数据不移动的思想理念,所有吞吐量SparkStreaming要大于Storm
- 容错机制:无法辨别,Storm是ack机制,SparkStreaming则是RDD依赖关系
- 使用场景:实时要求高使用Storm,复杂的数据计算建议使用SparkStreaming
2、SparkStreaming计算流程
首先SparkStreaming会将数据分成一个个批处理作业,将每一段数据都转换成一个个RDD,经过算子的转换后,将中间结果保存到内存中,结果可以根据业务进行叠加或者存到外部设备
3、编程模型DStream
DStream是SparkStreaming的一个抽象概念,代表持续性的数据流,DStream就代表一段时间连续的RDD,DStream包含多个RDD
其中,DStream的窗口操作,即规定窗口的大小以及滑动的时间,一个抽象概念,每滑动一次窗口,计算窗口长度大小的批处理数据,注意的是窗口大小和滑动间隔必须是批处理时间的整数倍
4、SparkStreaming检查点和数据源
检查点分为两种类型:
元数据检查点
:① 含有创建流的配置② DStream的操作信息 ③不完整的批次数据检查点
:就是RDD中间结果保存,要保存到可靠的存储系统中,以切断RDD的依赖连接,所以需要数据检查点不断检查存储的可靠性
数据源分为两种:
- 基础数据源:也就是HDFS,NFS等文本文件
- 高级数据源:也就是FLume、Kafka等这些中间件数据源
5、offset操作⭐
主要分为三种:Checkpoints、Kafka itself 、Your own data store
Checkpoints:
是SparkStreaming自带的默认的偏移量,即通过Checkpoints来记录RDD的状态情况,即便及其出现问题重启也可以获取检查点获取RDD的状态情况,弊端会因为版本问题不兼容无法使用,所以基本不会用在生产中
Kafka Itself:
使用kafka来管理偏移量,因为kafka的数据其实也是再内存和磁盘存储的,所以一旦数据量过大,便会导致kafka集群io压力大,非常不安全
Your own data store:
自己管理偏移量:比如使用外部存储器,HDFS,zookeeperDB等
6、数据的反压机制
反压的作用:为了解决数据流再处理中,数据的发送速率远远大于处理的速率,导致消费组负载过大,内存溢出等最后集群崩溃
Strom的反压机制:
- 老版本是通过设置一个最大值,防止发送速率过快,但不好把握,弊端很大
- 新版本引入Strom自动反压机制,用zookeeper的watch监控,一旦速率超过高水位阈值时,则让所有worker进入反压状态即可。
Spark反压机制:
- 老版本:也是配置参数限制最大的发送速率,弊端不灵活,容易造成资源利用率低
- 新版本:① 自动反压机制引入组件RateController(速率管理员),每次的RDD计算完成,都会从完成日志中抽取处理时间,和结束时间这些信息,进而动态的调整下次的发送速率。② 引入速率限制,也就是令牌桶机制,预先准备一批令牌,每次数据流量达到,则进行限制,也就是令牌用完,后面的则需要等待,等令牌产生新的令牌
当然一切的反压机制的前提是再反压机制还没开始的时候机器没有崩溃🙄