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

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录

  • Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)
  • 1. 副本的基本概念
  • 2. 副本同步和一致性
    • 2.1 AR(Assigned Replicas)
    • 2.2 ISR(In-Sync Replicas)
    • 2.3 OSR(Out-of-Sync Replicas)
    • 2.4 HW(High Watermark)
    • 2.5 LEO(Log End Offset)
    • 2.6 简单事例理解HW与LEO的关系
  • 3. 副本的工作流程
  • 4. 副本同步的关键参数
  • 5. 副本同步常见问题
    • 5.1 副本滞后(Replica Lag)
    • 5.2 副本丢失(Replica Loss)
    • 5.3 ISR (In-Sync Replica) 不一致
    • 5.4 副本数量不足(Under-replicated Partitions)
    • 5.5 副本重新分配失败
    • 5.6 领导者选举延迟
    • 5.7 副本同步时间长*
    • 5.8 副本丢失或被移出 ISR
    • 5.9 副本配置不当

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

Kafka 的副本机制是其高可用性和容错性的核心之一,它确保在发生故障时数据不会丢失,同时允许系统继续提供服务。副本机制通过将每个分区的数据复制到多个 Broker 上,保证了即使某个 Broker 宕机,数据仍然可以通过其他 Broker 访问。

1. 副本的基本概念

  • 副本(Replica):每个 Kafka 分区都会有多个副本,这些副本分布在不同的 Broker 上。副本包括:
    • 领导者副本(Leader Replica):每个分区只能有一个领导者副本,负责处理生产者的写入请求和消费者的读取请求。领导者副本是所有客户端请求的入口。
    • 追随者副本(Follower Replica):其他副本是追随者副本,追随者副本的任务是从领导者副本同步数据。追随者副本不直接处理客户端的读写请求,它们仅用于数据的备份。

在这里插入图片描述

2. 副本同步和一致性

Kafka 在数据存储和分布式消息传递中使用了多个概念和指标来描述消息的状态、副本的同步情况,以及如何处理消费者的读取。以下是这些概念和指标的详细介绍:

2.1 AR(Assigned Replicas)

定义:

  • AR(Assigned Replicas) 代表的是 Kafka 分区的 所有副本,包括领导者副本(Leader Replica)和所有追随者副本(Follower Replicas)。

作用:

  • AR 列表表示分区的副本拓扑,显示所有属于该分区的副本。
  • AR 中的副本包括 ISR 中的副本和 OSR 中的副本。也就是说,AR 包括所有的副本,無論它們是否同步。

举例:
假设 Kafka 分区有 3 个副本:

  • 领导者副本:r1
  • 追随者副本:r2r3

那么,AR 列表就是 [r1, r2, r3]。无论 r2r3 是否与领导者同步,都会包含在 AR 列表中。

2.2 ISR(In-Sync Replicas)

定义:

  • ISR(In-Sync Replicas) 代表的是与 Kafka 分区 领导者副本同步 的副本。只有同步副本才被认为是与领导者保持一致的副本,并且能够承载新的写入操作。

作用:

  • ISR 是 Kafka 中保证数据一致性和高可用性的重要机制,所有写入操作都需要同步到 ISR 中的副本。
  • 如果副本不能及时同步数据,它将被移出 ISR 列表。

举例:
假设分区有 3 个副本:r1(领导者)、r2r3。如果 r1r2 保持同步,而 r3 延迟了很长时间并未同步,它会被从 ISR 中移除。此时,ISR 列表[r1, r2]

2.3 OSR(Out-of-Sync Replicas)

定义:

  • OSR(Out-of-Sync Replicas) 代表的是那些滞后于领导者副本的副本,即它们未能及时同步领导者的日志,因而不在 ISR 列表中。

作用:

  • OSR 副本无法保证数据一致性,因为它们不能及时同步数据。
  • Kafka 会尽可能让这些副本重新同步,以便它们可以重新加入 ISR 列表。

举例:
如果 r3 因网络问题滞后于 r1,它会被认为是 OSR,并从 ISR 中移除。直到它追赶上领导者副本,才会重新加入 ISR。

2.4 HW(High Watermark)

