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

Kafka生产者ACK参数与同步复制

目录

生产者的ACK参数

ack等于0

ack等于1(默认)

ack等于-1或all

Kafka的同步复制

使用误区


生产者的ACK参数

Kafka的ack机制可以保证生产者发送的消息被broker接收成功。

Kafka producer有三种ack机制 ,分别是 0,1,-1。这个配置可以在初始化producer时在config中进行配置。默认值是1。

ack等于0

producer不等待broker同步完成的确认,只要发送一次消息后就不再发送了,不管是否发送成功。这种方式延迟最低,但是持久性也最差,当服务器发生故障时,就很可能发生数据丢失。

例如leader已经宕机了,但producer还会继续发送消息,broker接收不到数据就会数据丢失。

ack等于1(默认)

producer只要收到一个分区副本成功写入的通知就认为推送消息成功了,这一个副本就是Leader。

当集群中Partition的Leader发生宕机时,此时由于follwer可能尚未同步到消息,数据可能就丢失了。此选项提供了较好的持久性较低的延迟性,实现了吞吐量和消息可靠性的平衡。

ack等于-1或all

这个值意味着开启同步复制机制后,你ISR列表里面的所有副本必须都要同步成功才会反馈给生产者这条消息发送成功了。

Kafka的同步复制

之前Kafka的Replication策略和ISR同步机制 已经写过关于同步复制的实现机制,本文再次提及是因为在实际使用场景下,kafka的生产者ack参数其实与同步复制的相关配置是相互配合才能起到真正的作用。

min.insync.replicas

min.insync.replicas这个参数指定了一个写操作被认为是成功时最小的ISR副本确认数。如不能满足这个条件producer将会触发异常(either NotEnoughReplicas or NotEnoughReplicasAfterAppend)。

当开启同步复制且生产者ACK参数设置为-1或all时,在消息发送时只要写入副本数满足了min.insync.replicas的数值即可返回给生产者消息发送成功的通知。

个人理解这个参数其实是用来平衡kafka集群的数据安全性和吞吐量的,以及可用性。min.insync.replicas配置控制的是同步复制ISR副本的下限,要使用同步复制机制需要合理配置min.insync.replicas的值,在此基础上kafka服务端可以实现同步复制并发挥其作用,但是生产者最终到底能不能把一条消息发送成功取决于生产者的acks参数配置。

场景举例:

topic中ISR副本数为4,min.insync.replicas设置为2,生产者ack设置为-1,当生产者发送消息时满足leader节点写入成功且另外3个ISR其中一个写入完成后即可完成消息发送成功的响应,无需等待全量ISR都写入完成。

使用误区

min.insync.replicas配置的默认值是1,这种情况并没有同步复制机制的作用。因为leader本身也是一个副本,所以1这个值表示leader写入成功后即可返回给生产者发送成功的标识。

此时即使生产者ack=all ,结果也是等同于ack=1的情况,即producer只要收到一个分区副本成功写入的通知就认为推送消息成功了,这一个副本就是Leader。


http://www.kler.cn/a/518295.html

相关文章:

  • 系统思考—问题分析
  • 在Qt中实现点击一个界面上的按钮弹窗到另一个界面
  • Java 大视界 -- Java 大数据中的隐私增强技术全景解析(64)
  • Linux命令行配置网络代理
  • TCP 三次握手四次挥手
  • 【软件测试项目实战 】淘宝网:商品购买功能测试
  • 简洁明了:介绍大模型的基本概念(大模型和小模型、模型分类、发展历程、泛化和微调)
  • 人工智能丨视觉识别在自动化测试中的应用
  • npm link 作用
  • 如何理解 Web3 背后的技术:区块链与去中心化存储
  • PHP异步非阻塞MySQL客户端连接池
  • 1. 小众但非常实用的 CSS 属性
  • 69.在 Vue 3 中使用 OpenLayers 拖拽实现放大区域的效果(DragPan)
  • 如何使用phpStudy在Windows系统部署静态站点并实现无公网IP远程访问
  • 2025年美赛C题:奥运奖牌榜模型 解析及Python代码实现
  • 【xcode 16.2】升级xcode后mac端flutter版的sentry报错
  • Arduino大师练成手册 -- 读取红外接收数据
  • 国产编辑器EverEdit - 命令窗口应用详解
  • WPF实战案例 | C# WPF实现计算器源码
  • Vue中设置报错页面和“Uncaught runtime errors”弹窗关闭
  • 高级java每日一道面试题-2025年01月24日-框架篇[SpringMVC篇]-SpringMVC常用的注解有哪些?
  • cursor远程调试Ubuntu以及打开Ubuntu里面的项目
  • ray.rllib 入门实践-4: 构建算法
  • debian12使用kvm安装windows系统
  • solidity基础 -- 事件
  • 如何用数据编织、数据虚拟化与SQL-on-Hadoop打造实时、可扩展兼容的数据仓库?