Kafka 的选举机制
Kafka 的选举机制在 Zookeeper 模式 和 KRaft 模式 下有所不同,主要体现在 领导选举 和 集群元数据管理 的方式上。下面详细介绍这两种模式下 Kafka 如何进行选举机制。
1. Zookeeper 模式下的选举机制
在早期的 Kafka 架构中,集群的元数据管理和选举机制完全依赖 Zookeeper。Kafka 使用 Zookeeper 进行集群的协调,Zookeeper 负责分区副本的领导选举、元数据存储以及故障恢复。
1.1 Zookeeper 的作用
- 分区领导选举:每个 Kafka 分区会有一个领导副本(leader replica)负责处理读写请求,其他副本是跟随副本(follower replica)。如果一个分区的领导副本失败,Zookeeper 会触发 领导选举,选择一个新的副本作为该分区的领导副本。
- 集群元数据管理:Zookeeper 存储 Kafka 集群的元数据,例如每个分区的副本分配情况、消费者组的消费进度等。Zookeeper 会确保集群的元数据一致性。
- Broker 监控与故障检测:Zookeeper 会监控 Kafka broker 的健康状态。当某个 broker 宕机时,Zookeeper 会及时进行故障检测,并触发领导选举和副本恢复。
1.2 选举流程
- Zookeeper 维护节点状态:每个 Kafka broker 都会向 Zookeeper 注册,作为集群的一部分。当 broker 启动时,它会在 Zookeeper 中注册一个节点(例如
/brokers/ids/<broker_id>
)。 - 领导选举:对于每个 Kafka 分区,Zookeeper 会在多个副本之间选择一个副本作为领导副本(leader)。Zookeeper 会使用 临时节点(ephemeral node)来标识领导副本。临时节点在 broker 失败时会自动删除,触发新的领导选举。
- 故障恢复:如果某个领导副本宕机,Zookeeper 会感知到该节点的失败,并进行新的领导选举,确保分区始终有一个活跃的领导副本。通过 Zookeeper 的协调,Kafka 可以确保高可用性。
- Leader 选举算法:Zookeeper 采用 Zab 协议(Zookeeper Atomic Broadcast),这个协议保证了集群中的 顺序一致性,确保同一时间内只有一个分区副本被选为领导副本。
1.3 优缺点
- 优点:
- Zookeeper 的一致性协议和分布式协调机制确保了 Kafka 集群在分区领导选举方面的一致性。
- 分区领导选举和元数据管理的协调工作由 Zookeeper 完成,能够保证系统高可用和故障恢复。
- 缺点:
- 性能瓶颈:Zookeeper 在大规模 Kafka 集群中会成为性能瓶颈,特别是在集群规模扩展时,Zookeeper 的一致性协议(如同步更新)会影响性能。
- 复杂性:Kafka 对 Zookeeper 的依赖增加了系统的复杂性,要求用户必须维护 Zookeeper 集群。
2. KRaft 模式下的选举机制
在 KRaft 模式(Kafka Raft)下,Kafka 完全摆脱了 Zookeeper 的依赖,转而使用 Raft 协议进行集群元数据的管理和领导选举。KRaft 模式简化了 Kafka 集群的架构,提升了系统的性能和可靠性。
2.1 KRaft 模式的核心组件
- KRaft Controller:KRaft 模式中有一个新的组件称为 KRaft Controller,它负责集群的元数据管理、分区副本的领导选举以及集群状态的协调。多个 Kafka 节点可以充当 Controller,组成 Controller Quorum。
- Raft 协议:Kafka 在 KRaft 模式下采用 Raft 协议,这是一种一致性协议,确保在分布式系统中,各个节点之间的状态一致性。Raft 协议确保集群的高可用性,领导选举和副本同步能够在没有 Zookeeper 的情况下进行。
2.2 KRaft 模式下的选举流程
- Kafka Controller Quorum:在 KRaft 模式下,Kafka 集群中的 KRaft Controller 节点负责管理和协调集群的元数据。多个 broker 可以成为 Controller,组成一个 Controller Quorum。当集群启动时,Kafka 会选举出一个 Controller 节点,作为集群的管理者。
- Raft 协议实现领导选举:
- 每个 Kafka 分区有一个 领导副本(leader replica),用于处理所有读写请求,其他副本作为 跟随副本(follower replica)进行同步。
- Raft 协议用于管理领导副本的选举。集群中的 Controller 会使用 Raft 协议进行协调,确保每个分区都有一个领导副本。Controller 节点会通过 Raft 协议与集群中的其他节点进行沟通,确保数据一致性。
- 副本同步与故障恢复:
- 在 KRaft 模式下,Raft 协议还负责副本同步和故障恢复。当某个领导副本不可用时,Raft 会选举出一个新的领导副本。Raft 协议保证了副本的高可用性和数据一致性。
- 无 Zookeeper 的元数据管理:
- 在 KRaft 模式下,Kafka 完全去除 Zookeeper,所有的集群元数据(如主题、分区、副本和消费者偏移量等)都由 Kafka Controller 通过 Raft 协议进行管理。
- Raft 协议的日志复制机制保证了元数据的持久化和一致性。每次元数据变更时,都会通过 Raft 协议同步到集群中的所有节点。
2.3 KRaft 模式的优缺点
- 优点:
- 去除 Zookeeper:Kafka 不再依赖 Zookeeper,简化了集群架构,减少了运维复杂度。
- 高性能:Raft 协议的实现避免了 Zookeeper 带来的性能瓶颈,提升了 Kafka 的吞吐量和可扩展性。
- 一致性保障:Raft 协议确保了 Kafka 集群在没有 Zookeeper 的情况下依然能保证元数据的一致性和高可用性。
- 缺点:
- 过渡期不稳定:尽管 KRaft 模式在 Kafka 2.8.0 中开始支持,但在一些大规模部署中,可能会面临过渡期的稳定性问题。需要时间和社区的不断迭代和优化。
3. Zookeeper 模式与 KRaft 模式的区别
特性 | Zookeeper 模式 | KRaft 模式 |
---|---|---|
元数据管理 | Zookeeper 负责所有集群元数据的管理 | Kafka 自身使用 Raft 协议管理元数据 |
领导选举 | Zookeeper 负责分区领导副本的选举 | 使用 Raft 协议管理分区领导副本的选举 |
副本同步 | Zookeeper 负责协调副本的同步 | Raft 协议负责副本的同步和一致性 |
故障恢复 | Zookeeper 检测故障并触发领导选举 | Raft 协议自动进行领导副本的选举和故障恢复 |
性能瓶颈 | Zookeeper 成为性能瓶颈,尤其在大规模集群中 | Raft 协议提高了性能,去除了 Zookeeper 带来的瓶颈 |
集群管理复杂度 | 依赖 Zookeeper,管理和配置较为复杂 | 去除了 Zookeeper,简化了集群管理 |
4. 总结
- Zookeeper 模式:Kafka 依赖 Zookeeper 来进行元数据管理、分区领导选举和副本同步等任务。Zookeeper 通过 Zab 协议 来保证数据一致性和领导选举的正确性。
- KRaft 模式:Kafka 去除了 Zookeeper,采用 Raft 协议 自行管理元数据和领导选举,提升了集群的性能和可靠性,简化了系统架构。
KRaft 模式的引入标志着 Kafka 进入了一个新的阶段,进一步优化了集群的管理和扩展性,为大规模 Kafka 部署提供了更高效的解决方案。
Zab 协议和 Raft 协议
Zab 协议 和 Raft 协议 都是分布式系统中的一致性协议,它们的目标是确保在多节点的环境下,数据的一致性和高可用性。虽然它们的目的相似,但它们的设计理念和实现机制有所不同。下面我们将对这两个协议进行详细对比,并讲解它们在 Kafka 中的应用。
1. Zab 协议 (Zookeeper Atomic Broadcast)
Zab 协议 是 Zookeeper 中用于保证数据一致性的协议,专门用于分布式协调系统中,确保消息广播的一致性。Zab 协议是 Zookeeper 用于实现 原子广播 的协议,保证了分布式系统中的状态一致性。
1.1 Zab 协议的主要特点
- 原子广播:Zab 协议保证消息在集群中的广播是原子的,即要么所有节点接收到这个消息,要么没有节点接收到。
- 领导选举:Zab 协议通过选举一个领导节点(leader)来协调集群中的所有数据变更请求。领导节点负责处理所有的写操作和数据同步,而其他节点作为跟随节点(follower),同步数据并保持一致。
- 恢复性:Zab 协议设计了一种容错机制,当出现节点故障时,Zookeeper 集群能够自动恢复到一致的状态。具体来说,如果领导节点宕机,Zab 协议会触发一个新的领导选举,确保系统的高可用性。
- 批量提交:Zab 协议使用批量的日志提交机制,将多个请求合并成一个批次进行提交,从而提高性能。
1.2 Zab 协议的工作过程
- 领导节点选举:当 Zookeeper 启动时,会通过选举机制选举出一个领导节点。领导节点负责处理所有的写操作请求,确保数据的顺序一致性。
- 消息广播:所有的写操作请求都会通过领导节点广播到所有的跟随节点。领导节点将请求以事务日志的形式发送给所有的跟随节点。
- 确认与提交:所有的跟随节点会将接收到的消息存储在本地的事务日志中,并向领导节点确认。如果大多数节点(超过半数)确认收到消息,领导节点就会将该消息提交到集群中的所有节点。
- 故障恢复:如果领导节点宕机,Zookeeper 会自动进行新的领导选举,确保集群能够继续提供服务。
1.3 Zab 协议的优缺点
- 优点:
- 确保了数据一致性和顺序性。
- 可以保证在多数节点不可用的情况下集群仍然能够继续工作(容错性强)。
- 缺点:
- 相较于 Raft 协议,Zab 协议的实现相对复杂。
- 对于写操作的处理,Zab 协议的延迟较高,因为它依赖于领导节点的同步过程。
2. Raft 协议
Raft 协议 是一种旨在简化分布式一致性协议的算法。Raft 协议的核心目标是让分布式系统中的所有节点保持数据一致性,并且尽可能让协议容易理解。Raft 协议主要用于保证集群中的日志一致性,是一种状态机复制协议。
2.1 Raft 协议的主要特点
- 领导选举:Raft 协议的工作原理依赖于一个集群中始终有一个领导者(leader)。领导者负责处理所有的客户端请求,并将日志条目复制到集群中的其他节点(follower)。
- 日志复制:当客户端向集群发送请求时,领导者会将请求记录为日志条目,并将这些条目复制到所有的跟随节点。确保集群中的每个节点都有相同的日志条目,从而保证一致性。
- 一致性保证:Raft 协议通过保证日志的复制顺序,确保了分布式系统中的数据一致性。只有当大多数节点都确认接收到日志条目时,领导者才会提交该条目,保证系统的强一致性。
- 故障恢复:Raft 协议可以容忍部分节点的故障,并通过领导选举机制确保集群的高可用性。如果领导节点宕机,Raft 会启动一个新的选举过程,确保新的领导节点可以继续管理集群。
2.2 Raft 协议的工作过程
- 领导选举:Raft 集群中的节点分为三类:领导者(leader)、跟随者(follower)和候选者(candidate)。当集群启动时,集群中会选举出一个领导节点。领导节点负责处理所有的客户端请求。
- 日志复制:当领导节点收到客户端请求时,它将请求存储为日志条目,并将日志条目复制到所有的跟随节点。当大多数节点确认接收到日志条目时,领导节点才会将该条目提交并响应客户端。
- 心跳机制:领导节点会定期向跟随节点发送心跳信号(AppendEntries),以防止它们成为候选节点。
- 领导选举(故障恢复):当领导节点宕机时,Raft 协议会通过选举过程选举出一个新的领导节点。集群中的其他节点将重新同步最新的日志条目,确保系统一致性。
2.3 Raft 协议的优缺点
- 优点:
- Raft 协议比 Zab 协议更容易理解,设计简单明了。
- 它具有良好的容错性,可以在部分节点宕机的情况下继续运行。
- 可以实现强一致性和高可用性。
- 缺点:
- 相较于 Zab 协议,Raft 协议在实现上对集群中节点的数量有一定的限制,尤其是在集群规模很大的情况下。
3. Zab 协议与 Raft 协议的对比
特性 | Zab 协议 | Raft 协议 |
---|---|---|
设计目标 | 为分布式协调系统(如 Zookeeper)提供一致性协议 | 为分布式系统提供一致性与高可用性协议 |
协议类型 | 原子广播协议 | 日志复制协议 |
领导选举 | 通过 Zookeeper 的协调机制实现 | Raft 协议通过选举机制实现领导节点的选举 |
故障恢复 | 通过 Zookeeper 自动恢复 | 通过 Raft 协议的日志复制和领导选举机制实现故障恢复 |
性能 | 高写入延迟,尤其在集群规模较大时 | 高吞吐量和低延迟,适合大规模集群 |
易理解性 | 相对较复杂 | 设计简单,易于理解和实现 |
适用场景 | Zookeeper 用于集群协调 | 适用于 Kafka、etcd、Consul 等分布式系统 |
容错性 | 容忍少数节点故障 | 容忍部分节点故障,保证集群一致性 |
4. 总结
- Zab 协议 和 Raft 协议 都是为了保证分布式系统中的一致性而设计的协议,但它们各自有不同的应用场景和优缺点。Zab 协议适用于像 Zookeeper 这样的分布式协调系统,Raft 协议则更广泛地应用于分布式日志和数据库中,如 Kafka、etcd、Consul 等。
- Raft 协议 提供了一个更加易于理解且广泛适用于分布式系统的解决方案,而 Zab 协议 则在 Zookeeper 作为分布式协调系统中发挥了重要作用。
Kafka 在过去的版本中依赖 Zookeeper 进行领导选举和分区副本管理,而在 KRaft 模式 中,Kafka 逐步放弃了 Zookeeper,采用了 Raft 协议 来管理集群的元数据和选举机制。
相关文章:
Kafka 的选举机制
Kafka 的选举机制在 Zookeeper 模式 和 KRaft 模式 下有所不同,主要体现在 领导选举 和 集群元数据管理 的方式上。下面详细介绍这两种模式下 Kafka 如何进行选举机制。 1. Zookeeper 模式下的选举机制 在早期的 Kafka 架构中,集群的元数据管理和选举机…...
FreeRTOS移植笔记:让操作系统在你的硬件上跑起来
一、为什么需要移植? FreeRTOS就像一套"操作系统积木",但不同硬件平台(如STM32、ESP32、AVR等)的CPU架构和外设差异大,需要针对目标硬件做适配配置。移植工作就是让FreeRTOS能正确管理你的硬件资源。 二、…...
设计模式简述(十二)策略模式
策略模式 描述基本使用使用传统策略模式的缺陷以及规避方法 枚举策略描述基本使用使用 描述 定义一组策略,并将其封装起来到一个策略上下文中。 由调用者决定应该使用哪种策略,并且可以动态替换 基本使用 定义策略接口 public interface IStrategy {…...
如何在idea中快速搭建一个Spring Boot项目?
文章目录 前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热启动(热部署)结语 前言 Spring Boot 凭借其便捷的开发特性,极大提升了开发效率,为 Java 开发工作带来诸多便利。许多大伙伴希望快速…...
【注解简化配置的原理是什么】
注解(Annotation)简化配置的核心原理是将原本分散在外部文件(如XML、properties)中的元数据直接内嵌到代码中,通过声明式编程让框架或工具自动处理这些元数据,从而减少手动配置的复杂度。以下是其实现原理的…...
Livox-Mid-70雷达使用------livox_mapping建图
1.ubuntu20.04 和Livox mid 70 的IP设置 连接好Livox-Mid-70雷达,然后进行局域网配置 1.1 Livox mid 70的IP是已知的,即192.168.1.1XX, XX表示mid 70广播码的后两位 1.2 ubuntu 20.04的IP设置 a.查看本机IP名 ifconfig b.设置本机IP地址 sudo ifconfig enx00e04…...
Django中使用不同种类缓存的完整案例
Django中使用不同种类缓存的完整案例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django中使用不同种类缓存的完整案例步骤1:设置Django项目步骤2:设置URL路由步骤3:视图级别…...
代码随想录算法训练营Day32| 完全背包问题(二维数组 滚动数组)、LeetCode 518 零钱兑换 II、377 组合总数 IV、爬楼梯(进阶)
理论基础 完全背包问题 在完全背包问题中,每种物品都有无限个,我们可以选择任意个数(包括不选),放入一个容量为 W W W 的背包中。我们希望在不超过容量的情况下,最大化背包内物品的总价值。 完全背包&a…...
Django SaaS案例:构建一个多租户博客应用
Django SaaS案例:构建一个多租户博客应用 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django SaaS案例:构建一个多租户博客应用如果你正在从事一个SaaS(软件即服务)项目或一…...
静态库与动态库
静态库(Static Library) 定义:静态库(如 .a 文件或 .lib 文件)是编译时直接链接到可执行文件中的库。其代码和数据会被完整复制到最终的可执行文件中。 特点: 独立部署:无需依赖外部库文件。 …...
优选算法的妙思之流:分治——归并专题
专栏:算法的魔法世界 个人主页:手握风云 目录 一、归并排序 二、例题讲解 2.1. 排序数组 2.2. 交易逆序对的总数 2.3. 计算右侧小于当前元素的个数 2.4. 翻转对 一、归并排序 归并排序也是采用了分治的思想,将数组划分为多个长度为1的子…...
PDFBox渲染生成pdf文档
使用PDFBox可以渲染生成pdf文档,并且自定义程度高,只是比较麻烦,pdf的内容位置都需要手动设置x(横向)和y(纵向)绝对位置,但是每个企业的单据都是不一样的,一般来说都会设…...
flutter dio网络请求与json数据解析
在Flutter中,Dio 是一个功能强大且易于使用的网络请求库,用于处理HTTP请求和响应。与 http 包相比,Dio 提供了更多高级功能,例如拦截器、文件上传/下载、请求取消等。结合 json_serializable 或手动解析 JSON 数据,可以…...
7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange“延迟插件“ 的详细配置说明)的详细讲解
7. RabbitMQ 消息队列——延时队列(Spring Boot 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解 文章目录 7. RabbitMQ 消息队列——延时队列(Spring Boot 安装message_exchange"延迟插件" 的详细配置说明)的详细讲解1. RabbitMQ 延时队列概…...
使用 MyBatis-Plus 实现高效的 Spring Boot 数据访问层
在开发 Spring Boot 应用时,数据访问是不可或缺的部分。为了提高开发效率并减少样板代码,MyBatis-Plus 提供了强大的功能,能够简化与数据库交互的操作。本文将详细介绍如何在 Spring Boot 中使用 MyBatis-Plus,并结合具体代码示例…...
Linux学习笔记——零基础详解:什么是Bootloader?U-Boot启动流程全解析!
零基础详解:什么是Bootloader?U-Boot启动流程全解析! 一、什么是Bootloader?📌 举个例子: 二、U-Boot 是什么?三、U-Boot启动过程:分为两个阶段🔹 第一阶段(汇…...
网络初识 - Java
网络发展史: 单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联:将多台计算机链接再一起,完成数据共享。 数据共享的本质是网络数据传输,即计算机之间通过网络来传输数…...
(51单片机)独立按键控制流水灯LED流向(独立按键教程)(LED使用教程)
源代码 如上图将7个文放在Keli5 中即可,然后烧录在单片机中就行了 烧录软件用的是STC-ISP,不知道怎么安装的可以去看江科大的视频: 【51单片机入门教程-2020版 程序全程纯手打 从零开始入门】https://www.bilibili.com/video/BV1Mb411e7re?…...
QML输入控件: TextArea的应用(带行号的编辑器)
目录 引言📚 相关阅读🔨BUG修复实现思路代码解析主窗口代码自定义TextAreaItem组件行号显示部分文本编辑区域滚动同步 关键功能解析1. 动态更新行号2. 属性映射3. 外观定制 运行效果总结工程下载 引言 在开发Qt/QML应用程序时,文本编辑功能是…...
kafka 的存储文件结构
Kafka 的存储文件结构是其高吞吐量和高效性能的关键部分。Kafka 的存储结构是围绕 日志(Log) 的设计展开的,而每个 Kafka 分区(Partition) 都会以日志文件的形式存储。Kafka 采用了顺序写入、分段存储和索引文件的机制…...
FAISS原理深度剖析与LLM检索分割难题创新解决方案
一、FAISS核心技术解构:突破传统检索的次元壁 1.1 高维空间的降维艺术 FAISS(Facebook AI Similarity Search)通过独创的Product Quantization(乘积量化)技术,将高维向量空间切割为多个正交子空间。每个子…...
Windows操作系统安全配置(一)
1.操作系统和数据库系统管理用户身份标识应具有不易被冒用的特点,口令应有复杂度要求并定期更换 配置方法:运行“gpedit.msc”计算机配置->Windows设置->安全设置>帐户策略->密码策略: 密码必须符合复杂性要求->启用 密码长度最小值->…...
JavaScript promise实例——通过XHR获取省份列表
文章目录 需求和步骤代码示例效果 需求和步骤 代码示例 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- 确保IE浏览器使用最新的渲染引擎 --><meta http-equiv"X-UA-Compatible" conten…...
【力扣hot100题】(065)搜索旋转排序数组
难点在于情况真的很多需要逐一判断,画个走向图再写判断条件就行了。 还有处理边界条件也比较麻烦。 class Solution { public:int search(vector<int>& nums, int target) {int left0;int rightnums.size()-1;while(left<right){int mid(leftright)/…...
毕设论文的分类号与UDC查询的网站
毕业论文分类号 中图分类号查询链接 找到自己的细分类,一个一个点就好,然后就找到了 毕业论文UDC UDC查询...
pyqt5实现多个窗口互相调用
使用以下代码可以实现多窗口之间的相互调用: import sys from PyQt5.QtWidgets import QApplication, QMainWindow import win0, win1, win2, win3 # 分别包含 Ui_win0 和 Ui_win1class Win0Window(QMainWindow, win0.Ui_win0):def __init__(self, x, parentNone)…...
Python基于Django的企业it资产管理系统(附源码,文档说明)
博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇dz…...
浅谈在HTTP中GET与POST的区别
从 HTTP 报文来看: GET请求方式将请求信息放在 URL 后面,请求信息和 URL 之间以 ?隔开,请求信息的格式为键值对,这种请求方式将请求信息直接暴露在 URL 中,安全性比较低。另外从报文结构上来看,…...
计算机视觉5——运动估计和光流估计
一、运动估计 (一)运动场(Motion Field) 定义与物理意义 运动场是三维场景中物体或相机运动在二维图像平面上的投影,表现为图像中每个像素点的运动速度矢量。其本质是场景点三维运动(平移、旋转、缩放等&a…...
8. RabbitMQ 消息队列 + 结合配合 Spring Boot 框架实现 “发布确认” 的功能
8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能 文章目录 8. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1. RabbitMQ 消息队列 结合配合 Spring Boot 框架实现 “发布确认” 的功能1.1 回退消息 2.备用交换机3. API说…...
铰链损失函数 Hinge Loss和Keras 实现
一、说明 在为了了解 Keras 深度学习框架的来龙去脉,本文介绍铰链损失函数,然后使用 Keras 实现它们以进行练习并了解它们的行为方式。在这篇博客中,您将首先找到两个损失函数的简要介绍,以确保您在我们继续实现它们之前直观地理解…...
【Tips】Cloudflare用户与网站之间的中介
Cloudflare是一家提供多种网络服务的公司,旨在帮助网站和应用程序提高性能、安全性和可靠性。它为全球网站、应用程序和网络提供一系列网络安全、性能优化和可靠性服务。Cloudflare 的核心使命是让互联网更加安全、快速和可靠。 以下是其主要服务介绍:…...
PDF 转图片,一行代码搞定!批量支持已上线!
大家好,我是程序员晚枫。今天我要给大家带来一个超实用的功能——popdf 现在支持 PDF 转图片了,而且还能批量操作!是不是很激动?别急,我来手把手教你玩转这个功能。 1. 一行代码搞定单文件转换 popdf 的核心就是简单暴…...
可以使用费曼学习法阅读重要的书籍
书本上画了很多线,回头看等于没画出任何重点。 不是所有的触动都是有效的。就像你曾经看过很多好文章,当时被触动得一塌糊涂,还把它们放进了收藏夹,但一段时间之后,你就再也记不起来了。如果让你在一本书上画出令自己…...
基于Flask的笔记本电脑数据可视化分析系统
【Flask】基于Flask的笔记本电脑数据可视化分析系统(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统采用Python语言进行编写,以Flask为后端框架,利用Echarts实现数…...
JavaScript基础--17-数组的常见方法
数组的方法清单 数组的类型相关 方法描述备注Array.isArray()判断是否为数组toString()将数组转换为字符串Array.from(arrayLike)将伪数组转化为真数组Array.of(value1, value2, value3)创建数组:将一系列值转换成数组 注意,获取数组的长度是用length…...
TDengine 从入门到精通(2万字长文)
第一章:走进 TDengine 的世界 TDengine 是个啥? 如果你首次接触 TDengine,心里可能满是疑惑:这究竟是个什么东西,能派上什么用场?简单来讲,TDengine 是一款开源、高性能且云原生的时序数据库&…...
ctfshow VIP题目限免(前10题)
目录 源码泄露 前台JS绕过 协议头信息泄露 robots后台泄露 phps源码泄露 源码压缩包泄露 版本控制泄露源码 版本控制泄露源码2 vim临时文件泄露 cookie泄露 源码泄露 根据题目提示是源代码泄露,右键查看页面源代码发现了 flag 前台JS绕过 发现右键无法使用了&…...
PyTorch中的各种损失函数的详细解析与通俗理解!
目录 1. 前言 2. 回归任务中的损失函数 2.1 L1损失(Mean Absolute Error, MAE) 2.2 平方损失(Mean Squared Error, MSE) 2.3 平滑L1损失(Smooth L1 Loss) 3. 分类任务中的损失函数 3.1 交叉熵损失&a…...
leetcode53-最大子数组和
leetcode 53 思路 本题使用贪心算法,核心在于对每一个元素进行遍历,在遍历过程里,持续更新当前的子数组和以及最大子数组和 假设 sum 是当前的子数组和,max 是到目前为止最大的子数组和遍历数组时,计算每个位置的当…...
解决Long类型前端精度丢失和正常传回后端问题
在 Java 后端开发中,可能会遇到前后端交互过程中 Long 类型精度丢失的问题。尤其是在 JavaScript 中,由于其 Number 类型是双精度浮点数,超过 16 位的 Long 类型值就会发生精度丢失。 问题背景 假设有如下实体类: public class…...
Green Coding规范:从循环语句到数据库查询的节能写法
本文系统化阐述绿色编码的工程实践方案,通过重构循环控制结构、优化集合操作范式、改进数据库访问模式三大技术路径,实现典型业务系统降低28.6%的CPU指令周期消耗。基于对JVM和SQL解释器的指令级分析,提出循环展开的黄金分割法则、位图索引加…...
Spring Boot整合Elasticsearch
摘要:本文手把手教你如何在Spring Boot项目中整合Elasticsearch(ES),并实现基本的CRUD与搜索操作。包含版本选择、配置、代码示例及常见问题解决。 一、环境准备 1.1 软件版本 Spring Boot: 3.xElasticsearch: 8.x(推…...
2025年渗透测试面试题总结- 某四字大厂面试复盘扩展 一面(题目+回答)
网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 某四字大厂面试复盘扩展 一面 一、Java内存马原理与查杀 二、冰蝎与哥斯拉原理对比(技术演…...
java基础自用笔记:文件、递归、常见的字符集、IO流
文件 递归 递归文件夹寻找某个文件,要先判断是否有权限进入文件夹(若无权限返回null)然后再判断文件数量是否不为0 常见的字符集 IO流 字节流 文件字节输入流 当读取到最后一个字节的时候,装在buffer[0]中,如果后面没…...
关于计算机网络的一些疑问
目录 1. HTTP/1.x 中的“队头阻塞”(Head-of-Line Blocking)问题解释什么是队头阻塞?其他相关概念: 2. HPACK 算法是什么?HPACK 的作用:HPACK 的特点:HPACK 提升性能的原因: 3. 如何…...
超大规模数据场景(思路)——面试高频算法题目
目录 用4KB内存寻找重复元素 从40个亿中产生不存在的整数【位】 如果只让用10MB空间存储? 初次遍历 二次遍历 用2GB内存在20亿个整数中查找出现次数最多的数【分块】 从亿万个URL中查找问题【分块 堆】 40亿个非负整数中找出现两次的数【位 不过多个位哈】 …...
高级:性能优化面试题深度剖析
一、引言 在Java应用开发中,性能优化是确保系统高效运行的关键。面试官通过相关问题,考察候选人对性能优化的理解和实践经验。本文将深入探讨Java应用性能优化的方法,包括JVM调优、数据库优化等,结合实际开发场景,帮助…...
【软件】在 macOS 上安装和配置 Apache HTTP 服务器
在 macOS 上安装 Apache HTTP 服务器的步骤: 1.安装 Apache HTTP 服务器 macOS 系统可能已经预装了 Apache HTTP 服务器。你可以通过终端检查它是否已经安装: httpd -v如果系统提示command not found,说明 Apache 未安装。你可以通过 Home…...
数据结构之链表
定义:在计算机科学中,链表是数据元素的线性集合,其每个元素都指向下一个元素,元素存储上并不连续。 链表分类:单向链表(每个元素知道下一个元素是谁)、双向链表(每个元素知道其上一…...