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重分区,增加并行度处理.
kafka笔记



