Kafka快速入门+SpringBoot简单的秒杀案例

1. 主题相关

1.1 创建主题

kafka-topics.sh --create --bootstrap-server [服务器地址] --replication-factor [副本数] --partitions [分区数] --topic [主题名]

liber@liber-VMware-Virtual-Platform:/home/zookeeper$ docker-compose exec kafka /bin/bash #进入kafka容器
bash-5.1# kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic liber #创建一个主题名叫liber
Created topic liber. 

注:具有 1 个副本和 3 个分区     

        在 Kafka 中,分区是主题的子集,每个主题可以分为多个分区。每个分区都是一个独立的日志序列,可以被存储在集群中的不同服务器上。

       每个分区有一个领导者副本,负责处理所有读取和写入请求。领导者副本将写入的数据同步到其他副本。除了领导者副本外,其他副本称为追随者副本。它们从领导者那里复制数据,并不直接处理客户端的读写请求。

1.2 查询主题

kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic [主题名]

bash-5.1# kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic liber
Topic: liber    TopicId: tTzq8pWZTIekVoXT35QPWg PartitionCount: 3       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: liber    Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: liber    Partition: 1    Leader: 2       Replicas: 2     Isr: 2
        Topic: liber    Partition: 2    Leader: 3       Replicas: 3     Isr: 3
注:如果省略 --topic 参数,则列出所有主题的详细信息。

1.3 修改主题 

kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic [主题名] --partitions [新的分区数]

bash-5.1# kafka-topics.sh --alter --bootstrap-server localhost:9092 --topic liber --partitions 5
bash-5.1# kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic liber
Topic: liber    TopicId: tTzq8pWZTIekVoXT35QPWg PartitionCount: 5       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: liber    Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: liber    Partition: 1    Leader: 2       Replicas: 2     Isr: 2
        Topic: liber    Partition: 2    Leader: 3       Replicas: 3     Isr: 3
        Topic: liber    Partition: 3    Leader: 1       Replicas: 1     Isr: 1
        Topic: liber    Partition: 4    Leader: 2       Replicas: 2     Isr: 2

注:修改liber的分区数到 5

1.4 删除主题

kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic [主题名]

bash-5.1# kafka-topics.sh --delete --bootstrap-server localhost:9092 --topic liber
bash-5.1# kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic liber
Error while executing topic command : Topic 'liber' does not exist as expected
[2024-07-22 02:16:33,325] ERROR java.lang.IllegalArgumentException: Topic 'liber' does not exist as expected
        at kafka.admin.TopicCommand$.kafka$admin$TopicCommand$$ensureTopicExists(TopicCommand.scala:542)
        at kafka.admin.TopicCommand$AdminClientTopicService.describeTopic(TopicCommand.scala:317)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:69)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)
 (kafka.admin.TopicCommand$)
 

2. 生产者

       在 Apache Kafka中,生产者(Producer)是负责将数据发送到指定Kafka主题(Topics)的客户端应用程序。生产者可以灵活地发送消息到一个或多个Kafka主题,支持各种发布模式和消息确认机制,以确保消息的可靠性和持久性。

       在 Apache Kafka 的上下文中,broker地址列表指 Kafka 集群中一组或多组 broker(服务器)的地址。这些地址用于初始化生产者(producers)、消费者(consumers)、以及其他客户端连接到Kafka集群的过程。

kafka-console-producer.sh --broker-list [broker地址列表] --topic [主题名]

bash-5.1# kafka-console-producer.sh --broker-list localhost:9092 --topic liber
>This is my first event
>This is my second event

注:Ctrl-C停止生产者客户端。

3. 消费者

       在 Apache Kafka中,消费者(Consumer)是从Kafka主题(Topics)中读取数据的客户端应用。消费者可以独立使用,或者作为一个消费者群组(Consumer Group)的一部分来运行。使用消费者群组可以有效地在多个消费者实例间分配主题的分区(Partitions),从而提升数据处理的并行性和效率。

kafka-console-consumer.sh --bootstrap-server [broker地址列表] --topic [主题名] [其他可选参数]
  • --from-beginning:如果加上这个参数,消费者将从主题的开始读取所有消息,而不是只读取新消息。
  • --group:指定消费者群组的ID,用于在多个消费者间共享主题的分区。

bash-5.1# kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic liber --from-beginning
This is my first event
This is my second event

