Spark Streaming with Kafka - tenji/ks GitHub Wiki

Spark Streaming + Kafka

一、读取方式

1.1 Receiver-Based Approach(基于 Receiver 的方式)

1.2 Direct Approach(直接读取方式)

二、直接读取方式的优势

2.1 Simplified Parallelism

2.2 Efficiency

2.3 Exactly-Once Semantics

三、相关参数

3.1 消费速度

有关消费速度控制的三个变量:

  1. spark.streaming.backpressure.enabled

    开启后spark自动根据系统负载选择最优消费速率,默认值:false

  2. spark.streaming.backpressure.initialRate

    spark.streaming.backpressure.enabled开启的情况下,限制第一次批处理应该消费的数据,因为程序冷启动队列里面有大量积压,防止第一次全部读取,造成系统阻塞,默认直接读取所有。

  3. spark.streaming.kafka.maxRatePerPartition

    限制每秒每个消费线程读取每个 Kafka 分区最大的数据量,默认读取所有。

需要注意的是:

场景一:只有变量 3 激活的时候,每次消费的最大数据量,就是设置的数据量,如果不足这个数,就有多少读多少,如果超过这个数字,就读取这个数字的设置的值;

场景二:只有变量 1 和 3 激活的时候,每次消费读取的数量最大会等于变量 3 设置的值,最小是 Spark 根据系统负载自动推断的值,消费的数据量会在这两个范围之内变化根据系统情况,但第一次启动会有多少读多少数据。

场景三:变量 1, 2, 3 同时激活的时候,跟场景二的消费情况基本一样,但第一次消费会得到限制,因为我们设置第一次消费的频率了。

参考链接