Kafka 消息不丢失

Kafka 要保证消息不会丢失,需要在producer、broker、consumer共同保证消息不丢失

一、producer生产者配置

  • producer端使用producer.send(msg,callback) 带有回调 send 的方法,而不是producer.send(msg)方法,根据callback 回调,一旦消息提交失败,就可以针对性的补偿处理。
  • 设置ack=all,表面所有的broker上的副本都已经落盘成功了,才算是“已提交”
  • retries >1自动重试的次数,当出现网络问题时,消息可能会发送失败,配置了retries 能够自动重试,尽量避免消息丢失。最严谨的方式是失败的消失日志记录或者入库,然后定时重发。

二、Broker配置

  • unclean.leader.election.enable =false,禁止ISR之外的副本参与选举,否则就有可能丢丢失消息
  • replication-factor >=3,需要三个以上的副本
  • min.insync.replicas>1,broker端的参数,至少写入多少个ISR中副本才算是“已提交”,大于1 可以提升消息的持久性,推荐设置replication-factor=min.insync.replicas+1

三、consumer消费者配置

  • 确保消息已经消费完成在提交
  • enable.auto.commit 设置成false,并自己来处理offset的提交更新

四、总结

  • producer,保证发送成功,需要broker ack
  • broker, 保证持久化落盘成功
  • consumer, 保证消费成功,手动commit

当然整个过因为网络等问题,导致的重复发送或者重复消费,这个就需要看具体的业务,是否需要幂等的操作。

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