Kafka是大型架构核心,下面我详解Kafka消息不丢失方案@mikechen
生产端:防止消息发送丢失
在分布式消息系统中,消息可靠性是核心需求。
Kafka 通过生产端、Broker 与消费端三层协同配合,提供多种机制以降低或消除消息丢失风险。

首先,生产端,同步确认与重试。
使用同步发送或开启acks 参数(acks=all),确保消息在所有副本确认后才认为发送成功。
同时启用重试机制(retries>0),以应对短暂网络或Leader切换导致的失败。
以及,启用幂等生产者(enable.idempotence=true)避免因重试导致的重复消息。
Broker端:防止消息存储丢失
副本与ISR(In-Sync Replicas),配置副本数(replication.factor ≥ 2 或 3)。
并确保 min.insync.replicas 设置合理,以在Leader故障时仍能保证可用且不丢失已提交消息。

领导者选举与数据同步:监控Leader与副本同步状态,避免频繁的Leader切换。
调整 replica.lag.timeout.ms 与 flush 策略以减少未同步副本带来的风险。
消费端:防止消息消费丢失
在消费端与下游系统交互时设计幂等操作,或利用外部事务/去重机制。
防止因重试导致的重复处理,或在失败时丢失已经消费但未成功写入下游的消息。

以及,消费容错与重试。
实现本地或集中化的重试队列、死信队列(DLQ)。
以便将处理失败的消息隔离并后续人工或自动补偿,而不是直接丢弃。