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

Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比

前言

在现代微服务架构和分布式系统中,消息队列作为解耦组件,承担着重要的职责。它不仅提供了异步处理的能力,还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ,其中 Kafka 因其高吞吐量、分布式特性和可靠性成为大规模数据流处理的首选。

本篇文章将深入介绍 Kafka 的基本概念、执行流程、吞吐量优化策略、生命周期,重点对比 Kafka 与 RabbitMQ 和 RocketMQ 的异同,最后演示如何在 Spring Boot 中使用 Kafka,并提供相应的代码示例与配置。


1. 什么是 Kafka?

Kafka 是一个高吞吐量、分布式的消息流平台,最初由 LinkedIn 开发,后来捐赠给 Apache 基金会。它的主要优势在于能处理大量的实时数据流,常用于日志聚合、流式处理和数据传输等场景。

1.1 Kafka 的核心组成

Kafka 的核心组件包括:

  • Producer(生产者):负责向 Kafka 中发送消息。例如,在一个电商系统中,订单创建后,订单数据会由生产者发送到 Kafka 中。
  • Consumer(消费者):从 Kafka 中拉取消息进行处理。比如,电商系统中的库存管理模块,会作为消费者从 Kafka 中获取订单消息,进而更新库存。
  • Broker(代理):Kafka 服务的节点,负责存储消息和分发消息。可以把 Broker 理解为一个仓库,消息在这里暂存和被分发。
  • Zookeeper:Kafka 集群的元数据和协调管理服务,保证 Kafka 集群的高可用性和一致性。Zookeeper 就像是一个指挥中心,协调着各个 Broker 的工作。

Kafka 集群的高可用性和横向扩展能力,允许 Kafka 能在大规模生产环境中运行,并提供强大的消息持久化和可靠性。

1.2 Kafka 核心概念

  • Topic(主题):消息的分类,生产者向主题发送消息,消费者从主题中接收消息。例如,在一个电商系统中,“订单消息” 可以作为一个 Topic,所有与订单相关的消息都发送到这个主题中。
  • Partition(分区):每个 Topic 可以划分成多个分区。分区使得 Kafka 可以水平扩展,并且增加并发处理能力。比如,按照不同地区(如华北、华南等)划分 Partition,这样可以并行处理不同地区的订单消息。
  • Offset(偏移量):每个消息在分区中的唯一标识,消费者根据 Offset 读取消息。Offset 就像是订单流水号,记录着消息在分区中的位置。
  • Replication(副本):Kafka 支持为每个分区设置副本数量,以保证高可用性。例如,订单消息在不同数据中心的备份就是副本,即使某个数据中心出现故障,其他副本也能保证数据不丢失。

2. Kafka 的执行流程与吞吐量优化

Kafka 的消息处理流程可以分为以下几个步骤:

2.1 生产者发送消息

  1. 连接 Kafka 集群:Kafka 生产者与 Kafka Broker 通过 TCP 连接。
  2. 选择分区:根据分区策略(例如轮询、哈希)选择目标分区。
  3. 消息传输与存储:生产者将消息发送到指定的 Broker,Broker 将消息存储到日志中。
  4. 消息确认:根据生产者的配置,Kafka 可以在消息成功写入磁盘后确认消息,或仅在消息被接收后确认。

2.2 消费者消费消息

  1. 订阅 Topic:消费者通过订阅 Topic,开始接收该主题中的消息。
  2. 拉取消息:消费者定期向 Kafka 请求消息,Kafka 返回符合消费者偏移量的消息。
  3. 确认偏移量:消费者可以显式或隐式地提交消息的偏移量,确保消息的准确消费。

2.3 吞吐量优化策略

Kafka 的高吞吐量来源于其设计架构和优化策略,以下是一些关键的优化方向:

2.3.1 分区与副本数

Kafka 通过将 Topic 划分为多个分区(Partition),实现数据的水平分布和并发处理。每个分区的消息是有序的,但跨分区的消息没有顺序保障。分区数越多,能够支持的消费者并发度也越高。副本数则保证了 Kafka 在单个节点故障时,依然能够保持数据的可用性和可靠性。