定义:

  • HW(High Watermark) 是 Kafka 中的一个关键指标,它表示 Kafka 分区中所有副本(特别是 ISR 中的副本)已经 确认并同步最高偏移量。简单来说,HW 是 Kafka 中最新已被写入的、所有副本均已同步的消息偏移量。

作用:

  • HW 代表了 Kafka 集群的 已提交数据的最大偏移量,即所有同步副本能够确认并读取的最大偏移量。
  • 只有偏移量小于或等于 HW 的消息才对消费者可见。
  • 高水位线的更新会影响消费者的读取位置,只有当消息的偏移量小于或等于 HW 时,消费者才能读取该消息。

举例:
假设 Kafka 分区的领导者副本 r1 写入了偏移量 1000,并且此时该消息已同步到 ISR 中的所有副本(例如 r2r3)。此时,HW 为 1000,意味着所有副本都已经确认并能够读取该消息。

2.5 LEO(Log End Offset)

定义:

  • LEO(Log End Offset) 是 Kafka 分区 当前日志的末尾偏移量。它代表 Kafka 分区中 最后一条消息的偏移量

作用:

  • LEO 用来描述一个分区的日志进度,表示分区日志中所有消息的 最大偏移量
  • 它帮助 Kafka 管理分区中的消息存储,因为当 LEO 被更新时,意味着新的消息被写入分区。

举例:
假设 Kafka 分区的日志写入了 1500 条消息,那么 LEO 就是 1500,表示这是该分区最新写入的偏移量。如果一个消费者的偏移量是 1499,那么它会尝试消费 1500 之后的消息。

2.6 简单事例理解HW与LEO的关系

  1. 开始分区存在3个副本,此时HW和LEO的值都为3;
    在这里插入图片描述
  2. 生产者将消息写入Leader副本后,follower副本进行消息同步;
    在这里插入图片描述
    3.同步过程中,leader副本的LEO为8,follower0的LEO为6,follower1的LEO为5;当前分区的HW最小值为5;
    在这里插入图片描述
    4.等待同步完成,LEO和HW的值为8。
    在这里插入图片描述

3. 副本的工作流程

  1. 生产者写入数据

    • 生产者将消息发送到分区的领导者副本。领导者副本接收并写入数据。
    • 领导者副本将写入的数据同步到所有的追随者副本。同步方式是异步的,即领导者副本会先处理生产者的请求,而不是等待所有追随者副本完成同步。
  2. 消费者读取数据

    • 消费者只能从领导者副本读取数据。领导者副本确保它的数据是最新的且与其他副本同步一致。
  3. 副本同步过程

    • 每个追随者副本定期从领导者副本拉取日志数据。追随者副本会确保其存储的数据与领导者副本的数据一致。
    • 追随者副本会记录日志的偏移量,每次同步时,更新其当前的偏移量。

4. 副本同步的关键参数

  • replication.factor:每个分区的副本数量,通常设置为 3,表示每个分区有 3 个副本(1 个领导者副本,2 个追随者副本)。
  • min.insync.replicas:指定一个分区在进行生产者写入时,必须有多少个副本是同步的。若少于这个数量,写入请求将被拒绝。这个配置确保了数据的一致性和高可用性。
  • unclean.leader.election.enable:是否允许未同步副本作为领导者进行选举。通常该配置为 false,表示只有 ISR 中的副本才能被选为新的领导者。
  • replica.lag.time.max.ms:副本同步最大容忍延迟时间。如果副本的同步延迟超过该时间,它将被移出 ISR。

5. 副本同步常见问题

Kafka 副本机制是确保数据可靠性和高可用性的重要机制。副本机制通过将每个分区的数据复制到多个 broker 上,保证即使某个 broker 或分区失败,数据依然可以从其他副本中恢复。然而,在实际生产环境中,副本机制可能会遇到一些常见问题。以下是 Kafka 副本机制的一些常见问题及其解决方案。

5.1 副本滞后(Replica Lag)

问题描述:
副本滞后是指某个追随者副本(Follower Replica)没有及时跟上领导者副本(Leader Replica)的数据更新,导致其数据落后。副本滞后通常是由网络延迟、磁盘性能问题、资源瓶颈等原因引起的。

可能影响:

  • 消费者读取时可能会读取到过时的数据。
  • 如果副本滞后太久,可能导致不可用副本,从而影响 Kafka 集群的可用性和数据一致性。
  • 写入请求可能会因副本不足而失败。

