09 kafka消息丢失的场景及解决方案

vvEcho 2025-03-06 14:47:07
Categories: Tags:

kafka消息丢失的场景主要在生产端,broker端,消费端

生产端消息丢失

producer默认采用异步的方式发送消息,如果未收到ACK时,producer宕机则消息丢失;

解决办法:可以改成同步发生,ack=all,保证消息不丢失;根据失败重试机制配置失败重试次数,自动重试发送失败的消息;

broker端消息丢失

broker默认采用的是异步刷盘,若机器宕机,页缓存未落盘则消息丢失

副本中leader写入消息后,follower还未同步完宕机则消息丢失

解决办法:改成同步刷盘或者调小异步刷盘的时间间隔
修改副本因子,保证副本数大于3,且最小同步副本数为2;(代表消息最少需要写入leader和1个副本才生效)

消费端消息丢失

其实消息到达消费端后就不算消息丢失,但是消息的本质作用是为了通知后续的业务逻辑,如果业务逻辑处理失败,但是偏移量提交了;说明消息并没有起作用,这种情况我们也算消息丢失

解决办法,禁用自动提交偏移量,改成手动提交;这里还有个问题是重复消费,就是消费者业务逻辑处理完后,提交偏移量前崩溃,导致重启后重复消费;消费端需幂等幂等性处理,保证消息不重复消费