优化建议

  • 增加分区数:增加分区数可以提升 Kafka 的并发能力,尤其是在消费端和生产端之间的数据流动非常活跃时。例如,当电商促销活动期间,订单量剧增,增加分区数可以更好地处理大量订单消息。
  • 合理配置副本数:副本数的增加虽然提高了可靠性,但会带来更多的网络和存储压力。通常,副本数为 3 是一个常见的配置。
2.3.2 批量发送消息

Kafka 支持批量发送消息,生产者将多个消息一起发送到服务器,而不是一个消息一个消息地发送。批量发送减少了网络延迟和磁盘 I/O,从而提高了吞吐量。

优化建议
设置适当的 batch.sizelinger.ms 参数。batch.size 控制批次的最大大小,linger.ms 控制生产者等待时间。适当增加这些参数能够减少网络请求次数,提升吞吐量。例如:

Properties props = new Properties();
props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16384);
props.put(ProducerConfig.LINGER_MS_CONFIG, 10);
// 其他配置...
KafkaProducer<String, String> producer = new KafkaProducer<>(props);
2.3.3 消息压缩

Kafka 支持消息压缩,生产者可以使用 GZIP、Snappy 或 LZ4 等压缩算法来减少消息的大小,进而提高网络带宽的利用率。

优化建议
开启压缩,尤其是在消息体较大的情况下,可以显著减少传输的流量。通过设置 compression.type 参数,可以选择适合的压缩算法。

2.3.4 消费者并发处理

Kafka 的消费者群组机制允许多个消费者并行消费消息。通过增加消费者的数量,可以提高消费速度。

优化建议
消费者的数量应当根据分区数来合理配置,消费者数量过多会导致某些消费者处于空闲状态,而过少则会影响消费效率。

2.3.5 Kafka 配置优化

Kafka 的一些配置项可以进一步提升系统的吞吐量:

  • acks 配置:生产者的 acks 配置决定了消息确认的策略。acks = 1 表示生产者等待 Leader 写入日志并返回确认即可,acks = all 则要求所有副本都写入日志。acks = 1 通常可以获得更高的吞吐量。
  • compression.type:启用消息压缩,如 snappy、gzip 等,减少网络传输开销。
  • buffer.memory:设置生产者端缓冲区的大小,影响消息的积压情况。

3. Kafka 与 RabbitMQ、RocketMQ 的对比

3.1 Kafka vs RabbitMQ

对比项KafkaRabbitMQ
架构设计采用分布式日志架构,每个主题(Topic)由多个分区组成,保证高吞吐量和数据可持久化采用 AMQP 协议,基于队列和交换机的模式,提供更多的消息传递功能(例如消息确认、路由)
吞吐量提供了更高的吞吐量,特别适合大数据、日志流等场景适用于低延迟和高可靠性的应用,但在高吞吐量场景下表现较差
使用场景适用于实时数据流处理、大数据流式计算等高吞吐量场景更适用于任务队列、消息分发、延时消息等应用

3.2 Kafka vs RocketMQ

对比项KafkaRocketMQ
架构设计基于分区和日志的存储,适用于海量数据的存储和流式传输基于主题和队列,支持事务消息和顺序消息,适用于金融等高可靠性要求的场景
吞吐量吞吐量通常比 RocketMQ 高,适合处理大量的实时数据流支持顺序消费和事务消息,对于对数据一致性要求较高的应用场景更为合适
使用场景更适合用于数据流处理、大规模日志聚合等适合于分布式事务、高可靠消息传递等场景

4. 在 Spring Boot 中使用 Kafka

4.1 Maven 依赖配置

首先,在 Spring Boot 项目中添加 Kafka 的依赖。在 pom.xml 中加入:

<dependencies><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.8.0</version> <!-- 根据实际版本号调整 --></dependency>
</dependencies>

4.2 配置 Kafka

application.ymlapplication.properties 文件中配置 Kafka:

spring:kafka:bootstrap-servers: localhost:9092consumer:group-id: test-groupauto-offset-reset: earliestproducer:key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializer

4.3 Kafka 生产者示例代码

