1.consumer导致kafka积压了大量消息
方法:
1.增大partion数量,
2.消费者加了并发,服务, 扩大消费线程
3.增加消费组服务数量
4.kafka单机升级成了集群
5.避免消费者消费消息时间过长,导致超时
6.使Kafka分区之间的数据均匀分布
场景:
1.如果是Kafka消费能力不足,则可以考虑增加 topic 的 partition 的个数,
同时提升消费者组的消费者数量,消费数 = 分区数 (二者缺一不可)
2.若是下游数据处理不及时,则提高每批次拉取的数量。批次拉取数量过少
(拉取数据/处理时间 < 生产速度),使处理的数据小于生产的数据,也会造成数据积压。
2.消息过期失效
产生消息堆积,消费不及时,kafka数据有过期时间,一些数据就丢失了,主要是消费不及时
经验
1.消费kafka消息时,应该尽量减少每次消费时间,可通过减少调用三方接口、读库等操作,
从而减少消息堆积的可能性。
2.如果消息来不及消费,可以先存在数据库中,然后逐条消费
(还可以保存消费记录,方便定位问题)
3.每次接受kafka消息时,先打印出日志,包括消息产生的时间戳。
4.kafka消息保留时间(修改kafka配置文件, 默认一周)
5.任务启动从上次提交offset处开始消费处理
3.综上使用kafka注意事项
1.由于Kafka消息key设置,在Kafka producer处,给key加随机后缀,使其均衡
2.数据量很大,合理的增加Kafka分区数是关键。
Kafka分区数是Kafka并行度调优的最小单元,如果Kafka分区数设置的太少,
会影响Kafka consumer消费的吞吐量. 如果利用的是Spark流和Kafka direct approach方式,
也可以对KafkaRDD进行repartition重分区,增加并行度处理。