如何保证Kafka消息不丢失?

Kafka是大型架构核心,下面我详解Kafka消息不丢失方案@mikechen

生产端:防止消息发送丢失

生产端消息丢失的主要原因,是网络抖动或 Broker 故障导致发送失败。

解决方案是通过配置 ACK 确认、重试和幂等性,确保消息被可靠地写入 Broker。

如何保证Kafka消息不丢失?

核心配置acks = all:生产者等待所有同步副本(ISR)确认消息写入后,才视为成功。

这比默认的 acks=1(仅领导者确认)更可靠,但会增加延迟。

enable.idempotence = true:开启幂等生产者。

使用 Producer ID (PID) 和序列号防止重复发送(Kafka 0.11+ 支持)。

 

Broker端:防止消息存储丢失

Broker 端丢失风险,源于磁盘故障或领导者选举失败。

 

如何保证Kafka消息不丢失?

解决方案是通过高可用配置,确保消息在多个 Broker 上持久化和复制。

核心配置replication.factor = 3(或更高):每个分区至少复制 3 个副本。

min.insync.replicas = 2:生产者发送消息时,至少 2 个副本需同步写入(结合 acks=all 使用)。

unclean.leader.election.enable = false:禁用不干净的领导者选举(即非 ISR 副本不能成为领导者),防止数据丢失。

log.retention.hours = 168(默认 7 天):延长日志保留时间,确保消息不被过早删除。

 

消费端:防止消息消费丢失

消费端丢失,常见于重启时偏移量回滚、或异常崩溃。

解决方案是通过手动偏移提交和外部持久化,确保消费进度可靠。

如何保证Kafka消息不丢失?

核心配置enable.auto.commit = false:禁用自动提交偏移量

isolation.level = read_committed:使用事务性读取,确保只消费已提交的消息(exactly-once 语义)。

auto.offset.reset = earliest:首次消费从最早偏移开始,避免遗漏历史消息。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