2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解
Kafka 作为分布式高可用消息队列,其副本(Replica)机制是实现高可靠性和数据一致性的核心。本文将系统介绍 Kafka 的 Replica 机制,并详细解释 ISR、HW、LEO、AR、OSR 等关键概念。
一、Kafka Replica机制概述
在分布式系统中,高可用是一个无法回避的重要问题。Kafka 通过副本机制实现高可用。
在创建 Topic 时,可以指定副本数(至少一个副本)。例如,创建一个 Topic,指定 3 个分区和 3 个副本,这样每个分区都有 3 个副本。Kafka 会根据一定策略,将每个分区的副本分布在不同的 Broker 上,并为每个分区选举出一个 leader,其余为 follower。
当某个 Broker 宕机时,会触发分区副本选举机制,从剩余的副本中选举出新的 leader,保证服务的持续可用。
副本分为两类:
- Leader Replica:负责处理所有读写请求。
- Follower Replica:从 Leader 同步数据,作为备份。
副本机制的主要作用:
- 保证数据高可用,防止单点故障。
- 支持故障转移,提升系统容错能力。
二、AR、ISR、OSR 概念
- AR(Assigned Replicas):分区所有分配的副本集合,包括 Leader 和所有 Follower,即分区中的所有副本。
- ISR(In-Sync Replicas):所有与 Leader 副本保持一定程度同步的副本集合。
- OSR(Out-of-Sync Replicas):与 Leader 副本同步滞后过多的副本集合。
由此可见,AR = ISR + OSR。
Leader 副本负责维护和跟踪 ISR 集合中所有 Follower 副本的滞后状态:
- 当 Follower 副本落后太多或失效时,Leader 会将其从 ISR 集合中剔除,转入 OSR。
- 如果 OSR 集合中的 Follower 副本追上了 Leader,Leader 会将其从 OSR 集合转移回 ISR 集合。
- 默认情况下,当 Leader 副本发生故障时,只有 ISR 集合里的副本才有资格被选举为新的 Leader。
三、ISR 机制详解
ISR(In-Sync Replicas)是 Kafka 保证数据可靠性的关键。只有 ISR 内的副本才参与高水位(HW)推进和 Leader 选举。
- 当 Follower 长时间未同步数据或宕机,会被移出 ISR,进入 OSR。
- Follower 恢复并追上 Leader 后,会重新加入 ISR。
四、HW(High Watermark)与 LEO(Log End Offset)
- LEO(Log End Offset):它标识当前日志文件中下一条待写入消息的 offset,即每个副本当前日志的最大 offset。
- HW(High Watermark):高水位,标识一个特定的消息偏移量 offset,消费者只能拉取到这个 offset 之前(包含该 offset)的消息。HW 是所有 ISR 副本中最小的 LEO。
举例说明:
- 假设 ISR 中有三个副本,LEO 分别为 8、4、6,则 HW=4。
- 新写入的消息只有在所有 ISR 副本都同步后,HW 才会推进。
为什么消费者只能拉取到 HW 之前的消息?
Kafka 规定,消费者只能拉取到高水位(HW, High Watermark)之前(包含 HW)的消息。HW 是所有 ISR(In-Sync Replicas)副本中最小的 LEO。也就是说,只有当一条消息被所有"健康"的副本(ISR 集合)都成功复制后,这条消息才对消费者可见。
这样设计的出发点和好处
-
保证数据可靠性与一致性
如果允许消费者读取还未被所有副本同步的消息,一旦 leader 副本宕机,而这些消息还未同步到其他副本,就会造成数据丢失。消费者可能已经消费了这些"未同步"的消息,但这些消息在集群中实际上已经丢失,导致数据不一致和业务风险。 -
防止"脏读"
只有同步到所有 ISR 副本的消息才被认为是"已提交",对消费者可见。这样可以防止消费者读取到尚未被集群多数副本确认的数据,避免了"脏读"问题。 -
提升系统容错性
当 leader 副本发生故障时,Kafka 会从 ISR 集合中选举新的 leader。由于 HW 之前的消息已经被所有 ISR 副本同步,无论哪个副本成为新的 leader,都能保证数据完整性和一致性。 -
权衡性能与可靠性
这种机制既保证了高可用和高可靠性,又不会像强同步复制那样极大影响性能。只有 ISR 内副本同步后才推进 HW,既能保证数据安全,又能兼顾吞吐量。
总结:
Kafka 通过 HW 机制,确保了只有"真正安全"的消息才会被消费者读取,极大提升了分布式消息系统的数据一致性和可靠性。这是 Kafka 能够在大规模分布式场景下广泛应用的重要基础。
五、Replica机制的意义
- 保证数据不丢失:只有同步到 ISR 的消息才对外可见。
- 容错性强:Leader 故障时,从 ISR 中选举新的 Leader。
- 支持高并发和高可用。
由此可见,Kafka 的复制机制既不是完全的同步复制,也不是单纯的异步复制。
- 同步复制要求所有可用 follower 副本都复制完毕,消息才算提交成功,这会极大影响性能。
- 异步复制则只要 leader 副本写入即算提交,性能高但可靠性差,leader 宕机时可能丢数据。
- Kafka 采用的 ISR 机制则有效权衡了数据可靠性和性能:只有 ISR 集合内的副本都同步后,消息才被确认提交,既保证了高可用,也兼顾了吞吐性能。
六、Producer消息确认机制与副本同步参数
在副本机制下,生产者(Producer)向 Topic 发送消息,如何判定消息发送成功?
在一般分布式系统中,常用"过半提交"方式(即一半以上副本确认才算提交成功),但 Kafka 并未采用这种机制。Kafka 通过以下参数配置保障消息可靠性与性能:
Producer端 acks 参数
- acks=0:生产者只要将消息发送出去,无需等待任何副本的确认,即算发送成功。此方式吞吐量最大、性能最好,但 Kafka 服务抖动时容易丢消息。
- acks=1(默认):生产者将消息发送出去,只需副本中的 leader 确认,即算发送成功。此方式吞吐量和性能优秀,但当 leader 挂掉时会造成小部分消息丢失。
- acks=all:生产者将消息发送出去,需要 ISR 中的所有副本全部确认,才算发送成功。此方式吞吐量和性能较低,但稳定性最高,消息不容易丢失。
Broker端 replica.lag.time.max.ms 参数
- 如果某个 follower 在指定时间内没有发送 fetch 请求,或未能追上 leader 的日志末尾 offset,leader 会将其从 ISR 集合中剔除。
- 该参数用于控制副本同步的最大允许延迟,保障 ISR 集合的健康和数据可靠性。
七、Consumer消费机制与分区分配
在 Kafka 中,1 个 Partition 只能被 1 个消费线程消费。Kafka 采用消费者主动 pull 数据的模式,而非 Kafka Server 主动 push,这样消费者可以根据自身消费能力灵活拉取数据。如果出现消息堆积,也便于开发人员及时管理和扩容消费者。
- 如果消费线程数大于分区数,多余的消费线程将处于空闲状态。
- 如果消费线程数小于分区数,部分消费线程会消费多个分区的数据。
- 如果消费线程数等于分区数,则每个消费线程对应一个分区,是最理想的情况。
这种设计的好处:
- offset 偏移量管理简单,易于追踪和恢复。
- 消费数据的分配及 offset 提交无需复杂的事务保障,提升了系统效率。
- 便于横向扩展和动态调整消费者数量。
八、Offset提交机制的演变
由于消费者是主动 pull 数据,因此每个分区的 offset 由对应的消费者线程维护,每个消费线程需要记录自己消费到当前分区的偏移量 offset。
- 在早期 Kafka 版本中,每个分区的 offset 由对应的消费线程维护在 Zookeeper 上。但由于 Zookeeper 的单节点写特性(只有 leader 能处理写请求),不适合大量数据的频繁写入,导致性能瓶颈。
- 后续 Kafka 版本中,offset 的存储方式进行了优化,每个分区的 offset 由对应的消费线程维护在 Kafka 内部的
__consumer_offsets
主题中,极大提升了 offset 提交的效率和系统的可扩展性。
相关文章:
2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解
Kafka 作为分布式高可用消息队列,其副本(Replica)机制是实现高可靠性和数据一致性的核心。本文将系统介绍 Kafka 的 Replica 机制,并详细解释 ISR、HW、LEO、AR、OSR 等关键概念。 一、Kafka Replica机制概述 在分布式系统中&am…...
生成式 AI:从工具革命到智能体觉醒,2025 年的质变与突破
在上海胸科医院的手术室里,一束全息投影正精准勾勒出患者肺部的三维血管模型。主刀医生手持机械臂的瞬间,AI 导航系统已同步完成 200 次路径演算,将毫米级误差控制在 0.3 毫米以内 —— 这个真实发生在 2025 年的临床场景,标志着生…...
安卓基础(拖拽)
当用户长按或拖拽某个视图(如按钮、图片)时,需要提供视觉反馈(即阴影)。这行代码通常在拖拽事件的处理逻辑中,例如: view.setOnLongClickListener(v -> {// 创建拖拽阴影DragShadowBuilder …...
IoTDB磁盘I/O性能监控与优化指南
一、磁盘I/O性能观测核心指标 在现代计算机系统中,磁盘I/O性能对整体系统表现至关重要。为有效监控和优化磁盘I/O性能,需关注以下核心指标: I/O读写延迟:衡量从发起I/O请求到接收响应的时间间隔。IOPS(Input/O…...
java每日精进 5.06【框架之功能权限】
0.概述 0.1 整体架构概述 这个RBAC权限系统基于Spring Security和Token认证机制,主要包含以下核心组件: 用户-角色-菜单的多对多关系模型 基于Token的认证流程 细粒度的权限控制(菜单权限、按钮权限) 灵活的权限配置方式 1…...
静态NAT
实验需求 PC1和PC2通过静态NAT去访问服务器 实验拓扑 图13-1 静态NAT 实验步骤 步骤1:IP地址的配置 PC1的配置 PC2的配置 R1的配置 <Huawei>system-view [Huawei]undo info-center enable [Huawei]sysname R1 [R1]interface g0/0/0 [R1-GigabitEt…...
RabbitMQ-api开发
前言 MQ就是接收并转发消息 核心概念 admin是用户 每个虚拟机上都有多个交换机 快速入门 引入依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…...
const MachineTree getMachineTree() ; MachineTree getMachineTree() const; 区别?
这两个函数声明在语法和语义上有明显的区别,它们的用途和行为也不同。让我们逐一分析它们的区别: 1. const MachineTree &getMachineTree(); 这个函数声明表示: 返回类型:const MachineTree &,即返回一个 M…...
使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView
参考官方文章 便捷脚本 创建文本,复制修改后缀为bat 建立bat文件 echo off setlocal enabledelayedexpansion:: Initialize port number and PID list set PORT9222 set PID_LIST:: Get the list of all forwarded ports and PIDs for /f "tokens2,5 delims…...
浏览器存储 Cookie,Local Storage和Session Storage
什么是Cookie? 存储容量:一般限制在 4KB 以内。数据有效期:可以设置过期时间,若未设置,则在浏览器关闭时失效。数据共享:在同一域名下,不同页面可以共享cookie数据。并且在每次 HTTP 请求时&am…...
校内周赛题(思维题)
这次周赛的题目没有什么很难的代码实现,基本上都是对思路的把握。 与君共勉🌹 选取x个数,看能不能使得这x个数相加的结果是奇数。 如果x是偶数,他的分布肯定是一个奇数一个偶数若干个两两配对的奇数若干个两两配对的偶数。 如果…...
在 GitLab 中部署Python定时任务
在 GitLab 中部署定时任务(如每天早8点运行Python脚本并存储结果)可以通过 GitLab CI/CD 结合 计划任务(Scheduled Pipelines) 实现。以下是详细步骤和准备工作: 1. 准备工作 (1) 项目结构准备 确保项目包含: Python脚本(如 main.py):执行核心算法逻辑。 结果存储模…...
学习黑客Windows权限体系
已思考 24 秒 借着 Week 2 Day 4 的号角,我们把权限系统这条「双持长枪」摆上擂台:一边是 Windows DACL/icacls,另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务(Wr…...
DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成
DXFViewer进行中 : ->封装OpenGL -> 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…...
当智能科技遇上医疗行业会帮助疫苗如何方便管理呢?
随着科技的发展,智能科技在医疗行业的应用日益广泛,在疫苗管理方面,温湿度监控设备的安装可以简化管理流程,提高监测效率,降低疫苗损坏的风险。 疫苗管理面临着诸多挑战和需求。疫苗的存储、运输、接种等环节都…...
Excel 数据 可视化 + 自动化!Excel 对比软件
各位Excel小能手们!你们有没有过要对比两个Excel表格数据差异,却看得眼睛都花了的经历?其实啊,现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处,还能把修改…...
Selenium模拟人类行为,操作网页的方法(全)
看到有朋友评论问,用selenium怎么模仿人类行为,去操作网页的页面呢? 我想了想,这确实是一个很大的点,不应该是一段代码能解决的, 就像是,如果让程序模拟人类的行为。例如模拟人类买菜,做饭&am…...
LVS负载均衡群集解析:理解LVS-NAT的工作原理
目录 一、LVS群集应用基础 1.群集技术概述 2.LVS虚拟服务器 3.NFS共享存储服务 二、案例:地址转换模式(LVS-NAT) 1.资源清单 2.修改主机名 3.配置负载调度器(LVS上) 4.配置节点服务器(web1、web2) 5.测试LVS…...
Leetcode Hot 100最长连续序列
题目描述 思路 思路1 我们对数组进行排序,通过遍历数组,如果前一个数组的值1等于当前数组的值,计数count,如果中断了,计算当前最大连续长度的值ans,并且统计值count重新置为1,最后返回count与…...
【东枫科技】代理英伟达产品:交换机系统
文章目录 总体详细:NVIDIA Spectrum SN5000详细:NVIDIA Spectrum SN2100详细:NVIDIA Spectrum SN4700详细:NVIDIA Spectrum SN2010详细:NVIDIA Spectrum SN4600详细:NVIDIA Spectrum SN3700详细:…...
[前端]Javascript获取元素宽度
元素宽度属性对比示意图 ---------------------------------- | 外边距(margin) | -------------------------------- | | 边框(border) | | | -------------------------- | | | …...
MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南
1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...
项目三 - 任务3:学生多态方式喂养宠物
在本次实战中,我们通过创建动物类及其子类(猫、狗、鸟),并设计学生类的喂养方法,深入学习了Java中的多态和方法重载。学生类通过重载方式为每种动物提供专门的喂养方法,而通过多态方式则仅用一个方法即可喂…...
TypeScript速成
1、类型推断 这里的str已经推断为string类型,不能像JavaScript一样直接给str赋值number类型 2、类型注解 let str:stringabc 或者 let str:string strabc 3、类型断言 因为typescript会判定这个item可能为undefined类型,但是我们人为可以确定item一…...
CompletableFuture的底层ForkJoinPool
什么是 ForkJoinPool?它和普通线程池(ThreadPoolExecutor)有什么区别? 答案要点: ForkJoinPool 是 Java 7 引入的线程池,专为 分治任务 设计,支持递归任务拆分(Fork)和…...
高等数学第五章---定积分(§5.1定积分的概念、性质和应用)
5.1 定积分的概念及性质 一、引例 在学习定积分之前,我们先通过两个具体的例子来感受其思想和方法。 例1 曲边梯形的面积 定义:曲边梯形 由连续曲线 y f ( x ) y f(x) yf(x)(假设 f ( x ) ≥ 0 f(x) \ge 0 f(x)≥0 在所讨论的区间上&…...
Java基础学完,继续深耕(0506)SQL--多表关系
多表关系 一对多(多对一) 一对一 多对多 一对多 场景:部门与员工的关系 (一个部门下有多个员工)。 实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。 现在只是在语法上关联了,…...
python打卡day17
聚类的基础知识 知识点 聚类的指标聚类常见算法:kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征,可以针对其中几个可以解释的特征进行聚类,得到聚类后的类别,这样后续进行解释也…...
洛谷---P1629 邮递员送信
题目描述 有一个邮递员要送东西,邮局在节点 1。他总共要送 n−1 样东西,其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙,因此所有的道路都是单行的,共有 m 条道路。这个邮递员每次只能带一样东西,并且运…...
第11次:用户注册(简要版)
1、定义模板 在templates文件夹下边新建register.html,代码如下: <html lang"en"> <head><meta charset"UTF-8"><title>注册</title> </head> <body><!--{%是模板标签, …...
【IP101】图像特征提取技术:从传统方法到深度学习的完整指南
🌟 特征提取魔法指南 🎨 在图像处理的世界里,特征提取就像是寻找图像的"指纹",让我们能够识别和理解图像的独特性。让我们一起来探索这些神奇的特征提取术吧! 📚 目录 基础概念 - 特征的"体…...
对windows的简单介绍
目录 一、Windows 操作系统概述 1. 定义与定位 2. 核心目标 二、历史与版本演变 1. 早期阶段(1985–1995) 2. NT 内核时代(1996–2009) 3. 现代操作系统(2012–至今) 三、系统架构与技术特性 1. 内…...
Waymo公司正在加快其位于亚利桑那州新工厂的无人驾驶出租车(robotaxi)生产进度
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
JavaSE核心知识点01基础语法01-03(流程控制:顺序、分支、循环)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-03࿰…...
信息论01:从通信到理论的飞跃
信息论01:从通信到理论的飞跃 1. 信息论的诞生与发展 1.1 前信息论时代(1920s之前) 信息与消息的混淆:传统认知中将信息等同于消息本身先驱者奠基: 哈里奈奎斯特 (1924):提出《影响电报速度的某些因素》…...
Pandas 的透视与逆透视
目录 1. 透视 1.1 pivot 1.2 pivot_table 2.逆透视 1. 透视 透视是长表变宽表。 pivot() 和 pivot_table()两个函数都可以做到,后者可以聚合前者不行。 特性df.pivot()df.pivot_table()重复值处理要求索引和列的组合唯一,否则报错 ValueError允许…...
AI大模型驱动的智能座舱研发体系重构
随着AI大模型(如LLM、多模态模型)的快速发展,传统智能座舱研发流程面临巨大挑战。传统座舱研发以需求驱动、功能固定、架构封闭为特点,而AI大模型的引入使得座舱系统向自主决策、动态适应、持续进化的方向发展。 因此思考并提出一…...
【东枫科技】代理英伟达产品:DPU
NVIDIA BlueField-3 DPU 400Gb/s 基础设施计算平台 NVIDIA BlueField -3 数据处理单元 (DPU) 是第三代基础设施计算平台,使企业能够构建从云端到核心数据中心再到边缘的软件定义、硬件加速的 IT 基础设施。借助 400Gb/s 以太网或 NDR 400Gb/s InfiniBand 网络连接…...
【KWDB 创作者计划】一文掌握KWDB的时序表管理
前言 本文是在对时序数据库有一定了解,并且KWDB的数据库操作了解后进行学习的文章安排,如果对时序数据库与KWDB的数据库操作还不怎么了解的可以查阅官网的文档进行提前学习,当有了这些基础后,本文就是对时序数据表的一个管理操作…...
《算法导论(第4版)》阅读笔记:p9-p9
《算法导论(第4版)》学习第 6 天,p9-p9 总结,总计 1 页。 一、技术总结 1. data structure A data structure is a way to store and organize data in order to facilitate access and modifications(数据结构是一种存储和组织数据的方式,…...
Facebook隐私保护措施的优缺点解析
在这个数字化的时代,隐私保护已成为公众关注的热点话题。Facebook,作为全球最大的社交媒体平台之一,其隐私保护措施自然也受到了广泛的关注和讨论。本文将对Facebook的隐私保护措施进行解析,探讨其优点与缺点,并探讨如…...
深入了解linux系统—— 进程地址空间
前言 程序地址空间 在之前,我们学习C/C时,多多少少都看过这样的一张图 我们现在通过下面这一段代码看一下: #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int main(int…...
电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择-耀圣
电动加长杆金属硬密封法兰式蝶阀泄漏等级解析:水、蒸汽、油品介质的可靠选择 在工业流体控制领域,电动金属硬密封蝶阀凭借其卓越的密封性能和耐高温高压特性,成为水、蒸汽、油品等介质的核心控制设备。其泄漏等级作为衡量阀门性能的关键指标…...
win11共享打印机主机设置
1.首先打开设置,选择打印机和扫描仪点击打印机属性,将共享窗口的共享这台打印机和在客户端计算机上呈现打印作业这两项勾选上。 2.通过cmd命令 gpedit.msc 打开本地组策略编辑器。 3.网络访问选择仅来宾 4.将账户来宾状态选择启用 5.将拒绝从网络访问这台…...
Flowable7.x学习笔记(二十)查看流程办理进度图
前言 本文是基于继承Flowable的【DefaultProcessDiagramCanvas】和【DefaultProcessDiagramGenerator】实现的自定义流程图生成器,通过自定义流程图生成器可以灵活的指定已经执行过的节点和当前正在活跃的节点样式,比如说已经执行完成的节点我们标绿&…...
【计算机网络 第8版】谢希仁编著 第四章网络层 地址类题型总结
小结 个人觉得地址类在网络层算好做的题,这部分知识本身并不多,理解到位了就是2进制和10进制的换算题了。而且这种题给你一小时例题和标答,肯定自己都能悟出来。但是计网网络层的整体我感觉很散,老师讲的也乱七八糟的,…...
一种基于条件生成对抗网络(cGAN)的CT重建算法
简介 简介:该文提出了一种基于条件生成对抗网络(cGAN)的CT重建算法,通过引入CBAM注意力机制增强网络对关键特征的提取能力,有效解决了CT成像中因噪声干扰导致的重建精度下降问题。实验采用固体火箭发动机模拟件数据集,将正弦图分为五组并添加不同程度的噪声进行训练。结…...
欧拉系统(openEuler)上部署OpenStack的完整指南 ——基于Yoga版本的全流程实践
(资源区里有上传的配置好的openstack镜像) 一、环境规划与前置准备 1. 硬件与节点规划升级 存储节点(可选):若需Cinder后端,建议配置SSDHDD混合存储网络拓扑强化: 管理网络:启用V…...
oceanbase不兼容SqlSugarCore的问题
问题发现 C#程序使用SqlSugarCore5.1.4.166进行数据库操作,而且项目需要在多台服务器上面部署,结果发现A服务器部署运行没有问题, B服务器部署却报错:SqlSugar.SqlSugarException:Connect timeout expired. 但是我们的C#代码是一…...
深入理解分布式锁——以Redis为例
一、分布式锁简介 1、什么是分布式锁 分布式锁是一种在分布式系统环境下,通过多个节点对共享资源进行访问控制的一种同步机制。它的主要目的是防止多个节点同时操作同一份数据,从而避免数据的不一致性。 线程锁: 也被称为互斥锁(…...