Kafka-ACK机制(ack应答原理、冥等性、事务)

Kafka-ACK机制

在这里插入图片描述

Kafka中的ACK(Acknowledgement)机制是用于保证消息可靠传递的关键组件之一。在生产者发送消息到Kafka集群时,ACK机制决定了何时认为消息已经成功发送。这个机制非常重要,因为它影响了生产者对消息发送的信心以及消费者对消息接收的可靠性。

1.消息发送阶段:

  • 生产者将消息发送到Kafka集群的一个主题(Topic)中的特定分区(Partition)。
  • 在发送消息时,生产者可以指定ACK的级别,以决定何时认为消息已经成功发送。这个级别通常由acks参数控制。

2.ACK级别:

acks=0

  • 生产者不会等待来自服务端的任何确认。
  • 消息被立即视为已发送,这意味着生产者不会等待任何确认,这是最轻量级的ACK级别,但也是最不可靠的。

acks=1

  • 生产者会在消息被领导者(Leader)接收后收到来自领导者的确认。
  • 一旦领导者收到消息,就会立即向生产者发送确认,然后生产者就认为消息已经成功发送。
  • 这种设置提供了一定程度的可靠性,因为只有领导者确认了消息,但是如果领导者接收消息后立即失效,消息可能会丢失。

acks=-1

  • 生产者会等待Leader和在ISR中的所有副本都收到消息后的确认。
  • 这种设置提供了最高级别的可靠性,因为只有所有ISR中的副本都收到消息,才会发送确认。
  • ISR(In-Sync Replicas):ISR 是指与 Leader 副本保持同步的 Followers 副本集合。
  • 这意味着即使领导者失效,ISR中的其他副本也会确保消息被复制到足够多的地方,从而保证消息不会丢失。

3.生产者处理ACK:

  • 生产者在发送消息后可以根据ACK的级别来决定下一步的操作。
  • 如果ACK级别是acks=0,生产者不会等待确认,继续发送下一条消息。
  • 如果ACK级别是acks=1,生产者会等待领导者的确认,然后继续发送下一条消息。
  • 如果ACK级别是acks=-1,生产者会等待ISR中的所有副本都确认收到消息,然后继续发送下一条消息。

4.消费者处理ACK:

  • 消费者通常会根据消息的ACK级别来决定消息何时被认为已经成功消费。
  • 如果ACK级别是acks=0,消费者可能无法确定消息是否已经成功发送,因为生产者不会等待确认。
  • 如果ACK级别是acks=1或acks=-1,消费者可以相对可靠地知道消息是否已经成功发送,并且可以在需要时请求重试或者处理失败。

5.数据可靠性分析

(1)ACK = 0

在这里插入图片描述

(2)ACK =1

在这里插入图片描述

(3)ACK=-1

在这里插入图片描述

Tips:

Leader收到数据,所有Follower都开始同步数据但有一个Follower,因为某种故障,迟迟不能与Leader进行同步,那这个问题怎么解决呢?

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

数据可靠性总结:

  • acks=0:生产者发送过来数据就不管了,可靠性差,效率高;
  • acks=1:生产者发送过来数据Leader应答,可靠性中等,效率中等
  • acks=-1,生产者发送过来数据Leader和ISR队列里面所有Follwer应答,可靠性高,效率低:
  • 在生产环境中,acks=0很少使用:acks=1,一般用于传输普通日志,允许丢个别数据:acks=-1,一般用于传输和钱相关的数据对可靠性要求比较高的场景。

6.数据重复分析

在这里插入图片描述
在这里插入图片描述


冥等性

  • 冥等性是指无论消息被发送多少次,结果都是相同的特性。
  • Kafka中,冥等性确保生产者发送的消息不会因为网络问题、重试或其他原因而导致重复消息的发送。这种特性对于保证消息传递的可靠性至关重要。
  • 冥等性的实现:在Kafka中,生产者可以通过设置enable.idempotence=true来启用冥等性。
  • 当冥等性启用时,生产者会在消息上添加一个唯一的ID,并且记录已经发送的消息ID,以便在发生重试时避免重复发送相同的消息。
  • 与ACK机制的关系:冥等性通常与ACK机制结合使用,以确保消息发送的幂等性。
  • 即使在需要重试时,生产者也可以确保消息不会重复发送。
  • 在ACK级别为acks=-1时,冥等性特别有用,因为它确保了消息只有在所有ISR副本都确认接收后才会被提交,避免了重复消息的可能性。
    在这里插入图片描述

