【kafka】七、kafka数据可靠性保证

news2025/7/17 22:10:54

数据可靠性保证

为保证producer发送的数据,能可靠的发送到指定的topic,topic的每个partition收到producer发送的数据后,都需要向producer发送ack(acknowledgement确认收到),如果producer收到ack,就会进行下一轮的发送,否则重新发送数据。

image-20220117123944841

副本数据同步策略

方案优点缺点
半数以上完成同步,就发送 ack延迟低选举新的 leader 时,容忍 n 台节点的故障,需要 2n+1 个副 本
全部完成同步,才发送 ack选举新的 leader 时,容忍 n 台节点的故障,需要 n+1 个副 本延迟高

kafka选取第二种同步策略:全部完成同步发送ack

原因:

1.同样为了容忍n台节点发生故障,第一种方案需要2n+1个副本,而第二种方案只需要n+1个副本,由于kafka的每个分区都有大量的数据,选取第一种方案会造成大量数据的冗余

2.第二种方案虽然网络延迟比较高,但对于kafka来说的影响是相对较小的

ISR

这个是之前通过查看kafka主题详情的时候看到过,ISR是kafka为了防止消息丢失,使Leader会跟踪与其保持同步的follower列表

image-20211229203822691

引入ISR的原因是:当leader收到数据后,所有的follower都开始同步数据,但有一个follower出现故障,不能与leader保持同步,那么leader就会一直等待下去,直到同步完成后才发送ack,如果故障的follower一直未恢复成功,leader则会一直等待下去,所有就需要解决这个问题

因此kafka就实现了ISR这个概念来解决这个问题,leader维护一个动态的in-sync-replica set(ISR),意思是和leader保持同步的follower集合。当ISR中的follower完成数据的同步之后,leader就会给follower发送ack。如果follower长时间未向leader同步数据,则该follower将被踢出ISR,该时间阈值由replica.lag.time.max.ms参数设定。leader故障后,会中ISR中选举新的leader

ACK应答机制

对于某些不太重要的数据,对数据的可靠性要求不是很高,且能够容忍少量数据的丢失,可不需要等待ISR中的follower全部接收成功。所以kafka提供了三种可靠性级别,可以根据对可靠性和延迟的要求进行权衡,选择以下配置:

ACK参数配置

0:producer不等待broker的ack,这种配置提供了一个最低的延迟,broker一接收到数据还未写入磁盘就已经返回,当broker故障时有可能丢失数据

1:producer等待broker的ack,partition的leader落盘成功后返回ack,如果在follower同步成功之前leader故障,那么将会丢失数据

-1:producer等待broker的ack,partition的leader和follower全部落盘成功后才返回ack。如果在follower同步完成后,broker发送ack之前,leader发送故障,那么会造成重复数据

故障处理

image-20220117202807211

(1)follower故障

follower发生故障后会被临时踢出ISR,等到follower恢复后,follower会读取本地磁盘记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。等到该follower的LEO大于等于该partition的HW,即follower追上leader之后,就可以重新加入ISR了。

(2)leader故障

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

注意:这只能保证副本之间的数据一致性,并不能保证数据不丢失或者不重复

Exactly Once语义

将服务器的ack级别设置为-1,可以保证producer到server之间不会丢失数据,即At Least Once

将服务器的ack级别设置为0,可以保证生产者生产的消息只会被发送一次,即At Most Once

At Least Once可以保证数据不丢失,但不能保证数据不重复;相对的,At Most Once可以保证数据不重复,但不能保证数据不丢失。但是,对于一些非常重要的信息,比如说交易数据,下游数据消费者要求数据既不重复又不丢失,即Exactly Once语义。在kafka 0.11以前的版本,对此是无能为力的,只能保证数据不丢失,再在下游消费者对数据做全局去重。对于下游的每个应用来说,都需要单独的做全局去重,会对性能造成很大影响。

