Kafka是大型架构核心,下面我详解Kafka消息不丢失方案@mikechen
生产端:防止消息发送丢失

同步发送、或合理配置重试:使用同步发送或在异步发送时配置重试次数(retries)。
与幂等性,避免因瞬时网络或故障导致发送失败且重复不可控。
启用幂等生产者,比如:enable.idempotence=true。
防止由于重试造成的重复消息,保证在Leader换手或重试场景下每条消息仅写入一次。
要求ACK级别:将acks设置为all(或 -1),确保消息在Leader与所有ISR(in-sync replicas)。
确认后才被认为发送成功,降低因Leader故障导致的数据丢失风险。
Broker端:防止消息存储丢失

配置副本因子(replication.factor)大于1。
保证每个分区在多个Broker上存在副本,单点故障不会丢失数据,生产环境通常选择≥3的副本数。
保持副本同步(ISR)稳定:调整min.insync.replicas以要求在写入时。
至少有指定数量的副本在线并同步,从而在Leader故障时仍能保证可用数据副本存在。
合理设置日志刷盘策略:调整flush或通过配置确保数据持久化到磁盘。
例如:控制log.flush相关参数。
或使用操作系统与文件系统层面的同步策略),避免仅驻留在内存导致断电时丢失。
运维与架构保障

多数据中心与跨集群复制:使用MirrorMaker。
或更高级的跨集群复制方案,将数据复制到异地集群、以防单地域灾难导致数据丢失。
完整监控与告警:监控ISR、滞后(lag)、未同步副本。
磁盘使用、控制器状态等指标,及时发现并处理副本掉队或Broker故障,降低丢失风险。
定期备份与快照策略:对关键主题或业务数据定期导出备份,必要时可回溯恢复历史数据。