注:Ctrl-C停止消费者客户端。

4. 消费者组

 4.2 隐式创建组

kafka-console-consumer.sh --bootstrap-server [broker地址列表] --topic [主题名] --group [新的或现有的消费者组ID]

        消费者组的创建是隐式进行的,当一个或多个消费者客户端连接到 Kafka 并订阅主题时自动完成的。每个消费者在连接时会指定一个组ID,这个组ID在所有消费者中应该是一致的,以表示他们属于同一个消费者组。

bash-5.1# kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic liber --group example_group #创建名为example_group的用户组
注:Ctrl-C停止等待。

 4.1 查询消费组(所有)

kafka-consumer-groups.sh --bootstrap-server [broker地址列表] --list

bash-5.1# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
example_group
KMOffsetCache-cmak

4.2 查询消费组(精确) 

kafka-consumer-groups.sh --bootstrap-server [broker地址列表] --describe --group [消费者组名]

bash-5.1# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group example_group

Consumer group 'example_group' has no active members.

GROUP           TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
example_group   liber           0          1               1               0               -               -               -
example_group   liber           1          0               0               0               -               -               -
example_group   liber           2          1               1               0               -               -               -

bash-5.1# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group KMOffsetCache-cmak

GROUP              TOPIC              PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID                                                        HOST            CLIENT-ID
KMOffsetCache-cmak __consumer_offsets 22         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1
KMOffsetCache-cmak __consumer_offsets 30         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1
KMOffsetCache-cmak __consumer_offsets 25         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1
KMOffsetCache-cmak __consumer_offsets 35         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1
KMOffsetCache-cmak __consumer_offsets 37         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1
KMOffsetCache-cmak __consumer_offsets 38         -               0               -               consumer-KMOffsetCache-cmak-1-3829d91b-249f-491c-8d69-446462d60d61 /192.168.186.77 consumer-KMOffsetCache-cmak-1

4.3 删除消费组

kafka-consumer-groups.sh --bootstrap-server [broker地址列表] --delete --group [消费者组名]

bash-5.1# kafka-consumer-groups.sh --bootstrap-server localhost:9092 --delete --group example_group
Deletion of requested consumer groups ('example_group') was successful.

5. 部分配置(参考)

# Kafka Broker 的基本设置
broker.id=1
# 每个 Kafka broker 需要一个唯一的 ID。在 Kafka 集群中,每个节点都必须有不同的 ID。port=9092
# Kafka 服务端监听的端口,客户端通过此端口与 Kafka 通信。num.network.threads=3
# 处理网络请求的线程数,比如接受连接、接受请求、发送响应。调整此值以匹配你的服务器的网络I/O性能。num.io.threads=8
# 服务器用于读写操作的线程数。这应该与你的磁盘数量相匹配,以平衡磁盘I/O负载。socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
# Socket 发送和接收缓冲区的大小。增加这些值可以提高网络性能,但会增加内存消耗。log.dirs=/tmp/kafka-logs
# Kafka 存储消息和日志的目录。可以指定多个目录,Kafka 会平衡跨这些目录的数据。num.partitions=1
# Kafka 创建新主题时默认的分区数。分区是并行处理的基础,更多的分区意味着更高的并发。# 数据保留策略
log.retention.hours=168
# Kafka 日志文件保留的最长时间,单位为小时。超过这个时间的日志文件将被自动删除。log.segment.bytes=1073741824
# Kafka 日志段的大小。当日志文件达到这个大小时,会新建一个日志文件。log.retention.check.interval.ms=300000
# Kafka 检查日志文件是否需要删除的频率,单位为毫秒。# 副本和同步
default.replication.factor=1
# 主题的默认副本数。副本数决定了数据的冗余程度和可用性。min.insync.replicas=1
# 在认为生产请求成功之前,必须有这么多副本同步了数据。# ZooKeeper 配置
zookeeper.connect=localhost:2181
# Kafka 使用 ZooKeeper 来维护集群状态,如存储所有broker、主题等信息。此项配置ZooKeeper服务的连接信息。zookeeper.connection.timeout.ms=6000
# 连接到 ZooKeeper 的超时时间,单位为毫秒。# 日志压缩和清理
log.cleanup.policy=delete
# 日志的清理策略。"delete" 根据时间或文件大小删除日志;"compact" 根据键合并日志。# 安全性设置
listeners=PLAINTEXT://:9092
# 定义 Kafka 服务的监听地址,支持 PLAINTEXT、SSL 等多种协议。# 高级SSL和SASL配置
# ssl.keystore.location=/path/to/keystore.jks
# ssl.keystore.password=your-keystore-pass
# ssl.key.password=your-key-pass
# sasl.enabled.mechanisms=PLAIN
# sasl.mechanism.inter.broker.protocol=PLAIN
# 配置 SSL 和 SASL,用于安全的客户端和 broker 之间的通信。

 参考文档

