1.11 Spark Streaming
1.11.1 Spark Streaming第一次运行不丢失数据
Kafka参数 auto.offset.reset 参数设置成earliest 从最初始偏移量开始消费数据
1.11.2 Spark Streaming精准一次消费
(1)手动维护偏移量
(2)处理完业务数据后,再进行提交偏移量操作
极端情况下,如在提交偏移量时断网或停电会造成Spark程序第二次启动时重复消费问题,所以在涉及到金额或精确性非常高的场景会使用事物保证精准一次消费。
1.11.3 Spark Streaming控制每秒消费数据的速度
通过spark.streaming.kafka.maxRatePerPartition参数来设置Spark Streaming从Kafka分区每秒拉取的条数。
1.11.4 Spark Streaming背压机制
把spark.streaming.backpressure.enabled 参数设置为ture,开启背压机制后Spark Streaming会根据延迟动态去Kafka消费数据,上限由spark.streaming.kafka.maxRatePerPartition参数控制,所以两个参数一般会一起使用。
1.11.5 Spark Streaming一个stage耗时
Spark Streaming Stage耗时由最慢的Task决定,所以数据倾斜时某个Task运行慢会导致整个Spark Streaming都运行非常慢。
1.11.6 Spark Streaming优雅关闭
把spark.streaming.stopGracefullyOnShutdown参数设置成ture,Spark会在JVM关闭时正常关闭StreamingContext,而不是立马关闭。
Kill 命令:yarn application -kill 后面跟 applicationid
1.11.7 Spark Streaming默认分区个数
Spark Streaming默认分区个数与所对接的Kafka Topic分区个数一致,Spark Streaming里一般不会使用repartition算子增大分区,因为repartition会进行Shuffle增加耗时。
1.11.8 SparkStreaming有哪几种方式消费Kafka中的数据,它们之间的区别是什么?
在实际生产环境中大都用Direct方式。