一、生产者端:确保消息成功发送至Broker
acks=all:要求所有ISR(In-Sync Replicas,与Leader保持同步的副本)都确认接收消息后才视为发送成功,避免Leader宕机导致数据丢失。需配合min.insync.replicas≥2( ISR中最小同步副本数),确保至少有一个Follower副本同步数据。retries参数设置较大重试次数(如3次),应对临时网络抖动或Broker短暂不可用,自动重发失败消息。enable.idempotence=true,Producer会自动为每条消息分配唯一序列号,Broker端去重,避免因重试导致的重复消息。send方法:通过callback函数获取消息发送结果(成功/失败),及时处理失败情况(如记录日志、告警或重试),避免静默丢失。二、Broker端:保障数据持久化与高可用
replication.factor≥2):每个Partition至少有1个Follower副本,Leader故障时自动选举新Leader,确保服务连续性。建议ISR中至少有2个副本(min.insync.replicas≥2),避免单副本故障导致数据丢失。unclean.leader.election.enable=false,禁止从非ISR副本中选举Leader,防止因Follower落后太多导致数据丢失。log.flush.interval.messages(如10000条)和log.flush.interval.ms(如1000ms),平衡性能与可靠性——频繁刷盘会增加延迟,但能减少数据丢失风险(需根据业务需求权衡)。三、消费者端:确保消息正确处理与位移管理
enable.auto.commit=false,在消息处理完成后(如业务逻辑执行成功)手动调用commitSync()提交Offset,避免自动提交导致的“处理未完成但Offset已提交”的丢失问题。my-topic-dlq),后续通过人工介入或自动化脚本分析失败原因并重试,避免因个别消息失败影响整体消费流程。四、系统层:优化Linux环境提升可靠性
noatime选项(禁用访问时间更新),减少不必要的磁盘写操作。vm.swappiness=10(默认60)或更低,减少OOM Killer(Out-of-Memory Killer)频繁终止Kafka进程的风险;增加页缓存大小(通过sysctl -w vm.dirty_ratio=20调整脏页比例),提升磁盘写入效率。net.core.rmem_max=16777216、net.core.wmem_max=16777216)提升网络吞吐量,减少网络延迟。lag),设置阈值告警(如ISR副本数<2时触发告警),及时发现并处理异常。