kafka防止消息丢失配置

无消息丢失最佳实践配置:

  1. 不要使用 producer.send(msg),而要使用 producer.send(msg, callback) API。
  2. 设置 acks = all。是 Producer 参数。设置成 all,表明所有副本 Broker 都要接收到消息,g该消息才算是"已提交"。
  3. 设置 retries 为一个较大的值。是 Producer 的参数,表示Producer自动重试。当出现网络的瞬时抖动时,消息发送可能会失败,此时配置了 retries > 0 Producer能够自动重试消息发送,避免消息丢失。
  4. 设置 unclean.leader.election.enable = false。这是 Broker 端的参数,它控制的是哪些 Broker 有资格竞选分区的 Leader。如果一个 Broker 落后原先的 Leader 太多,那么它一旦成为新的 Leader,必然会造成消息的丢失。故一般都要将该参数设置成 false,即不允许这种情况的发生。
  5. 设置 replication.factor >= 3Broker 端的参数。分区副本数量,目前防止消息丢失的主要机制就是冗余。
  6. 设置 min.insync.replicas > 1Broker 端参数,表示消息至少要被写入到多少个副本才算是"已提交"。设置成大于 1 可以提升消息持久性。在实际环境中不要使用默认值 1。
  7. 确保 replication.factor > min.insync.replicas。如果两者相等,那么只要有一个副本挂机,整个分区就无法正常工作。不仅要改善消息的持久性,防止数据丢失,还要能保证可用性。推荐设置
    replication.factor = min.insync.replicas +1
  8. 确保消息消费完成再提交。Consumer 端有个参数 enable.auto.commit,最好把它设置成 false,并采用手动提交位移的方式。就像前面说的,这对于单 Consumer 多线程处理的场景而言是至关重要的。
相关推荐
黄名富9 小时前
Kafka 日志存储 — 日志索引
java·分布式·微服务·kafka
DM很小众10 小时前
Kafka 和 MQ 的区别
分布式·kafka
weisian15117 小时前
消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)
分布式·kafka
m0_748236831 天前
SpringBoot 整合 Avro 与 Kafka
spring boot·kafka·linq
筑梦之路1 天前
kafka学习笔记7 性能测试 —— 筑梦之路
笔记·学习·kafka
线程A1 天前
Kafka 源码分析(一) 日志段
分布式·kafka
筑梦之路2 天前
kafka学习笔记1 —— 筑梦之路
笔记·学习·kafka
筑梦之路2 天前
kafka学习笔记5 PLAIN认证——筑梦之路
笔记·学习·kafka
筑梦之路2 天前
kafka学习笔记2 —— 筑梦之路
笔记·学习·kafka
筑梦之路2 天前
kafka 学习笔记3-传统部署Kraft模式集群——筑梦之路
笔记·学习·kafka