Logstash 多表增量同步 MySQL 到 Elasticsearch:支持逻辑删除与热加载,Docker 快速部署实战

1. 项目结构

install-elk/
├── start-elastic.sh
├── es-data/                            # Elasticsearch 持久化目录(自动创建)
├── logstash/├── logstash.yml├── pipeline/│   ├── user.conf│   ├── articles.conf│   └── ...          #可以有更多的表├── config/│   └── pipelines.yml├── ext/│   └── mysql-connector-j-9.2.0.jar  # 通过 https://downloads.mysql.com/archives/c-j/ 获取对应的版本。

1.1 本案例项目结构

在这里插入图片描述

1.2 start-elastic.sh

#!/bin/bash# ================== 🎨 Logo 开场 ==================
RED='\033[1;31m'
CYAN='\033[1;36m'
YELLOW='\033[1;33m'
RESET='\033[0m'echo -e "${CYAN}"
cat << "EOF"_____                      _ _ _/ ____|                    | (_) || (___   ___  ___ _ __ _ __| |_| |_ ___ _ __\___ \ / _ \/ __| '__| '__| | | __/ _ \ '__|____) |  __/ (__| |  | |  | | | ||  __/ ||_____/ \___|\___|_|  |_|  |_|_|\__\___|_|EOF
echo -e "${YELLOW}             🚀 Welcome to the someliber Elastic Stack 🚀${RESET}"
echo# ==================  获取版本号 ==================
read -p "请输入要使用的版本号(默认: 8.17.3): " VERSION_INPUT
VERSION=${VERSION_INPUT:-8.17.3}ES_IMAGE="elasticsearch:$VERSION"
KIBANA_IMAGE="kibana:$VERSION"
LOGSTASH_IMAGE="logstash:$VERSION"# ==================  获取密码 ==================
read -s -p "请输入 Elasticsearch 登录密码(默认: 123456): " PASSWORD_INPUT
echo
ES_PASSWORD=${PASSWORD_INPUT:-123456}
KIBANA_USER=kibana_user
KIBANA_PASS=someliber# ==================  是否挂载 ES 数据目录 ==================
read -p "是否挂载 Elasticsearch 数据目录?(y/n 默认 y): " USE_VOLUME
USE_VOLUME=${USE_VOLUME:-y}# ==================  基本变量 ==================
ES_CONTAINER_NAME=es11
KIBANA_CONTAINER_NAME=kibana11
LOGSTASH_CONTAINER_NAME=logstash11
NETWORK_NAME=elastic11
LOGSTASH_DIR="$PWD/logstash"
# ==================  创建网络 ==================
docker network create $NETWORK_NAME >/dev/null 2>&1 || echo "🔗 网络已存在:$NETWORK_NAME"# ==================  启动 Elasticsearch ==================
echo " 启动 Elasticsearch..."
if [[ "$USE_VOLUME" == "y" || "$USE_VOLUME" == "Y" ]]; thenmkdir -p ./es-datadocker run -d --name $ES_CONTAINER_NAME \--network $NETWORK_NAME \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "xpack.security.enabled=true" \-e "ELASTIC_PASSWORD=$ES_PASSWORD" \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \-v "$PWD/es-data:/usr/share/elasticsearch/data" \$ES_IMAGE
elsedocker run -d --name $ES_CONTAINER_NAME \--network $NETWORK_NAME \-p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e "xpack.security.enabled=true" \-e "ELASTIC_PASSWORD=$ES_PASSWORD" \-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \$ES_IMAGE
fi# ==================  等待 ES 启动 ==================
echo " 正在等待 Elasticsearch 启动..."
for i in {1..60}; doSTATUS=$(curl -s -u elastic:$ES_PASSWORD http://localhost:9200/_cluster/health | grep -o '"status":"[^"]\+"' || true)if [[ $STATUS == *"green"* || $STATUS == *"yellow"* ]]; thenecho " Elasticsearch 启动成功:$STATUS"breakfisleep 2
done# ==================  创建 Kibana 用户 ==================
echo " 创建 Kibana 用户($KIBANA_USER)..."
docker exec $ES_CONTAINER_NAME bash -c "bin/elasticsearch-users useradd $KIBANA_USER -p $KIBANA_PASS -r kibana_system" || \echo " 用户可能已存在,忽略错误"# ==================  启动 Kibana ==================
echo " 启动 Kibana..."
docker run -d --name $KIBANA_CONTAINER_NAME \--network $NETWORK_NAME \-p 5601:5601 \-e "ELASTICSEARCH_HOSTS=http://$ES_CONTAINER_NAME:9200" \-e "ELASTICSEARCH_USERNAME=$KIBANA_USER" \-e "ELASTICSEARCH_PASSWORD=$KIBANA_PASS" \-e "XPACK_ENCRYPTEDSAVEDOBJECTS_ENCRYPTIONKEY=2kR9HmNaesytcVDwEAK3uTQ1obCrvP7B" \-e "XPACK_REPORTING_ENCRYPTIONKEY=aSTr3J7sLgt2BCKbIyw0DE6OjZGMY1kX" \-e "XPACK_SECURITY_ENCRYPTIONKEY=WO6Xetyubr45ZonlLd32DfNmRTkcAhvp" \-e "I18N_LOCALE=zh-CN" \$KIBANA_IMAGE# ==================  启动 Logstash(全目录挂载) ==================
if [[ -d "$LOGSTASH_DIR" ]]; thenecho " 启动 Logstash(全目录挂载)..."docker run -d --name $LOGSTASH_CONTAINER_NAME \--network $NETWORK_NAME \-p 5044:5044 -p 9600:9600 -p 5000:5000 \-e "xpack.monitoring.elasticsearch.hosts=http://$ES_CONTAINER_NAME:9200" \-e "xpack.monitoring.elasticsearch.username=elastic" \-e "xpack.monitoring.elasticsearch.password=$ES_PASSWORD" \-v "$PWD/logstash/pipeline:/usr/share/logstash/pipeline" \-v "$PWD/logstash/ext:/usr/share/logstash/ext" \-v "$PWD/logstash/config:/usr/share/logstash/config" \$LOGSTASH_IMAGEecho " Logstash 启动完成(使用 logstash/ 目录)"
elseecho " 未找到 logstash/ 目录,Logstash 未启动"
fi# ==================  提示 ==================
echo
echo -e "${CYAN} 所有容器启动完成!${RESET}"
echo -e "${YELLOW} Elasticsearch: http://localhost:9200${RESET}"
echo -e "${YELLOW} Kibana:        http://localhost:5601${RESET}"

1.3 logstash/pipeline/user.conf

# ====================== 输入阶段:从 MySQL 中读取数据 ======================
input {jdbc {# MySQL JDBC 连接串jdbc_connection_string => "jdbc:mysql://192.168.167.175:3306/test"# 数据库账号和密码jdbc_user => "root"jdbc_password => "123456"# MySQL JDBC 驱动的路径(需要确保已经挂载进容器)jdbc_driver_library => "/usr/share/logstash/ext/mysql-connector-j-9.2.0.jar"# JDBC 驱动类名称jdbc_driver_class => "com.mysql.cj.jdbc.Driver"jdbc_paging_enabled => truejdbc_page_size => 10000# ========== 增量同步设置 ==========# 启用基于字段的增量同步use_column_value => true# 增量字段:用来判断是否有更新tracking_column => "updated_at"tracking_column_type => "timestamp"record_last_run => true# 记录上次同步时间的文件(容器中可写路径)last_run_metadata_path => "/usr/share/logstash/last_run_metadata/users_last_run.yml"# 执行的 SQL 语句:查所有新增、修改、逻辑删除的数据statement => "SELECTid,username,gender,email,age,created_at,updated_at,is_deletedFROM usersWHERE updated_at > :sql_last_valueORDER BY updated_at ASC, id ASC"# 每分钟执行一次同步任务(Cron 格式)schedule => "* * * * *"}
}# ====================== 过滤器阶段:处理数据逻辑 ======================
filter {# 如果 is_deleted = 1,则为“逻辑删除”,我们在元数据中标记 action 为 deleteif [is_deleted] and [is_deleted] in [1, "1", true, "true"] {mutate {add_field => { "[@metadata][action]" => "delete" }}} else {# 否则为“新增或更新”操作,标记 action 为 indexmutate {add_field => { "[@metadata][action]" => "index" }}}# 移除不希望写入 ES 的字段(如删除标记)mutate {remove_field => ["is_deleted"]}
}# ====================== 输出阶段:写入到 Elasticsearch ======================
output {elasticsearch {# Elasticsearch 地址hosts => ["http://es11:9200"]# 索引名称为 usersindex => "users"# ES 用户名和密码(需开启身份验证)user => "elastic"password => "123456"# 文档 ID 使用 MySQL 的主键 ID,避免重复写入document_id => "%{id}"# 根据前面 filter 设置的 action 决定是 index 还是 delete 操作action => "%{[@metadata][action]}"}# 控制台输出(调试用)stdout {codec => json_lines}
}

1.3 logstash/pipeline/articles.conf

# ====================== 输入阶段:从 MySQL 中读取文章数据 ======================
input {jdbc {# MySQL JDBC 连接串jdbc_connection_string => "jdbc:mysql://192.168.167.175:3306/test"# 数据库账号和密码jdbc_user => "root"jdbc_password => "123456"# MySQL JDBC 驱动的路径(需确保挂载到容器)jdbc_driver_library => "/usr/share/logstash/ext/mysql-connector-j-9.2.0.jar"# JDBC 驱动类名称jdbc_driver_class => "com.mysql.cj.jdbc.Driver"# 启用分页拉取数据,提高大数据量时性能jdbc_paging_enabled => truejdbc_page_size => 10000# ========== 增量同步设置 ==========use_column_value => true                 # 启用字段值来判断是否更新tracking_column => "updated_at"         # 使用 updated_at 字段做增量对比tracking_column_type => "timestamp"record_last_run => truelast_run_metadata_path => "/usr/share/logstash/last_run_metadata/articles_last_run.yml"# SQL 查询语句,排除敏感字段,按更新时间 & ID 顺序拉取statement => "SELECTid,title,content,author_id,category,created_at,updated_at,is_deletedFROM articlesWHERE updated_at > :sql_last_valueORDER BY updated_at ASC, id ASC"# 同步频率:每分钟执行一次schedule => "* * * * *"}
}# ====================== 过滤器阶段:逻辑删除与字段处理 ======================
filter {# 如果 is_deleted = 1/true,标记 action 为 delete(逻辑删除)if [is_deleted] and [is_deleted] in [1, "1", true, "true"] {mutate {add_field => { "[@metadata][action]" => "delete" }}} else {# 否则表示新增或更新mutate {add_field => { "[@metadata][action]" => "index" }}}# 移除不希望写入 ES 的字段(如删除标记)mutate {remove_field => ["is_deleted"]}
}# ====================== 输出阶段:写入 Elasticsearch ======================
output {elasticsearch {hosts => ["http://es11:9200"]index => "articles"user => "elastic"password => "123456"document_id => "%{id}"                   # 使用文章主键作为文档 IDaction => "%{[@metadata][action]}"       # 动态执行 index 或 delete}# 控制台调试输出(开发期使用)stdout {codec => json_lines}
}

1.4 logstash/config/pipelines.yml

# 定义第一个 pipeline(数据同步管道)
- pipeline.id: users                     # 唯一标识这个 pipeline 的 ID,日志中会看到 users 相关的信息path.config: "/usr/share/logstash/pipeline/user.conf"# 指定该 pipeline 使用的配置文件路径,里面写的是 input/filter/output# 定义第二个 pipeline
- pipeline.id: articles                    # 另一个独立的 pipeline ID,处理 articles 表的同步path.config: "/usr/share/logstash/pipeline/articles.conf"# 指定第二个 pipeline 的配置文件路径

1.5 logstash/config/logstash.yml

# ================================
#  Logstash HTTP API 接口配置
# ================================api.http.host: 0.0.0.0             # Logstash API 绑定的主机地址,0.0.0.0 表示所有网卡
api.http.port: 9600                # Logstash HTTP API 的端口号,默认是 9600# ================================
#  配置自动加载(热加载)
# ================================config.reload.automatic: true      # 开启配置文件自动热加载,无需重启即可更新 pipeline
config.reload.interval: 5s         # 配置检查的时间间隔(单位:秒)# ================================
#  Pipeline 性能调优参数
# ================================pipeline.batch.delay: 50           # 每个批次处理之间的最大等待时间(毫秒),默认 50ms
pipeline.batch.size: 125           # 每个批次处理的最大事件数量
pipeline.workers: 2                # 每个 pipeline 使用的 worker 线程数,建议和 CPU 核心数保持一致# ================================
#  X-Pack 监控配置
# ================================xpack.monitoring.elasticsearch.hosts: ${xpack.monitoring.elasticsearch.hosts}       # Elasticsearch 监控地址,从环境变量读取
xpack.monitoring.elasticsearch.username: ${xpack.monitoring.elasticsearch.username} # ES 认证用户名,从环境变量读取
xpack.monitoring.elasticsearch.password: ${xpack.monitoring.elasticsearch.password} # ES 认证密码,从环境变量读取

1.6 启动 start-elastic.sh

chmod +x start-elastic.sh && ./start-elastic.sh

1.7 数据库相关

1.7.1 用户信息表

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户唯一标识',username VARCHAR(100) NOT NULL COMMENT '用户名',password VARCHAR(255) NOT NULL COMMENT '加密后的用户密码',gender ENUM('male', 'female', 'other') DEFAULT 'other' COMMENT '性别',email VARCHAR(255) COMMENT '用户邮箱',age INT COMMENT '年龄',created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '用户创建时间',updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',is_deleted BOOLEAN DEFAULT FALSE COMMENT '逻辑删除标记,TRUE 表示已删除'
) COMMENT='用户信息表';

1.7.2 文章信息表

CREATE TABLE articles (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '文章唯一标识',title VARCHAR(255) NOT NULL COMMENT '文章标题',content TEXT COMMENT '文章内容正文',author_id INT NOT NULL COMMENT '作者ID,对应 users 表 id',category VARCHAR(100) COMMENT '文章分类',published_at DATETIME COMMENT '发布时间',created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '文章创建时间',updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',is_deleted BOOLEAN DEFAULT FALSE COMMENT '逻辑删除标记,TRUE 表示已删除'
) COMMENT='文章信息表';

1.7.3 测试数据

INSERT INTO users (username, password, gender, email, age, is_deleted)
VALUES 
('Alice',   'hashed_password_1', 'female', 'alice@example.com', 28, FALSE),
('Bob',     'hashed_password_2', 'male',   'bob@example.com',   35, FALSE),
('Charlie', 'hashed_password_3', 'male',   'charlie@example.com', 22, FALSE),
('Diana',   'hashed_password_4', 'female', 'diana@example.com', 40, TRUE),  
('Eve',     'hashed_password_5', 'other',  'eve@example.com',    30, FALSE);INSERT INTO articles (title, content, author_id, category, published_at, is_deleted)
VALUES 
('Elasticsearch 入门', '这是关于 Elasticsearch 的基础教程内容。', 1, '技术', NOW(), FALSE),
('MySQL 优化实践', '介绍常见的 MySQL 优化技巧。', 2, '数据库', NOW(), FALSE),
('Logstash 配置指南', '如何配置 Logstash 管道同步数据。', 1, '日志系统', NOW(), FALSE),
('前端与后端的区别', '讲解 Web 开发中的前后端职责。', 3, 'Web开发', NULL, FALSE),
('已删除的文章示例', '这篇文章已被逻辑删除。', 4, '历史', NOW(), TRUE);  

1.8 测试验证过程

1.8.1 启动start-elastic.sh

在这里插入图片描述

1.8.2 验证索引是否创建成功

在这里插入图片描述

1.8.3 进行删除测试

1.8.3.1 删除前

在这里插入图片描述

1.8.3.2 逻辑删除Alice用户

在这里插入图片描述

1.8.3.3 查看结果

说明:等待一分钟,可以看到users索引下的文档数量由4->3,即文档从ES中删除。

在这里插入图片描述

1.8.4 进行修改测试

1.8.4.1 修改前

在这里插入图片描述

1.8.4.2 修改Bob为Bob123

在这里插入图片描述

1.8.4.3 查看修改结果

说明:等待一分钟,数据更新同步到ES文档。

在这里插入图片描述

2 总结

通过 LogstashMySQL 中同步多个业务表(如 usersarticles),并实现以下能力:

  • 增量同步:基于 updated_at 字段,避免全量拉取。
  • 逻辑删除同步:使用 is_deleted 字段自动触发 ES 删除操作。
  • 定时同步:每分钟调度,适用于数据近实时场景。
  • 多表配置隔离:每个表对应一个独立的 pipeline,实现清晰可维护结构。
  • 全目录挂载:Logstash 配置、驱动、Pipeline 统一挂载,便于统一管理和部署。

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

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

相关文章

服务器托管:网站经常被攻击该怎么办?

“木马”对于孩子来说是个玩具&#xff0c;但是对于网络行业来说是一个病毒威胁&#xff0c;站长在进行建站的过程中&#xff0c;通常都会面临一个问题网站被挂马&#xff0c;有些网站服务器托管在进行多次处理木马之后得不到根治&#xff0c;后续会受到频繁的攻击该怎么办&…

判断子序列-leetcode

给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序列&#x…

如何提高微信小程序的应用速度

1、如何提高微信小程序的应用速度&#xff1f;加载时1、上传代码时&#xff0c;对代码进行压缩。2、清理点代码中无效的代码和资源文件。3、减少本地代码中图片等资源的数量和大小。如将多个图片合成一张图片。还有将图片资源放在静态资源库存储。渲染1、在加载页面时&#xff…

华为高频算法题:最长连续递增子序列(Longest Continuous Increasing Subsequence)

文章目录前言题目描述&#xff08;华为校招真题&#xff09;解题思路分析Java 实现代码单元测试代码结语前言 在各大互联网公司的算法面试中&#xff0c;数组类题目一直是考察的重点&#xff0c;尤其是对于应届生和初级工程师的面试来说更是常见题型。华为作为国内顶尖的科技企…

JavaSE-图书信息管理系统

目录 前置知识点 项目部署说明 项目运行截图 项目结构展示 项目编写构思 book包 Book类 Booklist类 ioperations包 IOPeration接口 AddOperation类 BorrowOperation类 DelOperation类 FindOperation类 ReturnOperation类 ShowOperation类 ExitOperation类 use…

网络 IP 地址总结

网络IP地址总结 一、IPv4地址核心分类与特殊网段 IPv4地址是32位二进制数&#xff08;通常表示为4组0-255的十进制数&#xff0c;即“点分十进制”&#xff09;&#xff0c;总地址空间约43亿个。根据用途可分为公有地址&#xff08;公网使用&#xff0c;全球唯一&#xff09;和…

【C++进阶】第7课—红黑树

文章目录1. 认识红黑树1.1 红黑树的规则1.2 红黑树如何确保最长路径不超过最短路径的2倍呢?1.3 红黑树的效率2. 实现红黑树2.1 红黑树的结构2.2 红黑树的插入2.2.1 第一种情况:插入节点的父节点和其uncle节点都为红色&#xff0c;且uncle节点存在2.2.2 第2种情况:插入节点cur和…

解决 SQL 错误 [1055]:深入理解 only_full_group_by 模式下的查询规范

在日常的 SQL 开发中&#xff0c;你是否遇到过这样的报错&#xff1a;SQL 错误 [1055] [42000]: Expression #N of SELECT list is not in GROUP BY clause and contains nonaggregated column...&#xff1f;尤其是在 MySQL 5.7 及以上版本中&#xff0c;这个错误更为常见。本…

Keepalived 原理及配置(高可用)

一、Keepalived 原理keepalived 基于 VRRP&#xff08;虚拟路由冗余协议&#xff09;实现高可用。核心原理是通过竞选机制在多台服务器&#xff08;主 / 备节点&#xff09;中选举出一台主节点承担服务&#xff0c;同时备节点持续监控主节点状态&#xff1a;主节点正常时&#…

从代码混乱到井然有序:飞算JavaAI的智能治理之道

文章目录一、前言二、飞算JavaAI平台三、飞算JavaAI安装流程3.1 Idea安装配置3.2 官网注册登入四、飞算JavaAI独特魅力:合并项目场景4.1 ERP老项目精准翻新&#xff1a;保留核心逻辑的智能改造方案4.2 智能合并&#xff1a;重构ERP系统的代码迷宫4.3 ERP接口智能导航&#xff1…

iOS打开开发者模式

启用开发者模式的方法在iOS设备上启用开发者模式通常需要连接Xcode或通过设置手动开启&#xff0c;以下是具体步骤&#xff1a;通过Xcode启用将iOS设备通过USB线连接到Mac电脑。打开Xcode&#xff08;需提前安装&#xff09;。在Xcode的菜单栏中选择 Window > Devices and S…

leetcode101.对称二叉树树(递归练习题)

文章目录一、 题目描述二、 核心思路&#xff1a;判断左右子树是否互为镜像三、 递归的终止条件 (Base Cases)四、 代码实现与深度解析五、 关键点与复杂度分析六、 总结与对比 (LC100 vs LC101)LeetCode 101. 对称二叉树 - 力扣【难度&#xff1a;简单&#xff1b;通过率&…

【国内电子数据取证厂商龙信科技】谁是躲在“向日葵”后的

一、前言大家可能每天都在使用在远控软件&#xff0c;我们在享受远控软件带来的便利同时&#xff0c;犯罪者也在使用远控软件进行违法犯罪活动&#xff0c;以达到隐藏自己的目的。市面上常用的远控软件有“向日葵”、“TeamViewer”。二、案件背景在一次电信诈骗案件支援中&…

SAP-PP-MRPLIST

MRP(物料需求计划)分析功能,主要包含以下要点: 程序通过选择工厂和物料/销售订单范围作为输入条件,支持两种展示方式:ALV表格和树形结构 核心功能包括: 物料主数据查询(MAKT/MARA表) 销售订单数据查询(VBAP表) BOM展开(CS_BOM_EXPL_MAT_V2函数) MRP数据获取(MA…

MIT线性代数01_方程组的几何解释

Linear Algebra Lecture #1 W. Gilbert Strangn linear equations, n unknowns row picturecol pictureMatrix form {2x−y0−x2y3 \left\{\begin{matrix} 2x - y 0 \\ -x 2y 3 \end{matrix}\right. {2x−y0−x2y3​ 1 Row Picture2 Column PictureWhat are all combination…

FreeRTOS-中断管理

学习内容中断概念中断是计算机系统中一种重要的事件驱动机制&#xff0c;用于在特定条件下打断正在执行的程序&#xff0c;并跳转到预定义的中断处理程序中执行特定的操作。当发生中断时&#xff0c;处理器会立即中止当前正在执行的指令&#xff0c;保存当前的执行状态&#xf…

图像梯度处理与边缘检测

在图像处理的世界里&#xff0c;我们常常需要从复杂的像素矩阵中提取有意义的信息 —— 比如一张照片中物体的轮廓、医学影像中病灶的边界、自动驾驶视野里的道路边缘。这些 “边界” 或 “轮廓” 在专业术语中被称为 “边缘”&#xff0c;而捕捉边缘的核心技术&#xff0c;离不…

GPU服务器与PC 集群(PC农场):科技算力双子星

在数字经济高速发展的今天&#xff0c;算力已成为驱动科技创新与产业变革的核心引擎。GPU服务器凭借其强大的并行计算能力&#xff0c;在图形渲染、人工智能训练等领域展现出不可替代的优势&#xff1b;而PC集群则通过分布式架构&#xff0c;以高性价比和灵活扩展特性&#xff…

秋招Day19 - 分布式 - 分布式锁

单体时代&#xff0c;可以直接用本地锁来实现对竞争资源的加锁&#xff0c;分布式环境下就要用到分布式锁了有哪些分布式锁的实现方案&#xff1f;MySQL分布式锁、Zookeeper分布式锁、Redis分布式锁MySQL分布式锁如何实现&#xff1f;创建一张锁表&#xff0c;对字段定义唯一性…

AIStarter平台亮点解析:从ComfyUI项目上架到一键运行的完整指南

大家好&#xff01;今天分享一个AIStarter平台的深度体验&#xff0c;带你了解如何通过这个平台轻松上架和运行AI项目&#xff01;视频中&#xff0c;博主在凌晨分享了AIStarter的强大功能&#xff0c;重点展示了ComfyUI 4.0和5.0整合包的上架过程&#xff0c;以及如何简化AI项…