0.11 版本的kafka,引入了一项重大特性:幂等性,。所谓的幂等性就是指Producer不论向server发送了多少次重复数据,server端只会持久化一条。幂等性结合At Least Once语义,就构成了kafka的Exactly Once语义:
A t L e a s t O n c e + 幂 等 性 = E x a c t l y O n c e At Least Once + 幂等性 = Exactly Once AtLeastOnce+=ExactlyOnce
要启用幂等性,只需要将Producer的参数中enable.idompotence设置为true即可。kafka的幂等性实现其实就是将下游的去重操作放在了数据上游。开启幂等性的producer在初始化的时候会分配一个PID,发往同一个partition的消息会附带Sequence Number。而broker端会对<PID,Partition,SeqNumber>做缓存,当具有相同主键的消息提交时,Broker只会持久化一条。

但是PID重启就会变化,同时不同的Partition也具有不同主键,所以幂等性无法保证跨分区跨会话的Exactly Once

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

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

相关文章

基于AntBlazor的学生在线练习系统实现过程的简单总结

前言 疫情当前&#xff0c;作为一名教师&#xff0c;如何能让学生进行有效练习成了一个难题。如果使用 “问卷星”等线上调查问卷式的网站来做练习测试&#xff0c;是无法及时有效的进行&#xff0c;更谈不上对学生练习情况进行跟踪。鉴于以上现实情况和问题&#xff…

神经网络和深度学习-用pytorch实现线性回归

用pytorch实现线性回归 用pytorch的工具包来实现线性模型的训练过程 准备数据集 设计模型 构造损失函数和优化器&#xff08;使用pytorch API&#xff09; 训练过程&#xff1a;前馈、反馈、更新 准备数据 在PyTorch中&#xff0c;计算图是小批处理的&#xff0c;所以X和…

MATLAB | 世界杯来用MATLAB画个足球玩叭~

世界杯教你用MATLAB画个超逼真的足球&#xff0c; 需要准备Partial Differential Equation Toolbox工具箱&#xff0c;同时因为用到了polyshape类所以至少需要R2017b版本。 绘制讲解 数据来源及说明 我是真的不想写注释了太麻烦了&#xff0c;给大家讲一下我的思路希望能够看…

判断一个时间段是否经过了另一个时间段

场景&#xff1a; IOT设备存在离线与恢复时间记录&#xff0c;每一次离线和恢复记为一个周期即一条数据, 现在需要统计出在某个时段存在离线记录的数据,如果目前未恢复,没有恢复时间&#xff0c;恢复时间置为9999-01-01 00:00:00 原始数据如下(t_offline_record)&#xff1a;…

OPengl学习——初识opengl

文章目录1、网站罗列2、一些词语解析1.入门概念2.Opengl Vs DirectX3、QOpenGLWidget4、引用**OpenGL&#xff08;Open Graphics Library&#xff09;*是一个跨编程语言、跨平台的编程图形程序接口&#xff0c;它将计算机的资源抽象称为一个个OpenGL的对象&#xff0c;对这些资…

3.5、点对点协议 PPP

3.5、点对点协议 PPP 3.5.1、基本介绍 点对点协议 PPP(Point-to-Point Protocol) 是目前使用最广泛的点对点数据链路层协议。 用户计算机只有获取到 ISP 所分配的合法 IP 地址后&#xff0c;才能成为因特网上的主机 用户计算机与 ISP 进行通信时&#xff0c;所使用的数据链路…

【学习笔记21】JavaScript数组的基本方法

笔记首发 一、push&#xff1a;末位新增 语法: 数组.push(数据)作用: 向数组末尾添加数据返回值: 追加数据后, 数组最新的长度 var arr [10, 20, 30, 40];console.log(原始数组: , arr); ​var num arr.push(500);console.log(push新增后数组: , arr);console.log(push的返回…

进程的初识

目录预备知识 -> 操作系统操作系统的定义操作系统的定位进程进程的概念进程调度的过程进程的管理描述组织PCB描述进程的特征进程调度的相关属性进程的状态优先级上下文记账信息预备知识 -> 操作系统 操作系统的定义 操作系统是一个搞管理的软件 对上&#xff0c;要对硬…

为什么一定要申请专利呢