解决方案:

  • 增强网络带宽,优化数据传输速率。
  • 提升硬件性能,特别是磁盘 I/O 性能(使用 SSD 而非 HDD)。
  • 合理配置副本同步参数,如 replica.fetch.max.bytesreplica.fetch.wait.max.ms 等。
  • 在负载高峰期间,考虑增加集群资源,扩展 broker 数量。

5.2 副本丢失(Replica Loss)

问题描述:
副本丢失是指某个副本(特别是追随者副本)在集群故障时丢失数据。副本丢失通常发生在 Kafka broker 突然崩溃或由于磁盘损坏、网络分区等问题导致无法与领导者副本同步。

可能影响:

  • 数据丢失,尤其是在副本配置为 min.insync.replicas 的情况下,若副本数不足,生产者可能会失败,造成数据丢失。
  • 消费者可能会读取不到数据,导致消费者进度回退。

解决方案:

  • 配置 min.insync.replicas,确保在写入时必须有足够的副本处于同步状态。
  • 启用持久化存储,避免副本因磁盘丢失而导致数据丢失。
  • 定期进行数据备份,防止因硬件故障造成的数据丢失。
  • 使用分区和副本的负载均衡,确保副本的分布均匀,降低单点故障的风险。

5.3 ISR (In-Sync Replica) 不一致

问题描述:
ISR 是指副本队列中与领导者副本同步的副本。如果一个副本滞后过多,或者无法正常与领导者同步,则该副本会被从 ISR 列表中移除。ISR 不一致通常是由于网络延迟、磁盘瓶颈、或者配置不当等原因导致的。

可能影响:

  • 如果 ISR 中的副本数低于 min.insync.replicas 配置,生产者会因为写入确认失败而收到 NotEnoughReplicasException 错误。
  • 如果副本数量不足,可能会导致数据丢失或集群不可用。

解决方案:

  • 配置合理的 min.insync.replicas 值,确保每个分区至少有两个副本处于同步状态。
  • 定期检查 ISR 状态,确保副本处于同步状态。
  • 优化 Kafka 集群的网络性能和磁盘 I/O 性能,减少副本同步的延迟。

5.4 副本数量不足(Under-replicated Partitions)

问题描述:
当某个分区的副本数不足时(即副本数量低于预期值),会出现 “Under-replicated Partitions” 的情况。可能由于副本丢失、broker 故障、或者 ISR 不一致等原因导致。

可能影响:

  • 数据的可靠性降低,部分副本不可用时可能导致写入失败。
  • Kafka 会报告 “Under-replicated Partitions”,提醒运维人员某些分区的副本数量不够。

解决方案:

  • 定期监控 Kafka 集群的 “Under-replicated Partitions” 状态。
  • 在生产环境中,至少为每个分区配置两个副本。
  • 如果副本不足,手动触发副本恢复或增加新的 broker 进行数据平衡。

5.5 副本重新分配失败

问题描述:
副本重新分配是指将分区的副本从一个 broker 移动到另一个 broker 的过程。这个过程可能由于磁盘满、网络问题或者节点故障而失败。

可能影响:

  • 副本分布不均匀,可能导致集群负载不平衡。
  • 如果副本重新分配失败,可能导致某些分区的副本数不足。

解决方案:

  • 监控 Kafka 的负载情况,确保副本分配均匀。
  • 使用 Kafka 自带的工具进行副本重新分配,或者手动触发分配过程。
  • 检查 Kafka 的 broker 日志,识别是否存在硬件瓶颈或配置问题。

5.6 领导者选举延迟

问题描述:
Kafka 的领导者副本是负责处理分区读写请求的副本。领导者副本可能会因为某些原因(如故障或重新选举)需要重新选举。这会导致领导者选举的延迟,进而影响到整个分区的可用性。

可能影响:

  • 写入请求可能会被暂时阻塞,导致生产者写入失败。
  • 消费者可能暂时无法消费该分区的消息。

解决方案:

  • 配置合理的 unclean.leader.election.enable,避免在副本同步尚未完成时强制进行领导者选举。
  • 使用可靠的硬件和网络,避免因硬件故障导致领导者选举频繁发生。
  • 使用 min.insync.replicas 配置来限制仅在副本同步的情况下进行领导者选举。