@Service
public class KafkaProducer {private final KafkaTemplate<String, String> kafkaTemplate;// 这里的KafkaTemplate<String, String>是用于发送消息的模板类,它定义了发送消息的方式和相关配置public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {this.kafkaTemplate = kafkaTemplate;}// sendMessage方法用于将消息发送到指定的主题public void sendMessage(String topic, String message) {kafkaTemplate.send(topic, message);}
}

4.4 Kafka 消费者示例代码

@Service
public class KafkaConsumer {// @KafkaListener注解表示该方法是一个Kafka消息监听器,监听指定的主题和组@KafkaListener(topics = "test-topic", groupId = "test-group")public void listen(String message) {System.out.println("Received message: " + message);}
}

4.5 启动 Spring Boot 应用

启动 Spring Boot 应用后,Kafka 生产者和消费者将自动处理消息的发送与接收。如果是本地环境,启动 Kafka 服务可以使用相应的命令行操作,例如在 Kafka 的安装目录下执行 bin/kafka-server-start.sh config/server.properties (Linux 或 macOS 系统)。如果连接失败,可能会出现如 “Connection refused” 等错误提示,此时需要检查 Kafka 服务是否正常运行、配置的连接地址和端口是否正确等。


5. 总结

  • Kafka 作为一款卓越的分布式流平台,在大数据处理和分布式系统领域有着举足轻重的地位 。它具备高吞吐量、分布式特性以及出色的可靠性,使其成为处理大规模实时数据流的不二之选。

  • 在基础概念方面,Kafka 拥有 Producer、Consumer、Broker 和 Zookeeper 等核心组件,这些组件相互协作,构建起了一个稳定且高效的消息处理体系。同时,Topic、Partition、Offset 和 Replication 等核心概念,是深入理解 Kafka 工作机制的关键。例如,Partition 实现了数据的水平扩展和并发处理,而 Replication 则确保了数据的高可用性。

  • 在执行流程上,生产者发送消息时,会经历连接 Kafka 集群、选择分区、传输存储以及消息确认等步骤;消费者消费消息则通过订阅 Topic、拉取消息以及确认偏移量来完成。这一过程看似简单,却蕴含着诸多内部机制,如生产者如何保证消息在分区内的顺序性,消费者显式和隐式提交偏移量的区别等,这些细节对于优化 Kafka 性能和保障消息准确处理至关重要。

  • 吞吐量优化是 Kafka 的一大亮点。通过合理调整分区与副本数、采用批量发送消息、开启消息压缩、优化消费者并发处理以及精细配置 Kafka 参数等策略,可以显著提升 Kafka 的性能。例如,增加分区数能提升并发能力,但要注意避免分区过多导致管理成本增加;批量发送消息和消息压缩可以有效减少网络延迟和带宽占用。

  • 与 RabbitMQ 和 RocketMQ 相比,Kafka 在架构设计、吞吐量和使用场景上各有特点。RabbitMQ 基于 AMQP 协议,侧重于消息传递功能和低延迟高可靠性;RocketMQ 支持事务消息和顺序消息,适用于对数据一致性要求极高的场景。而 Kafka 凭借其分布式日志架构和高吞吐量,在实时数据流处理和大规模日志聚合等方面表现出色。

  • 在实际应用中,通过在 Spring Boot 中集成 Kafka,可以轻松搭建高效的消息处理系统。从添加 Maven 依赖到配置 Kafka,再到编写生产者和消费者示例代码,每一步都为实现可靠的消息通信奠定了基础。

  • 总之,Kafka 的强大功能和广泛适用性,使其成为现代分布式系统中不可或缺的一部分。无论是处理海量数据的实时分析,还是构建高可靠的异步消息处理机制,Kafka 都能提供卓越的解决方案。随着技术的不断发展,Kafka 也将持续演进,为开发者带来更多的便利和创新。

相关文章:

Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比

前言 在现代微服务架构和分布式系统中&#xff0c;消息队列作为解耦组件&#xff0c;承担着重要的职责。它不仅提供了异步处理的能力&#xff0c;还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ&#xff0c;其中 Kafka 因其高吞吐量…...

单链表算法实战:解锁数据结构核心谜题——链表的回文结构

