Kafka是大型架构核心,下面我详解Kafka消息不丢失方案@mikechen
生产端:防止消息发送丢失
生产端消息丢失的主要原因,是网络抖动或 Broker 故障导致发送失败。
解决方案是通过配置 ACK 确认、重试和幂等性,确保消息被可靠地写入 Broker。

这比默认的 acks=1(仅领导者确认)更可靠,但会增加延迟。
enable.idempotence = true:开启幂等生产者。
使用 Producer ID (PID) 和序列号防止重复发送(Kafka 0.11+ 支持)。
Broker端:防止消息存储丢失
Broker 端丢失风险,源于磁盘故障或领导者选举失败。

解决方案是通过高可用配置,确保消息在多个 Broker 上持久化和复制。
min.insync.replicas = 2:生产者发送消息时,至少 2 个副本需同步写入(结合 acks=all 使用)。
unclean.leader.election.enable = false:禁用不干净的领导者选举(即非 ISR 副本不能成为领导者),防止数据丢失。
log.retention.hours = 168(默认 7 天):延长日志保留时间,确保消息不被过早删除。
消费端:防止消息消费丢失
消费端丢失,常见于重启时偏移量回滚、或异常崩溃。
解决方案是通过手动偏移提交和外部持久化,确保消费进度可靠。

isolation.level = read_committed:使用事务性读取,确保只消费已提交的消息(exactly-once 语义)。
auto.offset.reset = earliest:首次消费从最早偏移开始,避免遗漏历史消息。
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》