怎么确保消息 100% 不丢失

到这里,总结下:

  1. 生产端:

  • 设置重试:props.put("retries", "10");

  • 设置 acks=all

  • 设置回调:producer.send(msg, new CallBack(){...});

  1. Broker:

  • 内存:使用带蓄电池后备电源的缓存 cache

  • Kafka 版本 0.11.x 以上:支持 Epoch 机制。

  • replication.factor >= 3 副本数至少有 3 个。

  • min.insync.replicas > 1 代表消息至少写入 2个副本才算发送成功。前提需要 acks=-1

  • unclean.leader.election.enable=false 防止不在 ISR 中的 Follower 被选举为 Leader

  1. 消费端

  • 客户端版本升级至 0.10.2 以上版本。

  • 取消自动提交 auto.commit = false,改为手动 ack

  • 尽量提高客户端的消费速度,消费逻辑另起线程进行处理。


点赞(241)

评论列表共有 0 条评论

立即
投稿
返回
顶部