6. 简单案例(秒杀)

6.1 创建主题

bash-5.1# kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic product
Created topic product.
bash-5.1#  kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic product
Topic: product  TopicId: JdkFmgvOQlKBCCsCVDTo1Q PartitionCount: 3       ReplicationFactor: 1    Configs: segment.bytes=1073741824
        Topic: product  Partition: 0    Leader: 1       Replicas: 1     Isr: 1
        Topic: product  Partition: 1    Leader: 2       Replicas: 2     Isr: 2
        Topic: product  Partition: 2    Leader: 3       Replicas: 3     Isr: 3

6.2 项目结构

6.3 Maven依赖 

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.2</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
</dependencies>

6.4 数据库操作

create database orders;use orders;CREATE TABLE products
(product_id   BIGINT AUTO_INCREMENT PRIMARY KEY,product_name VARCHAR(255)   NOT NULL,price        DECIMAL(10, 2) NOT NULL,stock        INT            NOT NULL,description  TEXT,version      INT            NOT NULL DEFAULT 0
);
INSERT INTO products (products.product_id,product_name, price, stock, description)
VALUES (1,'大白菜', 5.99, 200, '新鲜的大白菜,来自农民的直供'),(2,'红富士苹果', 3.50, 150, '甜美多汁的红富士苹果,一箱包含20个'),(3,'五花肉', 45.00, 100, '优质五花肉,适合各种烹饪方式'),(4,'东北大米', 60.00, 300, '东北粳米,粒粒香甜,适合日常食用'),(5,'速溶咖啡', 70.00, 80, '进口速溶咖啡,简单快捷,口味纯正');

6.5 application.yml

spring:application:name: spring_kafkadatasource:url: jdbc:mysql://localhost:3306/orders?useSSL=false&serverTimezone=UTCusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: updateshow-sql: trueopen-in-view: falsekafka:consumer:bootstrap-servers: 192.168.186.77:9092,192.168.186.18:9092,192.168.186.216:9092group-id: secKill-groupauto-offset-reset: earliestkey-deserializer: org.apache.kafka.common.serialization.StringDeserializervalue-deserializer: org.apache.kafka.common.serialization.StringDeserializerproducer:bootstrap-servers: 192.168.186.77:9092,192.168.186.18:9092,192.168.186.216:9092key-serializer: org.apache.kafka.common.serialization.StringSerializervalue-serializer: org.apache.kafka.common.serialization.StringSerializer

 6.6 SpringKafkaApplication.java

package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringKafkaApplication {public static void main(String[] args) {SpringApplication.run(SpringKafkaApplication.class, args);}
}

6.7 Product.java

package org.example.entity;import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;import java.math.BigDecimal;@Getter
@Setter
@Entity
@Table(name = "products")
public class Product {@Id@Column(name = "product_id", nullable = false)private Long id;@Column(name = "product_name", nullable = false)private String productName;@Column(name = "price", nullable = false, precision = 10, scale = 2)private BigDecimal price;@Column(name = "stock", nullable = false)private Integer stock;@Lob@Column(name = "description")private String description;@Versionprivate int version;  // 乐观锁字段
}

6.8 ProductRepository.java

package org.example.repository;import org.example.entity.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface ProductRepository extends JpaRepository<Product,Long> {}

6.9 ProductService.java

package org.example.service;import org.example.entity.Product;
import org.example.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class ProductService {@Autowiredprivate ProductRepository productRepository;@Transactional//检查是否还有库存public boolean attemptPurchase(Long productId, int quantity) {Product product = productRepository.findById(productId).orElse(null);if (product != null && product.getStock() >= quantity) {product.setStock(product.getStock() - quantity);productRepository.save(product);return true;}return false;}//获取全部产品public Product getProduct(Long productId) {return productRepository.findById(productId).orElse(null);}
}

6.10 KafkaMessageService.java

