SparkStreaming

SparkStreaming第一次运行时不丢失数据

auto.offset.reset = earliest

Kafka和SparkStreaming整合时:

注意:和SparkStreaming整合时,上面的可选参数是无效的,只有两个可选参数:

  1. smallest:简单理解为从头开始消费,其实等价于上面的 earliest
  2. largest:简单理解为从最新的开始消费,其实等价于上面的 latest

参数角度:

1)调大每次获取的数据量

spark.streaming.kafka.maxRatePerPartition 参数来控制每个 Kafka 分区每秒最大接收的数据量

2)轮询间隔 

spark.streaming.kafka.consumer.poll.ms 参数来调整 Kafka 消费者的轮询间隔,以减少消费者获取数据的延迟

3)checkpoint的目录设置在可靠的文件系统上

SparkStreaming 整合Kafka 实现精确一次消费

1.手动维护偏移量(kafka)

2.做完维护业务数据操作后,提交偏移量。

极端情况下在checkpoint提交时断电导致重复消费,所以在涉及金额等精确性非常高的环境里就使用 事务+偏移量 去保证精确一次消费。

默认消费Kafka后是自动提交偏移量的(默认5秒自动提交一次)

实现精确一次消费的常见方法:

生产者

1.消息队列的集成,如kafka,可以使用 Kafka 的 Offset 来记录已消费的消息的偏移量,并定期提交偏移量到 Kafka 的特殊主题中。在出现故障后,可以使用提交的偏移量来恢复消费过程,并确保不会重复消费数据。

消费者

2.写入外部存储:将接收到的数据写入外部存储系统(如 HDFS 或分布式数据库),并定期记录已处理数据的标识(如文件的偏移量或处理时间戳)。在故障恢复时,可以根据记录的标识来确定从哪里恢复数据处理

3.事务性写入:使用支持事务性写入的外部存储,如 Apache HBase 或 Apache Phoenix,可以在写入数据时确保事务的原子性,以避免数据丢失或重复写入。

SS内部:

内部状态管理:使用 Spark Streaming 内部的状态管理机制,如窗口操作或累加器,可以跟踪已处理数据的状态,并在故障恢复时使用该状态来恢复处理过程。

SS的checkpoint机制:

使用StreamingContext对象的checkpoint()设置路径,可以实现在指定路径周期性的记录ss的一些元数据和状态信息,再通过对象的getorCreate()获得这些checkpoint信息StreamingContext,自动加载之前保存的 Checkpoint。

SparkStreaming控制每秒消费数据的速度

通过 spark.streaming.kafka.maxRatePerPartition 参数来设置 Spark Streaming 从 kafka 分区每秒 拉取的条数

SparkStreaming背压机制

spark.streaming.backpressure.enabled 参数设置为 ture,开启背压机制后 Spark Streaming 会 根据延迟动态去 kafka 消费数据,上限由 spark.streaming.kafka.maxRatePerPartition 参数控制, 所以两个参数一般会一起使用

动态控制SS消费数据的速率,监控数据输入和处理的速率和系统利用率等指标,来自动调节数据处理的速度。当生产数据速度大于消费数据的速度时,背压机制会自动降低数据的输入速率

背压实现的构成组件:

1.direct或receiver:基于d or r连接 监控速率

2.ratecontroller:核心组件,监控数据输入和处理的速率和系统利用率等指标,来自动调节数据处理的速度。

3.BlockGenerator:负责将接收到的数据切分成小块,并提交给ratecontroller处理。

Spark Streaming 一个stage耗时

SS中一个批处理包含若干个stages,每个stage包含多个操作,一个stage耗时是指一个批处理时间内,一个stage完成所需的时间。

SS中数据流被划分为很多的微批,即任务(1个微批=1个任务),是最小的执行单元,一个阶段stage可以包含多个任务。

总结,批处理是对一批数据进行处理,而stage是一组相关任务的逻辑单元,用于执行一系列相互依赖的转换操作。

Spark 引擎负责任务的划分、阶段的调度和任务的执行。整个批处理过程包括数据加载、转换操作、任务划分、阶段调度和结果输出等步骤。

SparkStreaming 优雅的关闭

spark.streaming.stopGracefullyOnShutdown=true,SS会在JVM关闭后 ,关掉 StreamingContext,而不是立马关闭。

yarn application -kill [applicationid]

Spark Streaming 默认分区个数

SparkStreaming默认分区个数与所对接的kafka的topic分区个数保持一致,不会使用repartition去增大分区个数,因为会引起shuffle降低效率。

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值