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