当前位置: 首页 > news >正文

Kafka 如何保证消息可靠性?

Kafka 保证消息可靠性主要通过以下几个机制来实现,从生产者到消费者的整个链路上都设计了相应的保障措施:

1. 生产者(Producer)端的可靠性

✅ a. acks 参数(确认机制)

  • acks=0:生产者不等待任何来自服务器的确认,有可能丢消息。
  • acks=1:只要 leader 分区副本写入成功就确认,副本挂掉可能丢数据。
  • acks=all(或 -1):所有副本都成功写入才返回确认,最可靠但延迟稍高。

✅ b. 重试机制(retries + retry.backoff.ms)

  • 网络异常或临时失败时,自动重试发送消息。
  • 默认开启 retries,但要配合幂等性使用避免重复消息。

✅ c. 幂等性(idempotence)

  • 开启 enable.idempotence=true 后,Kafka 会自动分配唯一 Producer ID,确保 即使重试也不会重复写入消息

2. Kafka 服务端(Broker)端的可靠性

✅ a. 消息持久化

  • Kafka 会将消息先写入 页缓存(page cache),然后定期刷新到磁盘(可配置)。
  • 你可以配置 log.flush.interval.messageslog.flush.interval.ms 控制刷盘频率。

✅ b. 副本机制(Replication)

  • 每个 Topic 的 Partition 可以设置多个副本(replication factor)。
  • 一个 Partition 有一个 leader 和多个 follower,follower 会实时同步 leader 数据。

✅ c. ISR(In-Sync Replicas)机制

  • 只有在 ISR 列表中的 follower 副本 才算同步成功,acks=all 依赖这个。
  • leader 崩溃后,会从 ISR 中选一个新的 leader,确保数据不会丢失。

3. 消费者(Consumer)端的可靠性

✅ a. 自动 or 手动提交 offset

  • 默认是 enable.auto.commit=true,定期自动提交 offset(可能重复消费)。
  • 更可靠的方式是 手动提交 offset,只有在消息处理成功后才提交,防止消息丢失。

✅ b. 消费幂等性

  • 消费者要注意幂等处理(比如写数据库要避免重复插入)。
  • 通常结合 offset 存储(如:Kafka、数据库、外部存储)来做到“恰好一次”处理。

总结

环节机制说明
生产者acks=all、幂等性确保消息至少被一个副本持久化且不重复写入
Broker副本机制、ISR、持久化消息不因节点宕机而丢失
消费者手动提交 offset、幂等消费逻辑消费不丢、不重复

如果想实现更高级的“Exactly Once(恰好一次)语义”,Kafka 从 0.11 版本开始支持 事务机制(transactions),但需要搭配幂等生产者 + 手动控制 offset + 支持事务的下游系统(如支持事务的数据库)。

http://www.dtcms.com/a/112803.html

相关文章:

  • K8s的BackUP备份
  • 理解OSPF 特殊区域NSSA和各类LSA特点
  • [c语言日寄]预处理命令详解
  • 树欲静而风不停
  • 无人机飞行术语科普!
  • 第九课:LoRA模型的原理及应用
  • Vue中权限控制的方案
  • Ruoyi-vue plus 5.2.2 flowble设计流程点击开始流程图错误
  • 多功能指示牌的主要功能有哪些?
  • 蓝桥云客--插入数字
  • JVM虚拟机篇(一)深入理解JVM:组成部分、运行流程及程序计数器详解
  • JVM虚拟机篇(三):JVM运行时数据区与方法区详解
  • C++——this关键字
  • 基于SpringBoot + Vue3的仓库(WMS)/进销存/ERP管理系统
  • 【双维畅聊】网页版聊天室测试报告
  • TC3xx芯片的UCB介绍
  • Photoshop 快捷键指南
  • springboot457-库存管理系统(源码+数据库+纯前后端分离+部署讲解等)
  • 谷歌开源单个 GPU 可运行的Gemma 3 模型,27B 超越 671B 参数的 DeepSeek
  • 在js中数组相关用法讲解
  • Git for Windows 历史版本下载教程
  • 单词排序(信息学奥赛一本通-1185)
  • 架构思维:查询分离 - 表数据量大查询缓慢的优化方案
  • 2025大唐杯仿真1——车联网
  • mysql 8.0.27-docker
  • 第二章 react redux的学习,多个reducer
  • 什么是DHCP服务,在生活中的应用是什么?
  • 使用QAction编辑器添加QAction到ui里
  • 【数字电路】第一章 数制和码制
  • Kotlin 集合函数:map 和 first 的使用场景