kafka的 ack 应答机制

news2024/11/18 3:18:16

目录

一 ack 应答机制

 二 ISR 集合


一 ack 应答机制

 kafka 为用户提供了三种应答级别: all,leader,0

acks :0       

        这一操作提供了一个最低的延迟,partition的leader接收到消息还没有写入磁盘就已经返回ack,当leader故障时有可能丢失数据;

        生产者发送完消息后不会等待到 broker 的任何确认消息,这种方式虽然效率提升但是它的可靠性大大降低;

acks:1(leader)

        partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,尽管 leader 已经落盘成功,但是 follower 的同步进度肯定是低于leader,这时故障,那么将会丢失 follower 还未同步 leader 那部分数据;

        这种模式下,具有一定的可靠性和效率,但是依旧有丢失数据的可能性;

acks:-1(all)

        partition的leader和follower全部落盘成功后才返回ack。但是如果在follower同步完成后,broker发送ack之前,leader发生故障,即选举出新的 leader,新的 leader 将再次落盘一次,那么会造成数据重复;

        这种模式下,效率是最低的,但是数据可靠性则最高

 java api 中相应参数

// 设置acks

properties.put(ProducerConfig.ACKS_CONFIG, "all");

// 重试次数retries,默认是int最大值,2147483647

properties.put(ProducerConfig.RETRIES_CONFIG, 3);

 

 二 ISR 集合

        ISR(in-sync replica) 就是 Kafka 为某个分区维护的一组同步集合,即每个分区都有自己的一个 ISR 集合,处于 ISR 集合中的副本,意味着 follower 副本与 leader 副本保持同步状态,只有处于 ISR 集合中的副本才有资格被选举为 leader。一条 Kafka 消息,只有被 ISR 中的副本都接收到,才被视为“已同步”状态。这跟 zk 的同步机制不一样,zk 只需要超过半数节点写入,就可被视为已写入成功。

        想象如下场景

        如果一个follower因为某种故障迟迟无法与leader 同步,那么如果选择 ack 为 all 的话,leader 要一直等待follower 同步完才发 ack 吗

        显然不是,in-sync replica set (ISR),意为和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给producer发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。Leader发生故障之后,就会从ISR中选举新的leader。

        被踢出 ISR 的 follower 在选举新的 leader 时不被考虑,待该follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等该follower的LEO大于等于该Partition的HW,即follower追上leader之后,就可以重新加入ISR了。

        同样的 leader 故障的话,会从ISR中选出一个新的leader,之后,为保证多个副本之间的数据一致性,其余的follower会先将各自的log文件高于HW的部分截掉,然后从新的leader同步数据。

        LEO:指的是每个副本最大的offset;

        HW:指的是消费者能见到的最大的offset,ISR队列中最小的LEO。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyCharm 远程debug 快速上手

一、方法 1. 配置远程解释器(简单高效,强烈推荐!!!) 要求: 通过 SSH 从本地机器访问远程服务器,使用任何预定义的端口从远程服务器访问本地机器,最好关掉vpn等网络代理服务。 常见…

中通快递一键查询,轻松掌握物流信息

在如今的快速发展的电商时代,快递已成为人们生活中不可或缺的一部分。随着快递业务的繁荣,快递公司也纷纷推出了各种查询方式,方便顾客随时掌握自己包裹的物流信息。在这其中,中通快递无疑是许多人选择的首选。下面,我…

合并两个升序链表,哨兵位的理解