题目如下&#xff1a; 解题过程如下&#xff1a; 回文结构举例&#xff1a; 回文数字&#xff1a;12521、12321、1221…… 回文字符串&#xff1a;“abcba”、“abba”…… 并不是所有的循环嵌套的时间复杂度都是O(n^2) 可以用C写C程序&#xff1a; C里可以直接使用ListNode…...

【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾

我的2024年创作之旅&#xff1a;从C语言到人工智能&#xff0c;个人成长与突破的全景回顾 引言 回望2024年&#xff0c;我不仅收获了技术上的成长&#xff0c;更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上&#xff0c;CSDN不仅是我展示技术成…...

Qt Enter和HoverEnter事件

介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件&#xff0c;Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent&#xff0c;描述的是鼠标进入控件坐标范围之内的行为&#xff0c;QEnterEvent可以抓取鼠标的位置&#xff1b;QEvent…...

Python:元组构造式和字典推导式

&#xff08;Python 元组构造式和字典推导式整理笔记&#xff09; 1. 元组构造式 1.1 创建元组 使用圆括号&#xff1a; tuple1 (1, 2.5, (three, four), [True, 5], False) print(tuple1) # 输出: (1, 2.5, (three, four), [True, 5], False) 省略圆括号&#xff1a; tup…...

科普篇 | “机架、塔式、刀片”三类服务器对比

一、引言 在互联网的世界里&#xff0c;服务器就像是默默运转的超级大脑&#xff0c;支撑着我们日常使用的各种网络服务。今天&#xff0c;咱们来聊聊服务器家族中的三位 “明星成员”&#xff1a;机架式服务器、塔式服务器和刀片式服务器。如果把互联网比作一座庞大的城市&…...

数据结构——概念与时间空间复杂度

目录 前言 一相关概念 1什么是数据结构 2什么是算法 二算法效率 1如何衡量算法效率的好坏 2算法的复杂度 三时间复杂度 1时间复杂度表示 2计算时间复杂度 2.1题一 2.2题二 2.3题三 2.4题四 2.5题五 2.6题六 2.7题七 2.8题八 四空间复杂度 1题一 2题二 3…...

centos7 配置国内镜像源安装 docker

使用国内镜像源&#xff1a;由于 Docker 的官方源在国内访问可能不稳定&#xff0c;你可以使用国内的镜像源&#xff0c;如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件&#xff0c;并添加以下内容&#xff1a; [docker-ce-stable] nameDocker CE Stable -…...

PyCharm配置Python环境

1、打开PyCharm项目 可以从File-->Open-->选择你的项目路径-->OK&#xff0c;或者直接点击Open&#xff0c;找到项目路径-->OK&#xff0c;如图所示(点击Ok后可能有下面的弹窗&#xff0c;选择“Trust Project”即可&#xff0c;然后选择“New Window”打开项目) …...

Linux(Centos、Ubuntu) 系统安装jenkins服务

该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速&#xff0c;解决插件下载失败问题 安装方式&#xff1a;war包安装 阿里云提供的war下载源地址&#xff1a;https://mirrors.aliyun.com/jenkins/war/?s…...

本地大模型编程实战(02)语义检索(1)

文章目录 准备加载文档分割文档嵌入矢量存储查询矢量库检索返回评分先嵌入查询文本再检索 检索器总结代码 我们在百度、必应、谷歌等搜索引擎中使用的检索都是基于字符串的&#xff1a;用户输入字符串后&#xff0c;搜索引擎先对搜索内容进行分词&#xff0c;然后在已经进行了倒…...

使用 Redis 实现分布式锁的基本思路

使用 Redis 实现分布式锁的基本思路 在分布式系统中&#xff0c;多个进程或服务可能会同时访问共享资源&#xff08;如数据库、缓存、文件等&#xff09;&#xff0c;这可能会导致数据不一致或并发冲突。Redis 由于其高性能和单线程模型&#xff0c;是实现分布式锁的一个常见选…...

SQL-leetcode—1193. 每月交易 I

1193. 每月交易 I 表&#xff1a;Transactions ---------------------- | Column Name | Type | ---------------------- | id | int | | country | varchar | | state | enum | | amount | int | | trans_date | date | ---------------------- id 是这个表的主键。 该表包含…...