问题一&#xff1a;如何避免被判为非正常专利&#xff1f; 原本有个发明创造&#xff0c;想申请专利&#xff0c;却被列入非正常申请&#xff0c;甚至违法。以下五种情况一定要注意&#xff0c;千万不能碰。 1、同一单位或个人申请多件明显抄袭现有技术的专利&#xff1b; 2…

如何通过 Java 合并和取消合并 Excel 单元格

在整理 Excel 中的数据时&#xff0c;我们不可避免地需要合并和取消合并单元格。同时&#xff0c;如果需要创建跨列或行的标题&#xff0c;我们可以合并 Excel 单元格以在电子表格中轻松完成此操作。 合并单元格是指将两个或多个单元格合并为一个单元格&#xff0c;而取消合并单…

4.4——数据库和前后端身份认证

目录数据库与身份认证数据库的基本概念什么是数据库常见的数据库及分类传统型数据库的数据组织结构安装并配置 MySQL使用 MySQL Workbench 管理数据库连接数据库了解主界面的组成部分创建数据库创建数据表向表中写入数据使用 SQL 管理数据库在项目中操作 MySQL安装与配置 mysql…

华为机试 - 数大雁

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 一群大雁往南飞&#xff0c;给定一个字符串记录地面上的游客听到的大雁叫声&#xff0c;请给出叫声最少由几只大雁发出。 具体的: 1.大雁发出的完整叫声为”quack“&#xff0c;因为有多只大雁同一时…

怎么还不会进制转换,进来学。

✨进制转换&#xff0c;深度讲解✨特殊的十进制转换&#xff08;整数&#xff09;一、十进制转换为其他进制二、其他进制转换为十进制二进制的特殊转换&#xff08;整数&#xff09;一、二进制转换为其他进制二、其他进制转换为二进制任意进制的转换&#xff08;整数&#xff0…

Java项目:JSP高校新生报到迎新管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 辅导员角色包含以下功能&#xff1a; 辅导员登录,学生留言管理,新生报到管理,宿舍分配管理等功能。 财务管理角色包含以下功能&#xff1a; 财务…

一道Android题目逆向动态调试

题目来源于海淀区网络与信息安全管理员大赛&#xff0c;题目中将加密验证算法打包进.so&#xff0c;在程序中动态调用check。 本题目通过System.loadLibrary(“native-lib”)加载了libnative-lib.so文件&#xff0c;该文件通过jeb可以实现提取 图1 题目关键代码 调试环境选择…

【矩阵论】4.矩阵运算——广义逆——定义性质与特殊矩阵的广义逆

4.3 广义逆 4.3.1 定义 若mn矩阵AAmn与矩阵XXnm满足四个条件①AXAA,②XAXX&#xff0c;③(AX)HAX,④(XA)HXA则X为A的加号逆(广义逆)&#xff0c;记为XA\begin{aligned} &若 m\times n 矩阵AA_{m\times n} 与矩阵 XX_{n\times m} 满足四个条件\\ &①AXAA,\quad ② XAXX…

以太坊:轻松理解EIP-4844

以太坊&#xff1a;轻松理解EIP-4844 以太坊网络在不断发展&#xff0c;多年来已经提出了许多技术提案。其中一个提案是由Vitalik Buterin提出的EIP-4844&#xff0c;它关注的是分片技术。 什么是EIP-4844&#xff0c;它将如何影响以太坊网络及其用户的未来&#xff1f;以下是…

体系结构28_多处理机(2)

对称式共享存储器体系结构 多处理机Cache一致性 **多个处理器共享一个存储器 **当处理器规模较小时&#xff0c;这种机器十分经济 **支持对共享数据和私有数据的Cache缓存 私有数据供一个单独的处理器使用&#xff0c;而共享数据供多个处理器使用 ** 共享数据进入Cache产生了一…

LeetCode 654.最大二叉树 617合并二叉树 700二叉搜索树中的搜索 98验证二叉搜索树

文章目录654最大二叉树c代码实现python 代码实现617合并二叉树c 代码实现python 代码实现700二叉搜索树中的搜索c代码实现python 代码实现98验证二叉搜索树c 代码实现python 代码实现654最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归…

[附源码]java毕业设计在线购物商城

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…