5.7 副本同步时间长*

问题描述:
副本同步时间过长通常是由于生产者写入数据的速度过快,或者副本(追随者)无法及时处理传输的数据。这可能由于磁盘 I/O 性能差、网络瓶颈、资源竞争等因素导致。

可能影响:

  • 副本同步延迟可能会导致消费者读取数据时读取到不一致的数据。
  • 如果副本滞后时间过长,可能会影响到分区的可靠性和写入的确认机制。

解决方案:

  • 使用更高性能的硬件,特别是更快的磁盘(如 SSD)。
  • 优化 Kafka 配置参数,例如 replica.fetch.max.bytes,提高副本同步的效率。
  • 通过增加 Kafka broker 节点来分担负载,确保副本同步不受资源瓶颈的限制。

5.8 副本丢失或被移出 ISR

问题描述:
当副本因为滞后过多或者某些原因无法及时与领导者副本同步时,它会被移出 ISR(In-Sync Replicas)列表。如果某些副本长时间未能同步,它们可能会被永久丢失或移出 ISR。

可能影响:

  • 数据可靠性降低,特别是在某些副本长时间滞后时。
  • 如果副本丢失或移出 ISR,生产者会因缺少足够副本而出现 NotEnoughReplicasException 错误。

解决方案:

  • 确保 min.insync.replicas 设置合理,防止副本滞后导致写入失败。
  • 定期监控 ISR 状态,及时发现副本滞后问题。
  • 使用 Kafka 的分区和副本重新分配工具,确保副本分布均匀,避免单个节点的故障影响整个分区。

5.9 副本配置不当

问题描述:
副本配置不当可能会导致 Kafka 集群的可用性下降,例如设置过低的副本数、配置不合理的副本同步参数等。

可能影响:

  • 副本数过低会增加数据丢失的风险。
  • 副本同步参数配置不当可能导致副本同步延迟或失败。

解决方案:

  • 为每个分区配置至少两个副本。
  • 通过监控工具定期检查副本的同步状态。
  • 配置合理的副本同步参数,确保副本能及时同步。

相关文章:

Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)