事务

Kafka的事务机制允许生产者发送一组相关的消息,并确保这组消息要么全部成功提交,要么全部回滚,从而实现消息传递的原子性。

  • 0.11版本的Kafka同时引入了事务的特性,为了实现跨分区跨会话的事务,需要引入一个全局唯一的Transaction ID,并将Producer获得的PID和Transaction ID绑定。
  • 这样当Producer重启后就可以通过正在进行的Transaction ID获得原来的PID。

Kafka事务具有以下特性:

  • 原子性(Atomicity):事务要么全部成功提交,要么全部回滚,不会出现部分提交的情况。
  • 一致性(Consistency):事务在提交前可以确保消息的一致性,即所有消息都符合应用程序的预期状态。
  • 隔离性(Isolation):事务之间相互隔离,互不影响。
  • 持久性(Durability):已经提交的事务保证不会丢失。

事务的实现:

  • 为了管理Transaction,Kafka引入了一个新的组件Transaction Coordinator
  • Producer就是通过和Transaction Coordinator交互获得Transaction ID对应的任务状态。
  • Transaction Coordinator还负责将事务所有写入Kafka的一个内部Topic,这样即使整个服务重启,由于事务状态得到保存,进行中的事务状态可以得到恢复,从而继续进行。

与ACK机制的关系:

  • 事务机制通常与ACK机制相结合,以确保消息传递的可靠性和一致性。
  • 在事务中,生产者可以设置ACK级别来决定何时提交事务,以及如何处理提交失败的情况。例如,在acks=-1的情况下,生产者可以确保事务中的所有消息都已经被ISR中的所有副本接收,从而保证事务的原子性和持久性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/634863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

fork 与 vfork 的区别

关键区别一: vfork 直接使用父进程存储空间,不拷贝。 关键区别二: vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行。 我们可以定义一个cnt,在子进程中让它变成3, 如果使用fork,那…

uniapp中使用 iconfont字体

下载 iconfont 字体文件 打开 iconfont.css 文件,修改一下 把文件 复制到 static/iconfont/… 目录下 在App.vue中引入iconfont 5. 使用iconfont 使用 iconfont 有两种方式, 一种是 class 方式, 一种是使用 unicode 的方式 5.1 使用 class 的…

firewalld

一、Firewalld概述 Firewalld 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具 支持IPV4、IPV6防火墙设置以及以太网桥 支持服务或应用程序直接添加防火墙规则接口 拥有两种配置模式 运行时配置 永久配置 二、Firewalld和iptables的关系 netfilter 位于L…

4. Java多线程面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 为什么要使用并发编程 充分利用多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升方便进行业务拆分,提升系统并发能力和性能:在特殊的业务场景下&#…

微服务架构-数据共享设计模式

微服务架构-数据共享设计模式 每个微服务拥有自己的数据库,可以独立地进行数据库架构设计、部署和维护。这种是属于常规的方式,不受其他微服务的影响,具有高度的自治性。 然而,在将单体应用拆分成微服务时,可能会遇到…

Stable Diffusion简单食用方法

1.下载 1.1打开B站 哔哩哔哩 (゜-゜)つロ 干杯~-bilibili哔哩哔哩(bilibili.com)是国内知名的视频弹幕网站,这里有及时的动漫新番,活跃的ACG氛围,有创意的Up主。大家可以在这里找到许多欢乐。https://www.bilibili.com/ 1.2搜索…

纯血鸿蒙APP实战开发——边缓存边播放案例

介绍 OhosVideoCache是一个支持边播放边缓存的库,只需要将音视频的url传递给OhosVideoCache处理之后再设置给播放器, OhosVideoCache就可以一边下载音视频数据并保存在本地,一边读取本地缓存返回给播放器,使用者无需进行其他操作…

低耦合双写一致性方案-使用canal+MQ

需求:继上一篇使用xxljob实现数据的全量同步到es后,当数据库中新增、删除、修改数据时,应该对es中的对应索引库实现增量同步。 本文介绍了2种双写一致性方案,对其中使用MQ的方案进行了实现。 1. 方案设计 1.1 数据一致性问题分析…

vue 点击复制文本到剪贴板

