SparkStreaming限速
Spark端限速
调整spark.streaming.kafka.maxrateperpartiton参数,它可以控制每秒处理的消息数
Kafka端限速
为某一个消费者设置每秒消费的字节数如下:
$ bin/kafka-configs.sh --zookeeper localhost:2181
--alter
--add-config 'consumer_byte_rate=15728640'
--entity-type clients
--entity-name clientA
然后在sparkstreaming配置消费者的id为“clientA”
Map<String, Object> kafkaParams = new HashMap<>();
kafkaParams.put("client.id", "clientA");
反压机制
以上两种方法有一个弊端:都需要人工去计算当前的流量大概是多大。先不说估计的流量准不准,需要在
流量变化后重新修改配置,重启程序。这就不太方便,所有Spark官网出现一个自动根据现在阶段的一些参数来自动就算这个值,并使用令牌桶算法进行限流。
参数
当前批次完成的时间戳
实际处理时长
当前批次调度起来之前的延迟
当前批次的数据条数
如果用户配置了 spark.streaming.receiver.maxRate 或 spark.streaming.kafka.maxRatePerPartition,那么最后到底接收多少数据取决于三者的最小值。也就是说每个接收器或者每个 Kafka 分区每秒处理的数据不会超过