文章目录 Kafka 副本机制(包含AR、ISR、OSR、HW 和 LEO 介绍)1. 副本的基本概念2. 副本同步和一致性2.1 AR(Assigned Replicas)2.2 ISR(In-Sync Replicas)2.3 OSR(Out-of-Sync Replicas&#xf…...

爬虫基础(二)Web网页的基本原理

一、网页的组成 网页由三部分构成:HTML、JavaScript、CSS。 (1)HTML HTML 相当于网页的骨架,它通过使用标签来定义网页内容的结构。 举个例子: 它把图片标签为img、把视频标签为video,然后组合到一个界面…...

外网访问禅道软件项目管理系统

禅道项目管理软件是一款国产的开源免费项目管理软件,专注于研发项目管理,旨在帮助企业或团队提高项目管理的效率和质量。 本文将详细的介绍如何在 Windows 系统电脑端下载运行禅道软件项目管理系统,并且结合路由侠内网穿透实现外网访问本地的…...

Python 梯度下降法(五):Adam Optimize

文章目录 Python 梯度下降法(五):Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 四、相关链接 Python 梯度下降法(五&a…...

笔试-二进制

应用题 将符合区间[l,r]内的十进制整数转换为二进制表示,请问不包含“101”的整数个数是多少? 实现 l int(input("请输入下限l,其值大于等于1:")) r int(input("请输入上限r,其值大于等于l&#x…...

springboot 2.7.6 security mysql redis jwt配置例子

数据库结构用的是若依的数据库基本结构,ruoyi.vip。 总体参考了文章:https://blog.csdn.net/qq_45847507/article/details/126681110 本文章只包含不同的地方,相同的不再赘述。 1、创建spring工程,jdk1.8,maven。 pom.xml中依赖部…...

FreeRTOS从入门到精通 第十六章(任务通知)

参考教程:【正点原子】手把手教你学FreeRTOS实时系统_哔哩哔哩_bilibili 一、任务通知简介 1、概述 (1)任务通知顾名思义是用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 (2&#…...

TensorFlow 简单的二分类神经网络的训练和应用流程

展示了一个简单的二分类神经网络的训练和应用流程。主要步骤包括: 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与部署 加载和应用已训练的模型 1. 数据准备与预处理 在本例中,数据准备是通过两个 Numpy 数…...

无人机图传模块 wfb-ng openipc-fpv,4G

openipc 的定位是为各种模块提供底层的驱动和linux最小系统,openipc 是采用buildroot系统编译而成,因此二次开发能力有点麻烦。为啥openipc 会用于无人机图传呢?因为openipc可以将现有的网络摄像头ip-camera模块直接利用起来,从而…...

.cc扩展名是什么语言?C语言必须用.c为扩展名吗?主流编程语言扩展名?Java为什么不能用全数字的文件名?

.cc扩展名是什么语言? .cc是C语言使用的扩展名,一种说法是它是c with class的简写,当然C语言使用的扩展名不止.cc和.cpp, 还包含.cxx, .c, .C等,这些在不同编译器系统采用的默认设定不同,需要区分使用。当然,编译器提…...

【MyDB】4-VersionManager 之 3-死锁及超时检测

【MyDB】4-VersionManager 之 3-死锁及超时检测 死锁及超时检测案例背景LockTable锁请求与等待管理 addvm调用addputIntoList,isInList,removeFromList 死锁检测 hasDeadLock方法资源释放与重分配 参考资料 死锁及超时检测 本章涉及代码:top/…...

【Linux】使用管道实现一个简易版本的进程池

文章目录 使用管道实现一个简易版本的进程池流程图代码makefileTask.hppProcessPool.cc 程序流程: 使用管道实现一个简易版本的进程池 流程图 代码 makefile ProcessPool:ProcessPool.ccg -o $ $^ -g -stdc11 .PHONY:clean clean:rm -f ProcessPoolTask.hpp #pr…...

【OpenGL】OpenGL游戏案例(二)

文章目录 特殊效果数据结构生成逻辑更新逻辑 文本渲染类结构构造函数加载函数渲染函数 特殊效果 为提高游戏的趣味性,在游戏中提供了六种特殊效果。 数据结构 PowerUp 类只存储存活数据,实际逻辑在游戏代码中通过Type字段来区分执行 class PowerUp …...

28. 【.NET 8 实战--孢子记账--从单体到微服务】--简易报表--报表定时器与报表数据修正

这篇文章是《.NET 8 实战–孢子记账–从单体到微服务》系列专栏的《单体应用》专栏的最后一片和开发有关的文章。在这片文章中我们一起来实现一个数据统计的功能:报表数据汇总。这个功能为用户查看月度、年度、季度报表提供数据支持。 一、需求 数据统计方面&…...

Java 泛型<? extends Object>

在 Java 泛型中&#xff0c;<? extends Object> 和 <?> 都表示未知类型&#xff0c;但它们在某些情况下有细微的差异。泛型的引入是为了消除运行时错误并增强类型安全性&#xff0c;使代码更具可读性和可维护性。 在 JDK 5 中引入了泛型&#xff0c;以消除编译时…...

FPGA|使用quartus II通过AS下载POF固件

1、将开发板设置到AS下载挡位&#xff0c;或者把下载线插入到AS端口 2、打开quartus II&#xff0c;选择Tools→Programmer→ Mode选择Active Serial Programming 3、点击左侧Add file…&#xff0c;选择 .pof 文件 →start 4、勾选program和verify&#xff08;可选&#xff0…...

“新月之智”智能战术头盔系统(CITHS)

新月人物传记&#xff1a;人物传记之新月篇-CSDN博客 相关文章链接&#xff08;更新&#xff09;&#xff1a; 星际战争模拟系统&#xff1a;新月的编程之道-CSDN博客 新月智能护甲系统CMIA--未来战场的守护者-CSDN博客 目录 一、引言 二、智能头盔控制系统概述 三、系统架…...

php:代码中怎么搭建一个类似linux系统的crontab服务

一、前言 最近使用自己搭建的php框架写一些东西&#xff0c;需要用到异步脚本任务的执行&#xff0c;但是是因为自己搭建的框架没有现成的机制&#xff0c;所以想自己搭建一个类似linux系统的crontab服务的功能。 因为如果直接使用linux crontab的服务配置起来很麻烦&#xff0…...

【LeetCode: 958. 二叉树的完全性检验 + bfs + 二叉树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

MinDoc 安装与部署

下载可执行文件 mindoc mindoc_linux_amd64.zip 上传并解压压缩包 cd /opt mkdir mindoc cd mindocunzip mindoc_linux_amd64.zip 创建数据库 CREATE DATABASE mindoc_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 配置数据库 将解压目录下 conf/app.conf.exam…...

FastAdmin+PHPStudy保姆级安装教程:从下载到配置数据库的完整流程

FastAdminPHPStudy极速开发环境搭建实战指南 作为一名长期使用FastAdmin框架的开发者&#xff0c;我深知一个顺畅的本地开发环境对项目效率的影响。本文将带你从零开始&#xff0c;用最简洁的方式完成FastAdmin与PHPStudy的完美搭配&#xff0c;避开那些新手常踩的"坑&quo…...

极速上手:Puppeteer + 原生代理IP 突破无头检测(金融与突发新闻抓取 Cheat Sheet)

在金融量化分析、宏观经济数据追踪或突发新闻监控等场景中&#xff0c;数据价值随时间呈指数级衰减。高频并发抓取极易触发目标网站的反爬策略&#xff08;如 Cloudflare 盾、无头浏览器指纹识别&#xff09;以及严苛的 IP 封禁。 终极解法&#xff1a; 使用 puppeteer-extra-…...

从零到上线:用Vue3+AntV G2快速搭建企业级数据大屏

从零到上线&#xff1a;用Vue3AntV G2快速搭建企业级数据大屏 在数字化转型浪潮中&#xff0c;数据可视化已成为企业决策的重要支撑。想象这样一个场景&#xff1a;会议室里&#xff0c;高管们围坐在大屏前&#xff0c;实时业务数据通过动态图表清晰呈现&#xff0c;关键指标一…...

别再手动填Token了!用Knife4j的OAuth2配置,一键搞定接口文档自动化认证

告别手动Token时代&#xff1a;Knife4j与OAuth2的自动化认证实战 每次调试API都要复制粘贴Token的日子该结束了。作为后端开发者&#xff0c;我们花了大量时间在接口文档和认证流程之间来回切换——这不仅是效率问题&#xff0c;更是一种思维中断。想象一下&#xff0c;当你的微…...

Leetcode 数据结构刷题 ->链表1

[27. 移除元素]移除等于所给值的元素&#xff0c;我们可以直接使用双指针&#xff0c;对着来的。关键就是把不等于x的值&#xff08;我改一下&#xff0c;没用val&#xff09;&#xff0c;放到后面去&#xff0c;这样前面就全部都是不等于x值&#xff0c;再计数即可。看代码就对…...

知识管理新范式:跨平台无缝迁移与团队协作效能提升指南

知识管理新范式&#xff1a;跨平台无缝迁移与团队协作效能提升指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本&#xff0c;也可以自己运行或参与开发。源项…...

WarcraftHelper终极指南:让魔兽争霸3在现代系统完美重生

WarcraftHelper终极指南&#xff1a;让魔兽争霸3在现代系统完美重生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上的各…...

Connect to Oracle Database with JDBC Driver

1. Overview The Oracle Database is one of the most popular relational databases. In this tutorial, we’ll learn how to connect to an Oracle Database using a JDBC Driver. 2. The Database To get us started, we need a database. If we don’t have access to …...

保姆级教程:用Cloudreve+Obsidian打造私人云笔记(附WebDAV配置避坑指南)

零基础构建私有知识库&#xff1a;Cloudreve与Obsidian的完美联姻 在信息爆炸的时代&#xff0c;如何高效管理个人知识资产已成为现代人的刚需。想象一下&#xff1a;你正在咖啡馆用iPad记录灵感&#xff0c;回到家打开电脑时这些想法已自动同步&#xff1b;出差途中用手机查阅…...

从数组到哈夫曼树:用Python代码图解软考数据结构核心算法

从数组到哈夫曼树&#xff1a;Python实战软考核心数据结构 1. 线性结构的Python实现 1.1 顺序栈与队列的实现 Python的列表(list)天然适合实现顺序存储结构。我们先来看栈的实现&#xff1a; class ArrayStack:def __init__(self, capacity10):self._items []self._capacity …...