【MYSQL】mysql 常用命令

文章目录 1. 数据库管理命令2. 表管理命令3. 数据操作命令4. 数据查询进阶5. 用户与权限管理6. 使用脚本操作数据库 1. 数据库管理命令 -- 查看所有数据库 SHOW DATABASES;-- 创建数据库 CREATE DATABASE 数据库名;-- 选择数据库 USE 数据库名;-- 删除数据库 DROP DATABASE 数…...

linux 内核学习方向以及职位

### 学习路径 1. 基础阶段&#xff1a; - C语言高级特性 - 指针和内存管理 - 数据结构实现 - 位操作 - 多线程编程 - Linux系统编程 - 文件I/O操作 - 进程管理 - 信号处理 - IPC机制 - Socket编程 - 必备知识 - 操作系统原理 - 计算机体系结构 - …...

DeepSeek火爆,参数量、激活参数 和 预训练 token 量 是什么?

最近DeepSeek火爆&#xff0c;爆出了几个关键参数&#xff0c;分别是参数量、激活参数 和 预训练 token 量。 这里用通俗的语言给大家解释一下~ 首先要知道1B 是 Billion&#xff08;十亿&#xff09;的缩写 参数量&#xff1a;671B&#xff08;6710 亿&#xff09; 想象你…...

设计新的 Kibana 仪表板布局以支持可折叠部分等

作者&#xff1a;来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能&#xff0c;同时为新的高级仪表板功能奠定了基础。 我们正在开…...

vscode如何安装vue语法支持

在VSCode中安装Vue语法支持非常简单。1、你需要安装“Vetur”扩展&#xff0c;这是一个专门为Vue.js开发设计的扩展&#xff1b;2、你可以通过VSCode的扩展市场轻松找到并安装它&#xff1b;3、安装完成后&#xff0c;你还可以根据需要进行一些配置&#xff0c;以优化你的开发体…...

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑

文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集&#xff08;关键&#xff09;&#xff01;4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…...

easyexcel-导入(读取)(read)-示例及核心部件

文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象&#xff0c;new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...

10 Hyperledger Fabric 介绍

简介 HypeLedger&#xff08;超级账本&#xff09;是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。 HypeLedger Fabric是HypeLedger种的区块链项目之一HypeLedger Fabric引入权限管理在架构设计上支持可插拔、可扩展是首个面向联盟链场景的开源项目 …...

第28章 测试驱动开发模式:深入绿条模式及相关技术

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

PTMD2.0-疾病相关的翻译后修饰数据库

翻译后修饰&#xff08;PTMs&#xff0c;post-translational modifications&#xff09;通过调节蛋白质功能参与了几乎所有的生物学过程&#xff0c;而 PTMs 的异常状态常常与人类疾病相关。在此&#xff0c;PTMD 2.0展示与疾病相关的 PTMs 综合数据库&#xff0c;其中包含 93 …...

gradle生命周期钩子函数

文章目录 0. 总结表格1. 构建初始阶段gradle.settingsEvaluated()gradle.projectsLoaded() 2. 配置阶段gradle.beforeProject()gradle.afterProject()gradle.projectEvaluated()gradle.afterEvaluate()gradle.taskGraph.whenReady 3. 执行阶段gradle.taskGraph.beforeTaskgradl…...

操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之内存的划分

前言 MMU&#xff1a;内存管理单元(Memory Management Unit)完成的工作就是虚拟地址到物理地址的转换&#xff0c;可以让系统中的多个程序跑在自己独立的虚拟地址空间中&#xff0c;相互不会影响。程序可以对底层的物理内存一无所知&#xff0c;物理地址可以是不连续的&#x…...

WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel

WPF基础 | WPF 布局系统深度剖析&#xff1a;从 Grid 到 StackPanel 一、前言二、Grid 布局&#xff1a;万能的布局王者2.1 Grid 布局基础&#xff1a;构建网格世界2.2 子元素定位与跨行列&#xff1a;布局的精细操控2.3 自适应布局&#xff1a;灵活应变的秘诀 三、StackPanel…...

C++红黑树详解

