Receiver方式消费kafka数据积压问题
1.问题
在通过receiver方式接受kafka消息时,发现有大量消息在队列中阻塞最终导致spark任务执行失败。
经过排查发现,利用receiver方式来消费kafka的数据时可能会因为zk的group是首次创建或者有一段时间未消费,在程序启动的时候一次性读取进来大量的数据导致数据积压严重报错oom或者yarn资源不够而崩溃,可以通过设置最大批次的数据量来调节。
2.解决办法
这里可以通过一个参数来解决,receiver方式的数据积压问题。
--conf spark.streaming.kafka.maxRatePerPartition=10000
限制每个批次读取进来的最大数据量,来平稳的读取积压的数据
3.怎么计算每个批次数据的数量
总数=maxRatePerPartition*partitions(分区数)*bachTime(批次时间,单位是s)