Kafka 无消息丢失最佳实战

  1. 不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一
    定要使用带有回调通知的 send 方法。
  2. 设置 acks = all。acks 是 Producer 的一个参数,代表了你对"已提交"消息的定义。
    如果设置成 all,则表明所有副本 Broker 都要接收到消息,该消息才算是"已提交"。
    这是最高等级的"已提交"定义。
  3. 设置 retries 为一个较大的值。这里的 retries 同样是 Producer 的参数,对应前面提到
    的 Producer 自动重试。当出现网络的瞬时抖动时,消息发送可能会失败,此时配置了 retries > 0 的 Producer 能够自动重试消息发送,避免消息丢失。
  4. 设置 unclean.leader.election.enable = false。这是 Broker 端的参数,它控制的是哪
    些 Broker 有资格竞选分区的 Leader。如果一个 Broker 落后原先的 Leader 太多,那么
    它一旦成为新的 Leader,必然会造成消息的丢失。故一般都要将该参数设置成 false,
    即不允许这种情况的发生。
  5. 设置 replication.factor >= 3。这也是 Broker 端的参数。其实这里想表述的是,最好将
    消息多保存几份,毕竟目前防止消息丢失的主要机制就是冗余。
  6. 设置 min.insync.replicas > 1。这依然是 Broker 端参数,控制的是消息至少要被写入
    到多少个副本才算是"已提交"。设置成大于 1 可以提升消息持久性。在实际环境中千
    万不要使用默认值 1。
  7. 确保 replication.factor > min.insync.replicas。如果两者相等,那么只要有一个副本挂
    机,整个分区就无法正常工作了。我们不仅要改善消息的持久性,防止数据丢失,还要
    在不降低可用性的基础上完成。推荐设置成 replication.factor = min.insync.replicas +
    1。
  8. 确保消息消费完成再提交。Consumer 端有个参数 enable.auto.commit,最好把它设
    置成 false,并采用手动提交位移的方式。就像前面说的,这对于单 Consumer 多线程
    处理的场景而言是至关重要的。

系列阅读

  1. 设计模式与技术组件
  2. 电商系统的分布式事务调优
  3. 如何设计安全的开放接口
相关推荐
盛世宏博智慧档案1 小时前
全国100个分布式机房环境温湿度智能监测系统建设方案
分布式·机房·温湿度
六bring个六2 小时前
分布式设备连接对端失败问题分析
分布式·分布式软总线
天涯明月19938 小时前
ray深度研究报告
大数据·人工智能·分布式·ray
海兰8 小时前
【Kafka进阶4】KRaft 完全指南:Apache Kafka 摆脱 ZooKeeper 的架构
zookeeper·kafka·apache
Rain的Java大神之路18 小时前
介绍一下分布式事务
java·分布式·后端·spring·spring cloud·架构·springcloud
大菠萝爱上小西瓜1 天前
【大数据实战】Spark 2.2.2 完全分布式集群搭建
大数据·分布式·spark
肠畔码农1 天前
深度解析 RocketMQ 消费端限流与重平衡(Rebalance):分布式队列分配与流控防雪崩本质
分布式·rocketmq
海兰1 天前
【 Kafka进阶3】Apache Kafka 分布式事件流平台:架构原理与微服务解耦机制简要分析
分布式·架构·kafka
小白一枚131 天前
[学习笔记]Kafka 篇:从原理到实战的一站式指南
大数据·运维·elk·kafka·个人开发
阿里云云原生2 天前
还在给 AI “喂冷饭”?8.28 上海沙龙:带你跨越 AI 实时上下文鸿沟
云原生·kafka