← 返回首页
Kafka 如何保证消息不丢失?
需要从三个阶段分别保证:
生产端 (Producer):
设置 acks=all(确保所有副本写入)。
设置 retries 为较大值(如 Integer.MAX_VALUE),并配合 max.in.flight.requests.per.connection=1(防止重试导致乱序,若需保序)。
捕获发送异常的回调逻辑。
Broker 端 (存储):
设置 replication.factor >= 3(多副本)。
设置 min.insync.replicas > 1(确保至少有 2 个副本同步成功,配合 acks=all 防止单点故障)。
禁用 unclean.leader.election.enable(禁止非 ISR 副本选举为 Leader,防止数据回滚丢失)。
消费端 (Consumer):
关闭自动提交 offset (enable.auto.commit=false)。
在业务逻辑处理成功后,手动提交 offset。
保证消费的幂等性(防止重复消费导致的数据不一致,虽然这是防重复,但也间接保证了“不丢失”后的正确性)。