品牌网站建设方案,网站设计与开发实例,营销网站的优点,做网站是怎样赚钱的SparkStreaming第一次运行时不丢失数据
auto.offset.reset earliest Kafka和SparkStreaming整合时#xff1a;
注意#xff1a;和SparkStreaming整合时#xff0c;上面的可选参数是无效的#xff0c;只有两个可选参数#xff1a;
smallest#xff1a;简单理解为从头开…SparkStreaming第一次运行时不丢失数据
auto.offset.reset earliest Kafka和SparkStreaming整合时
注意和SparkStreaming整合时上面的可选参数是无效的只有两个可选参数
smallest简单理解为从头开始消费其实等价于上面的 earliestlargest简单理解为从最新的开始消费其实等价于上面的 latest 参数角度
1调大每次获取的数据量
spark.streaming.kafka.maxRatePerPartition 参数来控制每个 Kafka 分区每秒最大接收的数据量
2轮询间隔
spark.streaming.kafka.consumer.poll.ms 参数来调整 Kafka 消费者的轮询间隔以减少消费者获取数据的延迟
3checkpoint的目录设置在可靠的文件系统上 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.stopGracefullyOnShutdowntrueSS会在JVM关闭后 关掉 StreamingContext而不是立马关闭。
yarn application -kill [applicationid] Spark Streaming 默认分区个数
SparkStreaming默认分区个数与所对接的kafka的topic分区个数保持一致不会使用repartition去增大分区个数因为会引起shuffle降低效率。