package org.example.service;import org.example.entity.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;@Service
public class KafkaMessageService {@Autowiredprivate KafkaTemplate<String, String> kafkaTemplate;@Autowiredprivate ProductService productService;// 将秒杀请求发送到 Kafkapublic Object sendKill(String topic, String productId) {kafkaTemplate.send(topic, productId);Product product = productService.getProduct(Long.valueOf(productId));return product;}@KafkaListener(topics = "product", groupId = "secKill-group")public void receiveKillRequest(String productId) {boolean success = productService.attemptPurchase(Long.parseLong(productId), 1);if (success) {System.out.println("秒杀成功!剩余库存:"+productService.getProduct(Long.valueOf(productId)).getStock());} else {System.out.println("秒杀失败!库存不足...");}}
}

6.11 killController.java

package org.example.controller;
import org.example.service.KafkaMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/kill")
public class killController {@Autowiredprivate KafkaMessageService kafkaMessageService;@GetMapping("/{productId}")public ResponseEntity<?> initiateSeckill(@PathVariable String productId) {Object o = kafkaMessageService.sendKill("product", productId);return ResponseEntity.ok().body(o);}}

6.12 项目测试

 6.12.1 网页预览

6.12.2 模拟秒杀

6.12.3 秒杀结果 

7. 总结 

        通过命令行实现kafka的快速入门,并实现简单的秒杀案例,仅供学习参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50558.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网最详细Gradio教程系列5——Gradio Client: python

全网最详细Gradio教程系列5——Gradio Client: python 前言本篇摘要5. Gradio Client的三种使用方式5.1 使用Gradio Python Client5.1.1 安装gradio_client5.1.2 连接Gradio应用程序1. 通过URL连接2. 通过SpaceID连接3. 辅助&#xff1a;duplicate()和hf_token4. Colab Noteboo…

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

使用AI大模型统计英语四六级试题高频词汇

引子 前些年我做过商品搜索&#xff0c;当时为了优化一些搜索词和搜索关联提示&#xff0c;接触到一点NLP的知识。所以后来有一场非全日制的研究生考试&#xff0c;为了高效的复习英语单词&#xff0c;我爬取了往年的历史真题数据&#xff0c;以及其他模拟等各种试题的数据。然…

AcWing最长连续不重复子序列

哈希表就完事儿了&#xff0c;key是a[j],value是a[j]出现次数 i丢到前面&#xff0c;j丢到后面&#xff0c;然后j往后面遍历&#xff0c;每次记录a[j]出现次数 m a p [ a [ j ] ] map[a[j]] map[a[j]]&#xff0c;如果a[j]出现次数2次及其以上 m a p [ a [ j ] ] > 1 map[a[…

Element Plus 动态编辑标签Tag使用@keyup.enter与@Blur冲突问题,

这是官方文档示例代码,文档具体链接https://element-plus.org/zh-CN/component/tag.html 问题描述: 发现存在使用keyup.enter与Blur冲突问题, keyup.enter(就是按回车键)发现handleInputConfirm方法被执行了两次,下面是问题代码 <template> <div class"flex ga…

PS5测试更新推送自适应充电功能:自带充电器码

原标题&#xff1a;PS5 更新推送自适应充电功能&#xff1a;仅适用于新型号 易采游戏网7月26日消息&#xff1a;近年来&#xff0c;游戏界的科技进步日新月异&#xff0c;各大厂商不断推出新的功能和技术来吸引玩家。作为游戏机市场的领导者之一&#xff0c;索尼的PlayStation…

Docker Minio rclone数据迁移

docker minio进行数据迁移 使用rclone进行数据迁移是一种非常灵活且强大的方式&#xff0c;特别是在处理大规模数据集或跨云平台迁移时。rclone是一款开源的命令行工具&#xff0c;用于同步文件和目录到多种云存储服务&#xff0c;包括MinIO。下面是使用rclone进行数据迁移至Mi…

学习型组织:知识创造的 SECI 螺旋模型 —— 隐性知识和显性知识的转换

《创造知识的企业》的日本学者野中郁次郎用了 30 多年的时间跟踪日本企业的变化&#xff0c;揭示日本企业成功的奥秘。 在野中之前和之后&#xff0c;也有不少学者聚焦日本&#xff0c;但是&#xff0c;多数人看到的&#xff0c;只是优良的生产技术&#xff0c;企业和顾客、供…