文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍&#xff1f;红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋&#xff08;叔叔不存在或叔叔存在且为黑&#xff09;变色双旋&#xff08;叔叔不存在或叔叔存在且为黑…...

【经验分享】ARM Linux-RT内核实时系统性能评估工具

【经验分享】ARM Linux-RT内核实时系统性能评估工具 前言下载和编译方法常用工具介绍总结 前言 最近在研究Linux-RT实时系统&#xff0c;介绍下常用的实时系统的性能评估工具。 下载和编译方法 用git下载 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.…...

【kong gateway】5分钟快速上手kong gateway

kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取&#xff0c;也可以从以下地址下载&#xff1a;kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400&#xff0c; postgres-13.tar http…...

Vue入门(Vue基本语法、axios、组件、事件分发)

Vue入门 Vue概述 Vue (读音/vju/&#xff0c;类似于view)是一套用于构建用户界面的渐进式框架&#xff0c;发布于2014年2月。与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三…...

【可实战】Linux 系统扫盲、 Shell扫盲(如何写一个简单的shell脚本)

一、Linux系统扫盲 1.Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议 2.Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。 目前市面上较知名的发行版有&#xff1a;Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等…...

【深入理解SpringCloud微服务】Sentinel源码解析——DegradeSlot熔断规则

Sentinel源码解析——DegradeSlot熔断规则 断路器原理复习DegradeSlot熔断规则原理源码解析DegradeSlot#entry()DegradeSlot#exit(Context, ...)ResponseTimeCircuitBreakerExceptionCircuitBreaker 断路器原理复习 断路器一般有三个状态&#xff1a;关闭、打开、半开&#xf…...

电脑系统bcd文件损坏修复方法:小白也会的修复方法

电脑系统bcd文件损坏怎么办?当电脑开机时出现bcd文件损坏&#xff0c;一般情况是由于电脑系统的引导坏了&#xff0c;需要进行修复。现在越来越多的小伙伴遇到电脑引导丢失或者安装后无法正常引导的问题&#xff0c;我们现在一般是pe下进行修复引导&#xff0c;那么电脑系统bc…...

链式存储结构

不强制要求数据在内存中集中存储&#xff0c;各个元素可以分散存储在内存中。 结点 结点由数据域、指针域组成。 头结点、头指针和首元结点 头指针&#xff1a;一个和结点类型相同的指针&#xff0c;它的特点是&#xff1a;永远指向链表中的第一个结点。上文提到过&#xf…...

Oracle 创建用户和表空间

Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…...

媒体新闻发稿要求有哪些?什么类型的稿件更好通过?

为了保证推送信息的内容质量&#xff0c;大型新闻媒体的审稿要求一向较为严格。尤其在商业推广的过程中&#xff0c;不少企业的宣传稿很难发布在这些大型新闻媒体平台上。 媒体新闻发稿要求有哪些&#xff1f;就让我们来了解下哪几类稿件更容易过审。 一、媒体新闻发稿要求有哪…...

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法&#xff1a;通过type函数返回数值的类型&#xff0c;然后通过setValue来构造一个QVariant类型的返回值。 函数&#xff1a; QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…...

3.4 Go函数作用域(标识符)

作用域标识符 简单来说&#xff0c;作用域指的是标识符可以起作用的范围&#xff0c;即其可见范围。将标识符的可见性限制在一定范围内&#xff0c;这个范围就是作用域。 把标识符约束在一定的可见范围内&#xff0c;这个范围就是作用域。 1. 宇宙块 特点&#xff1a;预定义…...

搭建Spring Boot开发环境

JDK&#xff08;1.8及以上版本&#xff09; Apache Maven 3.6.0 修改settings.xml 设置本地仓库位置 <localRepository>D:/repository</localRepository> 设置远程仓库镜像 <mirror><id>alimaven</id><name>aliyun maven</name&…...

洛谷 P5709:Apples Prologue / 苹果和虫子

【题目来源】 https://www.luogu.com.cn/problem/P5709 【题目描述】 小 B 喜欢吃苹果。她现在有 m&#xff08;1≤m≤100&#xff09;个苹果&#xff0c;吃完一个苹果需要花费 t&#xff08;0≤t≤100&#xff09;分钟&#xff0c;吃完一个后立刻开始吃下一个。现在时间过去了…...

PyTorch张量操作reshape view permute transpose

1. reshape() 和 view() view和reshape都用于改变张量的shape view是reshape的一个特例&#xff0c;view要求张量在内存中是连续的&#xff0c;否则会抛出错误&#xff0c;view只能用于contiguous的张量 reshape会自动处理contiguous的情况&#xff0c;如果张量是contiguous…...

JAVAweb学习日记(八) 请数据库模型MySQL

一、MySQL数据模型 二、SQL语言 三、DDL 详细见SQL学习日记内容 四、DQL-条件查询 五、DQL-分组查询 聚合函数&#xff1a; 分组查询&#xff1a; 六、DQL-分组查询 七、分页查询 八、多表设计-一对多&一对一&多对多 一对多-外键&#xff1a; 一对一&#xff1a; 多…...

【ElasticSearch】 Java API Client 7.17文档

​ 本文章内容根据 Elastic Search Java API Client 7.17 版本官方文档 内容翻译而来&#xff0c;用于方便后续学习翻阅 序言 这是适用于 Elasticsearch 的官方 Java API Client 文档。该客户端针对所有 Elasticsearch API 提供强类型的请求和响应。 功能 所有 Elasticsearc…...

Python “字典” 实战案例:5个项目开发实例

Python “字典” 实战案例&#xff1a;5个项目开发实例 内容摘要 本文包括 5 个使用 Python 字典的综合应用实例。具体是&#xff1a; 电影推荐系统配置文件解析器选票统计与排序电话黄页管理系统缓存系统&#xff08;LRU 缓存&#xff09; 以上每一个实例均有完整的程序代…...

Qt中Widget及其子类的相对位置移动

Qt中Widget及其子类的相对位置移动 最后更新日期&#xff1a;2025.01.25 下面让我们开始今天的主题… 一、开启篇 提出问题&#xff1a;请看上图&#xff0c;我们想要实现的效果是控件黄色的Widge&#xff08;m_infobarWidget&#xff09;t随着可视化窗口&#xff08;m_glWidge…...

4.flask-SQLAlchemy,表Model定义、增删查改操作

介绍 SQLAlchemy是对数据库的一个抽象 开发者不用直接与SQL语句打交道 Python对象来操作数据库 SQLAlchemy是一个关系型数据库 安装 flask中SQLAlchemy的配置 from flask import Flask from demo.user_oper import userdef create_app():app Flask(__name__)# 使用sessi…...

字节跳动自研HTTP开源框架Hertz简介附使用示例

字节跳动自研 HTTP 框架 Hertz Hertz 是字节跳动自研的高性能 HTTP 框架&#xff0c;专为高并发、低延迟的场景设计。它基于 Go 语言开发&#xff0c;结合了字节跳动在微服务架构中的实践经验&#xff0c;旨在提供更高效的 HTTP 服务开发体验。 1. 背景介绍 随着字节跳动业务…...

Effective C++ 规则51:编写 new 和 delete 时需固守常规

1、背景 在 C 中&#xff0c;如果你需要为类自定义 new 和 delete&#xff0c;必须遵循一些约定和规则&#xff0c;以确保内存管理的一致性、可维护性和安全性。当我们使用 new 和 delete 操作时&#xff0c;C 编译器会&#xff1a; 调用全局或类特定的 operator new 来分配内…...

[RoarCTF 2019]Easy Calc1

题目 查看页面源代码 <script>$(#calc).submit(function(){$.ajax({url:"calc.php?num"encodeURIComponent($("#content").val()),type:GET,success:function(data){$("#result").html(<div class"alert alert-success">…...

【Bug 记录】el-sub-menu 第一次进入默认不高亮

项目场景&#xff1a; 项目场景&#xff1a;el-sub-menu 第一次进入默认不高亮 问题描述 例如&#xff1a;sub-menu 的 index 后端默认传过来是 number&#xff0c;我们需要手动转为 string&#xff0c;否则会有警告&#xff0c;而且第一次进入 sub-menu 默认不高亮。 解决方…...