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

【消息队列kafka_中间件】一、快速入门分布式消息队列

        在当今大数据和分布式系统盛行的时代,消息队列作为一种关键的中间件技术,发挥着举足轻重的作用。其中,Apache Kafka 以其卓越的性能、高可扩展性和强大的功能,成为众多企业构建分布式应用的首选消息队列解决方案。本篇文章将带你深入了解 Kafka 的基础概念、架构原理、核心组件,并通过实际代码示例,让你快速上手 Kafka,揭开分布式消息队列的神秘面纱。

一、Kafka 简介与背景​

Kafka 最初是由 LinkedIn 公司开发,用于处理公司内部大规模的实时数据流。随着其开源并在社区的不断发展壮大,Kafka 已成为一款广泛应用于大数据处理、实时流计算、日志收集与处理、系统解耦等众多领域的分布式消息队列系统。​

与传统消息队列相比,Kafka 具有显著的优势。它能够支持超高的吞吐量,每秒可以处理数十万甚至数百万条消息,这使得它在应对海量数据传输时表现出色。同时,Kafka 具备低延迟的特性,消息的生产和消费延迟可以控制在毫秒级,满足了许多对实时性要求极高的应用场景。此外,Kafka 的分布式架构设计使其具有强大的可扩展性,能够轻松应对不断增长的数据处理需求。

二、关键概念剖析​

2.1 生产者(Producer)​

生产者是 Kafka 系统中负责发送消息的组件。在实际应用中,生产者通常是由业务系统中的某个模块或服务担当,它将业务数据封装成 Kafka 能够识别的消息格式,并发送到指定的主题(Topic)中。​

以 Java 语言为例,以下是一个简单的 Kafka 生产者代码示例:

import org.apache.kafka.clients.producer.*;
import java.util.Properties;public class KafkaProducerExample {public static void main(String[] args) {// 设置生产者属性Properties props = new Properties();// Kafka集群地址,格式为host1:port1,host2:port2,...props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");// 键的序列化方式,这里使用字符串序列化props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");// 值的序列化方式,同样使用字符串序列化props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");// 创建生产者实例KafkaProducer<String, String> producer = new KafkaProducer<>(props);// 要发送的消息内容String messageKey = "key1";String messageValue = "Hello, Kafka!";// 创建消息对象,指定主题和键值对ProducerRecord<String, String> record = new ProducerRecord<>("test - topic", messageKey, messageValue);try {// 发送消息并获取响应RecordMetadata metadata = producer.send(record).get();System.out.println("Message sent successfully to partition " + metadata.partition() +" with offset " + metadata.offset());} catch (Exception e) {e.printStackTrace();} finally {// 关闭生产者,释放资源producer.close();}}
}

2.2 消费者(Consumer)​

消费者负责从 Kafka 主题中读取消息并进行处理。Kafka 的消费者是以消费者组(Consumer Group)的形式存在的,同一消费者组内的消费者共同消费主题中的消息,通过负载均衡的方式提高消息处理的效率。不同消费者组之间相互独立,每个消费者组都可以完整地消费主题中的所有消息。​

以下是一个 Java 语言的 Kafka 消费者代码示例:

import org.apache.kafka.clients.consumer.*;
import java.util.Arrays;
import java.util.Properties;public class KafkaConsumerExample {public static void main(String[] args) {// 设置消费者属性Properties props = new Properties();// Kafka集群地址props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");// 消费者组ID,同一组内的消费者共享消费偏移量props.put(ConsumerConfig.GROUP_ID_CONFIG, "test - group");// 键的反序列化方式,这里使用字符串反序列化props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");// 值的反序列化方式,同样使用字符串反序列化props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer");// 自动提交消费偏移量,默认true,建议设置为false,手动管理偏移量以确保数据不丢失props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, "false");// 创建消费者实例KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);// 订阅主题consumer.subscribe(Arrays.asList("test - topic"));try {while (true) {// 拉取消息,设置拉取超时时间为100毫秒ConsumerRecords<String, String> records = consumer.poll(100);for (ConsumerRecord<String, String> record : records) {System.out.println("Received message: " +"topic = " + record.topic() +", partition = " + record.partition() +", offset = " + record.offset() +", key = " + record.key() +", value = " + record.value());}// 手动提交消费偏移量consumer.commitSync();}} catch (Exception e) {e.printStackTrace();} finally {// 关闭消费者,释放资源consumer.close();}}
}

2.3 主题(Topic)​

主题是 Kafka 中消息分类存储的逻辑概念,类似于数据库中的表。每个主题可以包含多个分区(Partition),生产者发送的消息会被存储到指定的主题中,消费者则通过订阅主题来获取消息。在实际应用中,通常会根据不同的业务类型或数据类型创建不同的主题。例如,在一个电商系统中,可以创建 “order - topic” 用于存储订单相关的消息,“user - behavior - topic” 用于存储用户行为数据相关的消息等。​

2.4 分区(Partition)​

分区是 Kafka 实现高吞吐量和可扩展性的关键机制。每个主题可以被划分为多个分区,这些分区分布在 Kafka 集群的不同 Broker 节点上。当生产者发送消息时,Kafka 会根据一定的策略将消息分配到主题的某个分区中。常见的分区策略有按消息键的 Hash 值分配(如果消息带有键)和轮询分配(如果消息没有键)。​

分区的好处主要有以下几点:首先,通过将数据分散存储在多个分区上,可以提高数据存储和读取的并行度,从而提升整体的吞吐量。例如,在一个拥有多个 Broker 节点的集群中,每个 Broker 可以同时处理不同分区的读写请求,大大加快了数据处理速度。其次,分区还可以实现数据的冗余备份。Kafka 会为每个分区创建多个副本,其中一个副本作为领导者(Leader)副本,负责处理读写请求,其他副本作为跟随者(Follower)副本,从领导者副本同步数据。当领导者副本所在的 Broker 节点发生故障时,Kafka 会自动从跟随者副本中选举出一个新的领导者副本,确保数据的可用性和一致性。

三、Kafka 集群架构​

Kafka 集群由多个 Broker 节点组成,每个 Broker 节点实际上就是一个 Kafka 服务器进程。这些 Broker 节点共同协作,实现了 Kafka 的分布式存储和消息处理功能。​

在 Kafka 集群中,Zookeeper 扮演着至关重要的角色。Zookeeper 是一个分布式协调服务,它负责管理 Kafka 集群的元数据信息,包括 Broker 节点的注册与发现、主题与分区的元数据管理、分区领导者副本的选举等。具体来说,当一个新的 Broker 节点加入集群时,它会向 Zookeeper 注册自己的信息,Zookeeper 会将这些信息同步给其他 Broker 节点,使得整个集群能够感知到新节点的加入。在主题与分区管理方面,Zookeeper 存储了每个主题的分区信息,包括分区的数量、每个分区的领导者副本和跟随者副本所在的 Broker 节点等。当某个分区的领导者副本出现故障时,Zookeeper 会触发领导者选举过程,从跟随者副本中选举出一个新的领导者副本,确保分区的正常工作。

如上图所示,Kafka 集群中的多个 Broker 节点通过 Zookeeper 进行协调和管理。生产者和消费者通过与 Broker 节点进行通信来发送和接收消息,而 Zookeeper 则在幕后负责维护集群的一致性和稳定性。

四、安装与环境搭建​

4.1 下载 Kafka​

首先,从 Apache Kafka 官方网站(Apache Kafka)下载 Kafka 的安装包。目前 Kafka 的最新版本可以在官网上找到,选择适合自己操作系统的安装包进行下载。例如,对于 Linux 系统,可以下载.tgz格式的压缩包。​

4.2 解压安装包​

下载完成后,使用解压命令将安装包解压到指定目录。假设将安装包下载到了/downloads目录下,解压命令如下:

tar -xzf kafka_2.13 - 3.3.1.tgz -C /usr/local/

上述命令将 Kafka 安装包解压到了/usr/local/目录下,解压后的目录名称为kafka_2.13 - 3.3.1,其中2.13是 Scala 的版本号,3.3.1是 Kafka 的版本号。​

4.3 配置环境变量​

为了方便在命令行中使用 Kafka 的命令工具,需要将 Kafka 的bin目录添加到系统的环境变量中。在 Linux 系统中,可以编辑~/.bashrc文件,在文件末尾添加以下行:

export PATH=$PATH:/usr/local/kafka_2.13 - 3.3.1/bin

然后执行以下命令使环境变量生效:

source ~/.bashrc

4.4 配置 Kafka​

Kafka 的主要配置文件位于其安装目录下的config文件夹中,其中最重要的配置文件是server.properties。在这个文件中,可以配置 Kafka 的各种参数,如 Kafka 监听的端口、日志存储路径、连接 Zookeeper 的地址等。​

以下是一些常见的配置参数及说明:

# Kafka监听的端口,默认9092
listeners=PLAINTEXT://localhost:9092
# 日志存储路径,可以配置多个路径,用逗号分隔
log.dirs=/tmp/kafka - logs
# 连接Zookeeper的地址,格式为host1:port1,host2:port2,...
zookeeper.connect=localhost:2181
# 每个分区的副本因子,即每个分区有多少个副本,建议设置为大于1的奇数,以确保容错
num.partitions=1
replica.fetch.max.bytes=1048576

4.5 启动 Zookeeper 与 Kafka​

在完成 Kafka 配置后,需要先启动 Zookeeper,因为 Kafka 依赖 Zookeeper 进行集群管理。在 Kafka 安装目录下,执行以下命令启动 Zookeeper:

bin/zookeeper - server - start.sh config/zookeeper.properties

上述命令会使用config/zookeeper.properties配置文件启动 Zookeeper 服务。启动成功后,终端会输出一些启动日志信息,显示 Zookeeper 已正常运行并监听在指定端口(默认为 2181)。​

接着,启动 Kafka 服务,执行命令:

bin/kafka - server - start.sh config/server.properties

此命令通过config/server.properties配置文件启动 Kafka 服务器进程。启动过程中,日志会显示 Kafka 加载配置、注册到 Zookeeper 等信息。当看到类似 “[KafkaServer id=0] started” 的日志时,表明 Kafka 已成功启动。

4.6 使用 Kafka 命令行工具验证安装​

Kafka 提供了丰富的命令行工具,方便我们进行各种操作与验证。例如,使用以下命令创建一个新的主题:

bin/kafka - topics.sh --create --bootstrap - servers localhost:9092 --replication - factor 1 --partitions 1 --topic new - topic

参数说明:​

  • --create:表示执行创建主题操作。​
  • --bootstrap - servers localhost:9092:指定 Kafka 集群地址,这里是本地的 9092 端口。​
  • --replication - factor 1:设置主题的副本因子为 1,即每个分区只有一个副本。在生产环境中,为了数据冗余与容错,通常设置为大于 1 的奇数,如 3 或 5。​
  • --partitions 1:指定主题的分区数量为 1。根据业务需求可调整,若业务数据量较大且对并行处理要求高,可设置多个分区。​
  • --topic new - topic:指定要创建的主题名称为new - topic。

创建成功后,可使用以下命令查看当前 Kafka 集群中的所有主题:

bin/kafka - topics.sh --list --bootstrap - servers localhost:9092

该命令会列出所有已创建的主题名称,若能看到刚刚创建的new - topic,则说明主题创建成功。​

还可以使用生产者和消费者命令行工具进行消息的发送与接收测试。首先,启动一个生产者终端,执行命令:

bin/kafka - console - producer.sh --bootstrap - servers localhost:9092 --topic new - topic

启动后,终端会等待输入消息。此时,输入任意消息内容并回车,消息就会被发送到new - topic主题中。​

然后,在另一个终端启动消费者,执行命令:

bin/kafka - console - consumer.sh --bootstrap - servers localhost:9092 --topic new - topic --from - beginning

--from - beginning参数表示从主题的起始位置开始消费消息。

启动消费者后,就能看到之前生产者发送的消息,这表明 Kafka 的基本功能正常,安装与环境搭建成功。

通过这些命令行工具的操作,不仅验证了安装,也进一步熟悉了 Kafka 的基本使用方式。你将发现其在分布式消息处理领域的强大功能,无论是构建大规模数据处理系统,还是实现复杂业务系统的解耦与异步通信,Kafka 都能成为有力的技术支撑。

相关文章:

【消息队列kafka_中间件】一、快速入门分布式消息队列

在当今大数据和分布式系统盛行的时代&#xff0c;消息队列作为一种关键的中间件技术&#xff0c;发挥着举足轻重的作用。其中&#xff0c;Apache Kafka 以其卓越的性能、高可扩展性和强大的功能&#xff0c;成为众多企业构建分布式应用的首选消息队列解决方案。本篇文章将带你深…...

【Axure元件分享】移动端滑动拨盘地区级联选择器

在移动端产品设计中&#xff0c;地区级联选择器&#xff08;省/市/区&#xff09;是用户信息录入场景的核心组件&#xff0c;尤其在电商收货地址、政务信息填报等高频业务中直接影响表单转化率。本文将介绍一款基于Axure的三级动态联动机型地区选择器&#xff0c;通过仿真级联滚…...

宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析

非常感谢您对宁德时代的关注。祝贺您通过宁德时代校园招聘的专业面试环节&#xff0c;现邀请您参与完成以下测评。本轮共两份测评&#xff0c;每份测评对您的最终结果都非常重要&#xff0c;请务必在收到测评后48小时内完成!本测评需要进行远程监考&#xff0c;如果您无法或不愿…...

Python-Django+vue宠物服务管理系统功能说明

❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...

洛谷普及B3691 [语言月赛202212] 狠狠地切割(Easy Version)

题目&#xff1a;[语言月赛202212] 狠狠地切割(Easy Version) 题号&#xff1a;B3691 难度&#xff1a;普及一 末尾包含对二分法优化的详细解释 题目分析 最后一句应该是本题的考查关键&#xff0c;关于筛选算法的时间优化&#xff0c; 但从功能理论上&#xff0c;我找到了…...

FPGA_BD Block Design学习(一)

PS端开发流程详细步骤 1.第一步&#xff1a;打开Vivado软件&#xff0c;创建或打开一个工程。 2.第二步&#xff1a;在Block Design中添加arm核心&#xff0c;并将其配置为IP核。 3.第三步&#xff1a;配置arm核心的外设信息&#xff0c;如DDR接口、时钟频率、UART接口等。 …...

Collection vs Collections:核心区别与面试指南

Collection vs Collections&#xff1a;核心区别与面试指南 一、本质区别&#xff08;核心记忆点&#xff09; 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类&#xff08;但构造器私有&#xff0c;不可实…...

sqlite3基本语句

创建表 CREATE TABLE student ( id INTEGER PRIMARY KEY, -- 学号&#xff0c;主键 name TEXT NOT NULL, -- 姓名&#xff0c;不能为空 age INTEGER, -- 年龄 gender TEXT -- 性别 ); SQLite常用数据类型 主键 …...

jupyter notebook 显示conda虚拟环境

使用 nb_conda_kernels 安装 nb_conda_kernels&#xff1a;这个包可以自动从你的 Conda 环境中发现并列出内核。 conda activate base # 确保你在 base 环境或任何其他环境中安装 conda install nb_conda_kernels显示jupyternotebook当前所在的位置。...

华为海思IC前端中后端(COTXPU)岗位笔试机考题

近期华为海思即将开始IC设计实现实习岗位机考。小编今天给大家分享下华为海思相关机考题目。 华为海思2025届校招笔试面试经验分享 每年IC秋招笔试其实也是从题库中随机抽出一些题。 华为海思2025届校招笔试面试经验分享华为海思机考主要分三个方向&#xff0c;分别是物理方向…...

HarmonyOS NEXT 实现滑动拼图验证码功能

大家好&#xff0c;我是 V 哥。 在 Gitee 上看到一个用 Java 实现的 HarmonyOS 滑动拼图验证码功能&#xff0c;已经太老了&#xff0c;鸿蒙开发推荐使用 ArkTS 语言&#xff0c;V 哥来改造一下。 以下是基于 ArkTS 的实现方案。由于鸿蒙系统的特性差异&#xff0c;这里提供核…...

【XML基础-1】深入理解XML:介绍、语法规则与实际应用

XML&#xff08;可扩展标记语言&#xff09;作为数据表示和交换的标准格式&#xff0c;自1998年问世以来已成为现代计算领域不可或缺的一部分。本文将全面介绍XML的基础概念、详细语法规则以及它在各领域中的实际应用。 1. 什么是XML&#xff1f; XML&#xff08;eXtensible …...

STM32 HAL库扩大USB CDC的输入缓冲区

STM32 HAL库,使用USB, 扩大输入暂存区的方法 使用STM32的USB通讯CubeMX建立配置Serial Wire时钟配置USB配置时钟频率设置代码编写运行效果总结使用STM32的USB通讯 STM32可以不用使用串口转换直接和USB通讯。这给串口调试提供了极大的方便。编程,我使用了STM32CubeIDE编程。这…...

迭代器模式深度解析与实战案例

一、模式定义 迭代器模式&#xff08;Iterator Pattern&#xff09; 是一种行为设计模式&#xff0c;提供一种方法顺序访问聚合对象的元素&#xff0c;无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离&#xff0c;实现 遍历与存储的解耦。 二、核心组件 组件作用…...

Kotlin协程实用模版合集

目录 ✅ Kotlin 协程实用模板合集&#xff08;适合 Android 项目&#xff09; &#x1f4e6; 1. 基础挂起函数封装&#xff08;Repository 层&#xff09; ⚙️ 2. ViewModel 中使用协程 状态处理 ⏱️ 3. 带超时控制的挂起操作 &#x1f91d; 4. 并发请求合并&#xff0…...

基于Flask的Windows事件ID查询系统开发实践

基于Flask的Windows事件ID查询系统开发实践 一、项目背景与功能概述 Windows操作系统的事件日志系统记录了数百种不同的事件ID&#xff0c;每个ID对应特定的系统事件。本文介绍如何构建一个基于Web的事件ID查询系统&#xff0c;主要实现以下功能&#xff1a; 数据可视化展示…...

机器人编程基础---C语言中的运算符

C语言中的运算符 算术运算符关系运算符逻辑运算符位运算符C语言提供了多种运算符来执行不同的操作。 算术运算符 + 加法- 减法* 乘法/ 除法% 取模(求余)++ 自增-- 自减int a = 10, b = 5; int sum = a + b;...

设计模式之迭代器模式:遍历的艺术与实现

引言 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供了一种顺序访问聚合对象中各个元素的方法&#xff0c;而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦&#xff0c;使得我们可以用统一的方式处理不同的集合结构。…...

React七案例中

代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择&#xff0c;地图找房页面的复用&#xff0c;在 components 目录中创建组件 NavHeader&#xff0c;把之前城市列表写过的样式复制到 NavHeader.scss 下&#xff0c;在该组件中封装 antd-mobile 组件库中的 N…...

消息中间件篇——RabbitMQ,Kafka

RabbitMQ 如何保证消息不丢失&#xff1f; 生产者确认机制 消息持久化 消费者确认机制 RabbitMQ如何保证消息不丢失&#xff1f; RabbitMQ的重复消费问题如何解决&#xff1f; RabbitMQ中死信交换机&#xff08;RabbitMQ延迟队列有了解过吗&#xff1f;&#xff09; 延迟队列…...

HOW - 实现 useClickOutside 或者 useClickAway

场景 在开发过程中经常遇到需要点击除某div范围之外的区域触发回调&#xff1a;比如点击 dialog 外部区域关闭。 手动实现 import { useEffect } from "react"/*** A custom hook to detect clicks outside a specified element.* param ref - A React ref object…...

青少年编程考试 CCF GESP Python七级认证真题 2025年3月

Python 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09; 第 1 题 下列哪个选项是python中的关键字&#xff1f; A. function B. class C. method D. object…...

兆讯MH2103系列pin to pin替代STM32F103,并且性能超越

MH2103 是一款高性能的 32 位微控制器&#xff0c;由兆讯恒达推出&#xff0c;主要用于替代 STM32F103 系列产品。以下是关于 MH2103 芯片的详细介绍&#xff1a; 技术规格 内核与主频&#xff1a; 采用高性能 32 位 Cortex-M3 内核&#xff0c;最高工作频率可达 216 MHz。支…...

h5使用dsBridge与原生app通信--桥方法

dsBridge是一个轻量级的 JS 和原生 App 的通信桥梁库,使用起来比原生方便不少支持&#xff1a; 1.H5 调用 Native 方法&#xff08;JS → Native&#xff09; 2.Native 调用 H5 方法&#xff08;Native → JS&#xff09; 3.支持参数传递和异步回调 4.支持 Android、iOS、以…...

package.json配置项积累

peerDependencies 用途&#xff1a;peerDependencies 主要用于声明一个包在其宿主项目中期望安装的依赖版本。它通常用于确保插件或库与特定版本的其他库兼容。 行为&#xff1a; 在 npm v7之前&#xff0c;如果宿主项目未安装 peerDependencies 中列出的依赖&#xff0c;则不…...

Python安装软件包报错 fatal error: Python.h: No such file or directory

Python安装软件包报错 fatal error: Python.h: No such file or directory Failed to import transformers.integrations.integration_utils because of the following error (look up to see its traceback): Failed to import transformers.modeling_utils because of the f…...

数据结构与算法-图论-复习1(单源最短路,全源最短路,最小生成树)

1. 单源最短路 单一边权 BFS 原理&#xff1a;由于边权为单一值&#xff0c;可使用广度优先搜索&#xff08;BFS&#xff09;来求解最短路。BFS 会逐层扩展节点&#xff0c;由于边权相同&#xff0c;第一次到达某个节点时的路径长度就是最短路径长度。 用法&#xff1a;适用…...

uniapp:微信小程序,一键获取手机号

<button open-type"getPhoneNumber" getphonenumber"getphonenumber">一键获取</button> <script>export default {methods: {getphonenumber(e){uni.login({provider: weixin,success: (res)> {console.log(res);},});},}} </scr…...

协作焊接机器人

一、核心定义与核心特点 1. 定义 协作焊接机器人是基于协作机器人本体(具备力传感、轻量化、安全停机等特性),集成焊接电源、焊枪、视觉 / 电弧传感器等模块,实现人机共融焊接作业的自动化设备。其核心在于: 安全协作:支持与焊工共同工作,无需物理隔离;柔性适配:快速…...

SpringBoot和微服务学习记录Day2

微服务 微服务将单体应用分割成更小的的独立服务&#xff0c;部署在不同的服务器上。服务间的关联通过暴露的api接口来实现 优点&#xff1a;高内聚低耦合&#xff0c;一个模块有问题不影响整个应用&#xff0c;增加可靠性&#xff0c;更新技术方便 缺点&#xff1a;增加运维…...

【CornerTag组件详解:优雅的角标设计与实现】

CornerTag组件详解&#xff1a;优雅的角标设计与实现 组件完整代码 <template><divclass"corner-tag":style"{background: bgColor,padding: ${paddingY}px 0,fontSize: fontSize px,...customStyle}"><slot /></div> </tem…...

Mybatis-缓存详解

什么是缓存&#xff1f; 存在内存中的临时数据 将用户经常查询的数据放在缓存中&#xff0c;用户去查询数据就不用从磁盘上&#xff08;关系型数据库数据文件&#xff09;查询&#xff0c;从缓存中查询&#xff0c;从而提高查询效率&#xff0c;解决了高并发系统的性能问题 经…...

WHAT - React useId vs uuid

目录 uuiduseId适用场景语法示例注意事项 复杂示例示例&#xff1a;动态表单列表 useId解读重点 useId vs uuid一句话总结对比表格示例对比useId 用于表单uuid() 用在 UI 会出问题uuid 的适合场景 总结建议 uuid 在 WHAT - Math.random&#xff1f;伪随机&#xff1f; 中我们…...

Leetcode 跳跃游戏 II (贪心算法)

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...

银河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑梦之路

环境说明 1. 操作系统版本: 银河麒麟V10 2. CPU架构&#xff1a;X86 3. Python版本&#xff1a;3.12.9 4. 大模型&#xff1a;mistral:7b-instruct 准备工作 1. 编译安装python 3.12 # 下载python 源码wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…...

【物联网】GPT延时

文章目录 前言一、GPT实现延时1. 定时器介绍2. I.MX6ull GPT定时器介绍1&#xff09;GPT定时器工作原理2&#xff09;GPT的输入捕获3&#xff09;GPT的输出比较 3. 高精度延时实现1&#xff09;实现思路 前言 使用 GPT 实现延时控制以及基于 PWM 实现蜂鸣器发声与频率调节这两…...

【套题】大沥2019年真题——第4题

04.数字圈 题目描述 当我们写数字时会发现有些数字有封闭区域&#xff0c;有的数字没有封闭区域。 数字 0 有一个封闭区域&#xff0c;数字 1、2、 3 都没有封闭区域&#xff0c;数字 4 有一个封闭区域&#xff0c;数字 5 没有封闭区域&#xff0c;数字 6 有一个封闭区域&#…...

idea 安装 proxyai 后的使用方法

1. 可以默认使用ProxyAi 安装后使用如下配置可以进行代码提示 配置 使用示例 2. 这里有必要说一下&#xff0c;这里要选择提供服务的ai 选择后才可以使用ProxyAI或者Custom openAI 3. 可以使用custom openAi, 要自行配置 1&#xff09;配置 code completions 这是header …...

构建实时、融合的湖仓一体数据分析平台:基于 Delta Lake 与 Apache Iceberg

1. 执行摘要 挑战&#xff1a; 传统数据仓库在处理现代数据需求时面临诸多限制&#xff0c;包括高昂的存储和计算成本、处理海量多样化数据的能力不足、以及数据从产生到可供分析的端到端延迟过高。同时&#xff0c;虽然数据湖提供了低成本、灵活的存储&#xff0c;但往往缺乏…...

数据库的MVCC机制详解

MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是数据库系统中常用的并发控制机制&#xff0c;它允许数据库在同一时间点保存数据的多个版本&#xff0c;从而实现非阻塞的读操作&#xff0c;提高并发性能。 MVCC的核心思想是&…...

未来与自然的交响:蓉城生态诗篇

故事背景 故事发生在中国四川成都&#xff0c;描绘了未来城市中科技与自然共生的奇迹。通过六个极具创意的生态场景&#xff0c;展现人类如何以诗意的方式重构与自然的连接&#xff0c;在竹海保育、文化传承、能源循环等维度编织出震撼心灵的未来图景。 故事内容 当晨雾在竹纤维…...

【愚公系列】《高效使用DeepSeek》062-图书库存管理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...

汽车软件开发常用的建模工具汇总

目录 往期推荐 1.Enterprise Architect&#xff08;EA&#xff09; 2.MATLAB/Simulink 3.TargetLink 4.Rational Rhapsody 5.AUTOSAR Builder 6.PREEvision 总结 往期推荐 2025汽车行业新宠&#xff1a;欧企都在用的工具软件ETAS工具链自动化实战指南&#xff1c;一&am…...

六、继承(二)

1 继承与友元 如果一个基类中存在友元关系&#xff0c;那么这个友元关系能不能继承呢&#xff1f; 例&#xff1a; #include <iostream> using namespace std; class Student; class Person { public:friend void Display(const Person& p, const Student& s)…...

flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据

flink介绍 1&#xff09;Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行&#xff0c;以内存执行速度和任意规模来执行计算。 2&#xff09;在实时计算或离线任务中&#xff0c;往往需要…...

【Rust开发】Rust快速入门,开发出Rust的第一个Hello World

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

Flink框架:批处理和流式处理与有界数据和无界数据之间的关系

本文重点 从数据集的类型来看&#xff0c;数据集可以分为有界数据和无界数据两种&#xff0c;从处理方式来看&#xff0c;有批处理和流处理两种。一般而言有界数据常常使用批处理方式&#xff0c;无界数据往往使用流处理方式。 有界数据和无界数据 有界数据有一个明确的开始和…...

基于 Spring Boot 瑞吉外卖系统开发(四)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;四&#xff09; 新增分类 新增分类UI界面&#xff0c;两个按钮分别对应两个UI界面 两个页面所需的接口都一样&#xff0c;请求参数type值不一样&#xff0c;type1为菜品分类&#xff0c;type2为套餐分类。 请求方法都为POST。…...

患者根据医生编号完成绑定和解绑接口

医疗系统接口文档 一、Controller 层 1. InstitutionDoctorController 医疗机构和医生相关的控制器&#xff0c;提供机构查询、医生查询、绑定解绑医生等功能。 RestController RequestMapping("/institution-doctor") public class InstitutionDoctorController…...

Flutter性能优化终极指南:从JIT到AOT的深度调优

一、Impeller渲染引擎调优策略 1.1 JIT预热智能预编译 // 配置Impeller预编译策略 void configureImpeller() {ImpellerEngine.precacheShaders(shaders: [lib/shaders/skinned_mesh.vert,lib/shaders/particle_system.frag],warmupFrames: 30, // 首屏渲染前预编译帧数cach…...