一、首先在vue文件的template中定义复制按钮 <div size"small" v-if"item.prop jadeCode" class"cell-container"><span>{{ scope.row.jadeCode }}</span> <button click"handleCopy(scope.row.jadeCode)" clas…

js——数据操作——实现阶梯价格排序——基础积累

最近在写网络报价的时候&#xff0c;遇到一个需求&#xff0c;就是要根据采购数量&#xff0c;找到符合数量的阶梯区间&#xff0c;并找到最便宜的采购价格。 比如下面&#xff1a; let originViewList [{id:1,incrementalQuantity:10,priceList:[{minQuantity:1,price:20},…

el-upload上传图片,视频可获取视频时长。

对element-ui组件的upload组件再一次封装&#xff0c;简单记录。下面是效果图。 注意点&#xff1a;该组件现在仅支持单图和单个视频上传。 <template><div :style"myStyle"><divclass"uploads":style"{width: upWith px,height: up…

零门槛微调大模型:基于 Ludwig 低代码框架使用 LoRA 技术微调实践

一、Ludwig 介绍 自然语言处理 (NLP) 和人工智能 (AI) 的飞速发展催生了许多强大的模型&#xff0c;它们能够理解和生成如同人类般的文本&#xff0c;为聊天机器人、文档摘要等应用领域带来了革命性的改变。然而&#xff0c;释放这些模型的全部潜力需要针对特定用例进行微调。…

我用通义千问做了个银从初级法规考试答题AI助手

我用通义千问做了个银从初级法规考试答题AI助手 起因方法&#xff1a;创建方法&#xff1a;微调成果展示 起因 多选考试实在太难了&#xff0c;惨不忍睹的正确率&#xff0c;博主我就想有一个专门刷多选的工具&#xff0c;但找了半天没找到。然后就想到用通义试试&#xff0c;…

MySQL 服务无法启动

常见原因: 检查端口占用&#xff1a; 使用命令行工具&#xff08;如netstat&#xff09;来检查3306端口是否已被其他程序占用,输入netstat -ano&#xff08;Windows&#xff09;或netstat -tulnp | grep 3306&#xff08;Linux/Mac&#xff09;来查找3306端口的占用情况。如果…

excel转pdf并且加水印,利用ByteArrayOutputStream内存流不产生中间文件

首先先引入包&#xff1a;加水印和excel转PDF的 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.12</version></dependency><dependency><groupId>org.apache.poi&l…

【Numpy】深入解析numpy.diag()函数

numpy.diag()&#xff1a;深入探索NumPy库中的对角矩阵操作 &#x1f308; 欢迎莅临我的个人主页&#x1f448;这里是我深耕Python编程、机器学习和自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;并乐于分享知识与经验的小天地&#xff01;&#x1f387; &#x1f3…

统计绘图:基于matplotlib包绘制双轴图

本文介绍通过 Python的matplotlib包 绘制 双轴图&#xff08;Dual Y-Axis Plot&#xff09;&#xff0c;即双 y 轴图&#xff0c;又称双纵坐标图。 这类图表的主要用途是显示两个具有不同数值范围的变量在同一 x 轴上的 变化趋势&#xff0c;从而便于比较和分析。&#xff08;…

docker中安装jenkins,并在node和cloud上跑通基于源码控制SCM的pipeline

目录 一、摘要 二、部署和使用 1. docker部署jenkins 1.1 准备数据目录 1.2 拉取jenkins镜像并启动 1.3 初始化配置 1.3.1 登录容器查看初始化密码 1.3.2 访问jenkins并输入初始化密码 1.3.3 创建管理员账户 1.3.4 初始化完成 2. jenkins使用之多分支流水线 2.1 准…

大模型落地竞逐,云计算大厂“百舸争流”

作者 | 辰纹 来源 | 洞见新研社 从ChatGPT到Sora&#xff0c;从图文到视频&#xff0c;从通用大模型到垂直大模型……经过了1年多时间的探索&#xff0c;大模型进入到以落地为先的第二阶段。 行业的躁动与资本的狂热相交汇&#xff0c;既造就了信仰派的脚踏实地&#xff0c;也…

适用于当下的红色系统可视化大屏,大量图。

特定场合下使用红色系可视化大屏是可以的&#xff0c;但是千万要注意时间和场合&#xff0c;平时最好别用。