开始时也要判断是否有一个链表本来就是空,如果是,直接返回另外一个链表 代码: struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2){if(list1NULL){return list2;}if(list2NULL){return list1;} struct ListN…

仿互站资源商城平台系统源码多款应用模版

首先安装好环境,推荐用Linux宝塔 请示:安装前请先别开防火墙,和跨站篡改 第1步上传程序到服务器, 第2步修改数据库文件,config/config.php 第3步,导入数据,根目录的数据库文件夹里面 数据.s…

SpringCloud Alibaba-Seata

接上文 SpringCloud Alibaba - Sentinel 1.简介(Seata与分布式事务) Seata官方网址https://seata.io/zh-cn/docs/overview/what-is-seata.html 2.环境搭建 首先对之前的图书借阅系统进行升级: 编写对应的服务接口。 (1&#…

操作系统:体系结构

1.内核的划分 1.术语解释 时钟管理:利用时钟断实现计时功能。原语是一种特殊的程序,具有原子性。也就是说,这段程序的运行必须一气呵成,不可被“中断”Ubuntu、Centos的开发团队,其主要工作是实现非内核功能,而内核都是用了Linux内核。 内核…

el-table-column默认选中一个复选框和只能单选事件

表格代码 <el-table ref"contractTable" v-loading"loading" :data"contractList" selection-change"contractSelectionChange" style"margin-top: 10%;"><el-table-column type"selection" width"…

【Linux】系统编程线程互斥与同步(C++)

目录 【1】线程互斥 【1.1】进程线程间的互斥相关背景概念 【1.2】互斥量mutex 【1.3】互斥量实现原理探究 【1.4】RAII的加锁风格 【2】可重入VS线程安全 【2.1】概念 【2.2】常见的线程不安全的情况 【2.3】常见的线程安全的情况 【2.4】常见不可重入的情况 【2.5…

【golang】深入理解GMP调度模型

Goroutine Go中&#xff0c;协程被称为goroutine&#xff0c;它非常轻量&#xff0c;一个goroutine只占几KB&#xff0c;并且这几KB就足够goroutine运行完&#xff0c;这就能在有限的内存空间内支持大量goroutine&#xff0c;支持了更多的并发&#xff0c;虽然一个goroutine的…

基于YOLOv8模型的条形码二维码检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型的条形码二维码检测系统可用于日常生活中检测与定位条形码与二维码目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测…

Ubuntu 12.04增加右键命令:在终端中打开增加打开文件

Ubuntu 12.04增加右键命令&#xff1a;在终端中打开 软件中心&#xff1a;搜索nautilus-open-terminal安装 用快捷键CtrlT打开命令行输入&#xff1a; sudo apt-get install nautilus-open-terminal 重新加载文件管理器 nautilus -q 或注销再登录即要使用

一文弄懂基于采样的路径规划-RRT系列(python代码)

基于采样的路径规划算法-RRT系列 VX关注晓理紫并回复rrt获取代码 [晓理紫] 1、基于采样的路径规划算法 基于抽样的规划方法&#xff08;或称概率方法&#xff09;通过在连续 C 空间中逐步或批量抽样&#xff0c;构建由离散 C 空间样本连接的树或图&#xff0c;从而捕捉解空间的…

飞书应用配置+蓝鲸流水线+jump server

开发者后台创建应用 配置应用基础信息&#xff0c;权限&#xff0c;安全等 管理后台 设置应用在工作台的可见范围和其他设置 Linux 常用命令&#xff1a;Linux 常用命令, ll 文件夹下文件&#xff0c;ls 文件&#xff0c;cd进入目录&#xff0c; cat 查看文件&#xff0c; v…

php反序列化+题

含义&#xff1a; php序列化&#xff08;serialize&#xff09;&#xff1a;是将变量转换为可保存或传输的字符串的过程php反序列化&#xff08;unserialize&#xff09;&#xff1a;就是在适当的时候把这个字符串再转化成原来的变量使用这两个过程结合起来&#xff0c;可以轻…

微信小程序底部安全区域高度获取

CSS 属性 safe-area-inset-bottom safe-area-inset-bottom 就是安全区的高度 padding-bottom:env(safe-area-inset-bottom); wx.getSystemInfoSync() wx.getSystemInfoSync()可以获取系统信息 let system wx.getSystemInfoSync() let bottomSafe system.screenHeight -…

React 全栈体系(十三)

第七章 redux 五、redux 异步编程 1. 理解 redux 默认是不能进行异步处理的,某些时候应用中需要在 redux 中执行异步任务(ajax, 定时器) 2. 使用异步中间件 npm install --save redux-thunk 3. 代码 - 异步 action 版 3.1 store /* src/redux/store.js */ /*** 该文件专…

全景剖析|国产芯(CPU、GPU、SSD、NAND、DRAM)虽有突破,但路还很长

这两天小编看到两个有关国产芯的消息,很有感触,本文小编分享下所思所想,如有不当之处,还望包涵,可以留言指正! 第一个消息是:近日,华为轮值主席 徐直军在2023世界计算大会上,有个国产芯的呼吁,“我们不要抱有幻想,应该坚定不移的打造可持续发展的计算产业生态。从计…

Webpack打包时Bable解决浏览器兼容问题

当我们使用js新特性语法编写代码时&#xff0c;在旧的浏览器中兼容性并不好。但是我们希望能够在旧浏览器中使用这些新特性。 使用babel可以使js新代码转换为js旧代码&#xff0c;增加浏览器的兼容性。 如果我们希望在Webpack中支持babel&#xff0c;则需要在Webpack中引入bab…

【C++】静态成员函数 ( 静态成员函数概念 | 静态成员函数声明 | 静态成员函数访问 | 静态成员函数只能访问静态成员 )

文章目录 一、静态成员函数简介1、静态成员函数概念2、静态成员函数声明3、静态成员函数访问4、静态成员函数只能访问静态成员 二、代码示例 - 静态成员函数 一、静态成员函数简介 1、静态成员函数概念 静态成员函数归属 : 在 C 类中 , 静态成员函数 是一种 特殊的函数 , 该函数…

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文(变方框了)问题解决方案

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文&#xff08;变方框了&#xff09;问题解决方案 前言解决方案 前言 今天早上发现公司电脑显卡驱动好像坏了&#xff0c;各种折腾完了干脆把系统搞黑屏无法开机了&#xff0c;时间有限懒再修了&#xff0c;于是重装了系…