打卡Datawhale第一天!!!

最近参加了Datawhale的一个活动学习一些有趣的知识。 官方发的教程还是挺详细的嘛&#xff0c;跟着官方教程走&#xff0c;基本没什么错误 跑模型中... 跑完咯...gpu跑得就是快 等待评分... 最后结果&#xff1a; 总结&#xff1a;这次都是跟着教程来走的 &#xff0c;希望在后…

力扣高频SQL 50题(基础版)第十八题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第十八题1633. 各赛事的用户注册率题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第十八题 1633. 各赛事的用户注册率 题目说明 用户表&#xff1a; Users --…

柯达sd卡数据丢失怎么办?分享有效数据恢复方法

随着科技的进步&#xff0c;数码相机已成为我们生活中不可或缺的一部分&#xff0c;而柯达作为摄影界的知名品牌&#xff0c;其相机及配件更是广受欢迎。然而&#xff0c;在日常使用中&#xff0c;难免会遇到数据丢失的情况&#xff0c;特别是SD卡中的数据丢失&#xff0c;常常…

AJAX-XMLHttpRequest 详解

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 XMLHttpRequest 概述 主要用途 工作流程 示例代码 GET 请求示例 POST 请求示例 注意事项 工作…

API签名认证

前言&#xff08;项目背景&#xff09;&#xff1a; 这个API签名认证是API开放平台得一个重要环节&#xff0c;我们知道&#xff0c;这个API开发平台&#xff0c;用处就是给客户去调用现成得接口来完成某些事情得。 在讲API签名认证之前&#xff0c;我们先模拟一个场景并且介绍…

产业分析三部曲:如何快速完成存客产业识别、产业分布分析、区域产业分析?

2024年7月15日至18日&#xff0c;中国共产党第二十届中央委员会第三次全体会议在北京举行&#xff0c;审议通过了《中共中央关于进一步全面深化改革、推进中国式现代化的决定》。 《决定》提出&#xff0c;深化国资国企改革&#xff0c;完善管理监督体制机制&#xff0c;推动国…

Mistral新旗舰决战Llama 3.1,最强开源Large 2 123B,扛鼎多语言编程全能王

【新智元导读】紧跟着Meta的重磅发布&#xff0c;Mistral Large 2也带着权重一起上新了&#xff0c;而且参数量仅为Llama 3.1 405B的三分之一。不仅在编码、数学和多语言等专业领域可与SOTA模型直接竞争&#xff0c;还支持单节点部署。 昨天正式发布的Llama 3.1模型&#xff0…

react中路由跳转以及路由传参

一、路由跳转 1.安装插件 npm install react-router-dom 2.路由配置 路由配置&#xff1a;react中简单的配置路由-CSDN博客 3.实现代码 // src/page/index/index.js// 引入 import { Link, useNavigate } from "react-router-dom";function IndexPage() {const …

CSS常见属性详解——内边距与外边距

内边距与外边距 内边距 外边距 应用场景 在网页排版布局时&#xff0c;我们经常会希望元素与元素之间有一定的间距&#xff0c;此时我们可能会用到CSS的外边距或内边距属性&#xff0c;这两个属性都能让元素之间产生距离&#xff0c;那么他们之间有什么不同呢&#xff1f; …

Nginx系列-10 realIp模块使用

背景 Nginx对每个模块都有说明文档&#xff0c;可参考:https://nginx.org/en/docs/ 当请求被代理后&#xff0c;真实客户端相对服务器被隐藏&#xff0c;即服务端无法判断HTTP消息来源。 如上图所示&#xff0c;IP分别为100.100.100.1和100.100.100.2的两个客户端向服务器200.…

08 字符串和字节串

使用单引号、双引号、三单引号、三双引号作为定界符&#xff08;delimiter&#xff09;来表示字符串&#xff0c;并且不同的定界符之间可以相互嵌套。 很多内置函数和标准库对象也都支持对字符串的操作。 x hello world y Python is a great language z Tom said, "Le…

centos7 mysql 基本测试(6)主从简单测试

centos7 xtrabackup mysql 基本测试&#xff08;6&#xff09;主从简单测试 mysql -u etc -p 1234aA~1 参考&#xff1a; centos7 时区设置 时间同步 https://blog.csdn.net/wowocpp/article/details/135931129 Mysql数据库&#xff1a;主从复制与读写分离 https://blog.csd…