基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程的演示都将在 Flink CDC CLI 中进行,无需一行 Java/Scala 代码,也无需安装 IDE。
这篇教程将展示如何基于 Flink CDC YAML 快速构建 MySQL 到 Kafka 的 Streaming ELT 作业,包含整库同步、表结构变更同步演示和关键参数介绍。
准备阶段
准备 Flink Standalone 集群
-
1. 下载 Flink 1.19.2[1]压缩包,解压后并跳转至 Flink 目录下,设置 FLINK_HOME 为 flink-1.19.2 所在目录。
tar -zxvf flink-1.19.2-bin-scala_2.12.tgz
export FLINK_HOME=$(pwd)/flink-1.19.2
-
2. 在
conf/config.yaml
文件追加下列参数开启 checkpoint,每隔 3 秒做一次 checkpoint。
execution:checkpointing:interval: 3000
-
3. 使用下面的命令启动 Flink 集群。
./bin/start-cluster.sh
启动成功后可以在 http://localhost:8081/
访问到 Flink Web UI,如下图所示:
重复执行 start-cluster.sh
可以拉起多个 TaskManager
。
注意:如果是在云服务器上运行,需要将 conf/config.yaml 里面 rest.bind-address 和 rest.address 的 localhost 改成0.0.0.0,然后使用 公网IP:8081 即可访问。
准备 Docker 环境
使用下面的内容新建一个 docker-compose.yml 文件:
services:Zookeeper:image: zookeeper:3.7.1ports:- "2181:2181"environment:- ALLOW_ANONYMOUS_LOGIN=yesKafka:image: bitnami/kafka:2.8.1ports:- "9092:9092"- "9093:9093"environment:- ALLOW_PLAINTEXT_LISTENER=yes- KAFKA_LISTENERS=PLAINTEXT://:9092- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.67.2:9092- KAFKA_ZOOKEEPER_CONNECT=192.168.67.2:2181MySQL:image: debezium/example-mysql:1.1ports:- "3306:3306"environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_USER=mysqluser- MYSQL_PASSWORD=mysqlpw
注意:文件里面的 192.168.67.2 为内网 IP,可通过 ifconfig 查找。
该 Docker Compose 中包含的组件有:
● MySQL: 包含商品信息的数据库app_db
● Kafka: 存储从 MySQL 中根据规则映射过来的结果表
● Zookeeper:主要用于进行Kafka集群管理和协调
在 docker-compose.yml 所在目录下执行下面的命令来启动上述组件:
docker-compose up -d
该命令以 detached 模式启动 Docker Compose 配置中定义的所有组件。可以通过 docker ps 来观察上述的组件是否正常启动。
在 MySQL 数据库中准备数据
通过执行如下命令可以进入 MySQL 容器:
docker-compose exec MySQL mysql -uroot -p123456
创建数据库 app_db和表 orders,products,shipments 并插入数据:
-- 创建数据库CREATE DATABASE app_db;USE app_db;-- 创建 orders 表CREATE TABLE `orders` (`id` INT NOT NULL,`price` DECIMAL(10,2) NOT NULL,PRIMARY KEY (`id`));-- 插入数据INSERT INTO `orders` (`id`, `price`) VALUES (1, 4.00);INSERT INTO `orders` (`id`, `price`) VALUES (2, 100.00);-- 创建 shipments 表CREATE TABLE `shipments` (`id` INT NOT NULL,`city` VARCHAR(255) NOT NULL,PRIMARY KEY (`id`));-- 插入数据INSERT INTO `shipments` (`id`, `city`) VALUES (1, 'beijing');INSERT INTO `shipments` (`id`, `city`) VALUES (2, 'xian');-- 创建 products 表CREATE TABLE `products` (`id` INT NOT NULL,`product` VARCHAR(255) NOT NULL,PRIMARY KEY (`id`));-- 插入数据INSERT INTO `products` (`id`, `product`) VALUES (1, 'Beer');INSERT INTO `products` (`id`, `product`) VALUES (2, 'Cap');INSERT INTO `products` (`id`, `product`) VALUES (3, 'Peanut');
通过 Flink CDC CLI 提交任务
-
1. 下载压缩包并解压得到目录 flink-cdc-3.3.0;
flink-cdc-3.3.0-bin.tar.gz[2]中包含 bin、lib、log、conf 四个目录。 -
2. 下载下面列出的 connector 包,并且移动到 lib 目录下:
■ MySQL pipeline connector 3.3.0[3]
■ Kafka pipeline connector 3.3.0[4]
您还需要将下面的 Driver 包放在 Flink lib 目录下,或通过 --jar 参数将其传入 Flink CDC CLI,因为 CDC Connectors 不再打包这个依赖:
■ MySQL Connector Java[5]
3. 编写任务配置 yaml 文件
下面给出了一个整库同步的示例文件 mysql-to-kafka.yaml:
################################################################################
# Description: Sync MySQL all tables to Kafka
################################################################################
source:type: mysqlhostname: 0.0.0.0port: 3306username: rootpassword: 123456tables: app_db.\.*server-id: 5400-5404server-time-zone: UTCsink:type: kafkaname: Kafka Sinkproperties.bootstrap.servers: 0.0.0.0:9092topic: yaml-mysql-kafkapipeline:name: MySQL to Kafka Pipelineparallelism: 1
其中 source 中的 tables: app_db..* 通过正则匹配同步 app_db 下的所有表。
4. 最后,通过命令行提交任务到 Flink Standalone cluster
bash bin/flink-cdc.sh mysql-to-kafka.yaml
# 参考,一些自定义路径的示例 主要用于多版本flink,mysql驱动不一致等情况 如,
# bash /root/flink-cdc-3.3.0/bin/flink-cdc.sh /root/flink-cdc-3.3.0/bin/mysql-to-kafka.yaml --flink-home /root/flink-1.19. --jar /root/flink-cdc-3.3.0/lib/mysql-connector-java-8.0.27.jar
提交成功后,返回信息如:
Pipeline has been submitted to cluster.
Job ID: ba2afd0697524bd4857183936507b0bf
Job Description: MySQL to Kafka Pipeline
在 Flink Web UI,可以看到名为 MySQL to Kafka Pipeline 的任务正在运行。
通过 Kafka 客户端查看 Topic 数据,可得到debezium-json格式的内容:
docker-compose exec Kafka kafka-console-consumer.sh --bootstrap-server 192.168.31.229:9092 --topic yaml-mysql-kafka --from-beginning
debezium-json 格式包含了 before/after/op/source 几个元素,示例如下:
{"before": null,"after": {"id": 1,"price": 4},"op": "c","source": {"db": "app_db","table": "orders"}
}
...
{"before": null,"after": {"id": 1,"product": "Beer"},"op": "c","source": {"db": "app_db","table": "products"}
}
...
{"before": null,"after": {"id": 2,"city": "xian"},"op": "c","source": {"db": "app_db","table": "shipments"}
}
同步变更
进入 MySQL 容器:
docker-compose exec MySQL mysql -uroot -p123456
接下来,修改 MySQL 数据库中表的数据,StarRocks 中显示的订单数据也将实时更新:
-
1. 在 MySQL 的 orders 表中插入一条数据
INSERT INTO app_db.orders (id, price) VALUES (3, 100.00);
-
2. 在 MySQL 的 orders 表中增加一个字段
ALTER TABLE app_db.orders ADD amount varchar(100) NULL;
-
3. 在 MySQL 的 orders 表中更新一条数据
UPDATE app_db.orders SET price=100.00, amount=100.00 WHERE id=1;
-
4. 在 MySQL 的 orders 表中删除一条数据
DELETE FROM app_db.orders WHERE id=2;
通过 Kafka 消费者监控 Topic,可以看到 Kafka 上也在实时接收到这些变更:
{"before": {"id": 1,"price": 4,"amount": null},"after": {"id": 1,"price": 100,"amount": "100.00"},"op": "u","source": {"db": "app_db","table": "orders"}
}
同样地,去修改 shipments, products 表,也能在 Kafka对应的 Topic 中实时看到同步变更的结果。
特色功能
路由变更
Flink CDC 提供了将源表的表结构/数据路由到其他表名的配置,借助这种能力,我们能够实现表名库名替换,整库同步等功能。下面提供一个配置文件说明:
################################################################################
# Description: Sync MySQL all tables to Kafka
################################################################################
source:type: mysqlhostname: 0.0.0.0port: 3306username: rootpassword: 123456tables: app_db.\.*server-id: 5400-5404server-time-zone: UTCsink:type: kafkaname: Kafka Sinkproperties.bootstrap.servers: 0.0.0.0:9092
pipeline:name: MySQL to Kafka Pipelineparallelism: 1
route:- source-table: app_db.orderssink-table: kafka_ods_orders- source-table: app_db.shipmentssink-table: kafka_ods_shipments- source-table: app_db.productssink-table: kafka_ods_products
通过上面的 route 配置,会将 app_db.orders 表的结构和数据同步到 kafka_ods_orders 中。从而实现数据库迁移的功能。特别地,source-table 支持正则表达式匹配多表,从而实现分库分表同步的功能,例如下面的配置:
route:- source-table: app_db.order\.*sink-table: kafka_ods_orders
这样,就可以将诸如 app_db.order01、app_db.order02、app_db.order03 的表汇总到 kafka_ods_orders 中。利用 Kafka 自带的工具,可查看对应 Topic 的建立,详情可使用 kafka-console-consumer.sh 进行查询。
docker-compose exec Kafka kafka-topics.sh --bootstrap-server 192.168.67.2:9092 --list
Kafka 中新建的 Topic 信息如下:
__consumer_offsets
kafka_ods_orders
kafka_ods_products
kafka_ods_shipments
yaml-mysql-kafka
选取 kafka_ods_orders 这个 Topic 进行查询,返回数据示例如下:
{"before": null,"after": {"id": 1,"price": 100,"amount": "100.00"},"op": "c","source": {"db": null,"table": "kafka_ods_orders"}
}
写入多个分区
使用 partition.strategy
参数可以定义发送数据到 Kafka 分区的策略, 可以设置的选项有:
● all-to-zero
(将所有数据发送到 0 号分区),默认值
● hash-by-key
(所有数据根据主键的哈希值分发)
我们基于 mysql-to-kafka.yaml 在sink下增加一行配置: partition.strategy: hash-by-key
source:...
sink:...topic: yaml-mysql-kafka-hash-by-keypartition.strategy: hash-by-key
pipeline:...
同时我们利用 Kafka 的脚本新建一个 12 分区的 Kafka Topic:
docker-compose exec Kafka kafka-topics.sh --create --topic yaml-mysql-kafka-hash-by-key --bootstrap-server 192.168.67.2:9092 --partitions 12
提交 YAML 作业后,查看一下各个分区里面所存储的数据。
docker-compose exec Kafka kafka-console-consumer.sh --bootstrap-server=192.168.67.2:9092 --topic yaml-mysql-kafka-hash-by-key --partition 0 --from-beginning
部分分区数据详情如下:
-
• 分区0
{"before": null,"after": {"id": 1,"price": 100,"amount": "100.00"},"op": "c","source": {"db": "app_db","table": "orders"}
}
-
• 分区4
{"before": null,"after": {"id": 2,"product": "Cap"},"op": "c","source": {"db": "app_db","table": "products"}
}
{"before": null,"after": {"id": 1,"city": "beijing"},"op": "c","source": {"db": "app_db","table": "shipments"}
}
输出格式
value.format
参数用于序列化 Kafka 消息的值部分数据的格式。可选的填写值包括 debezium-json
和 canal-json
,默认值为 debezium-json
,目前还不支持用户自定义输出格式。
debezium-json
[6]格式会包含 before(变更前的数据)/after(变更后的数据)/op(变更类型)/source(元数据) 几个元素,ts_ms 字段并不会默认包含在输出结构中(需要在 Source 中指定 metadata.list
配合)。canal-json
[7]格式会包含 old/data/type/database/table/pkNames 几个元素,但是 ts 并不会默认包含在其中(原因同上)。
可以在 YAML 文件的 sink 中定义 value.format: canal-json
来指定输出格式为 canal-json
类型:
source:...sink:...topic: yaml-mysql-kafka-canalvalue.format: canal-json
pipeline:...
查询对应 topic 的数据,返回示例如下:
{"old": null,"data": [{"id": 1,"price": 100,"amount": "100.00"}],"type": "INSERT","database": "app_db","table": "orders","pkNames": ["id"]
}
自定义上下游映射关系
使用 sink.tableId-to-topic.mapping
参数可以指定上游表名到下游 Kafka Topic 名的映射关系。无需使用 route 配置。与之前介绍的通过 route 实现的不同点在于,配置该参数可以在保留源表的表名信息的情况下设置写入的 Topic 名称。
在前面的 YAML 文件中增加 sink.tableId-to-topic.mapping
配置指定映射关系,每个映射关系由 ;
分割,上游表的 TableId 和下游 Kafka 的 Topic 名由 :
分割:
source:...sink:...sink.tableId-to-topic.mapping: app_db.orders:yaml-mysql-kafka-orders;app_db.shipments:yaml-mysql-kafka-shipments;app_db.products:yaml-mysql-kafka-products
pipeline:...
运行后,Kafka 中将会生成如下的 Topic:
...
yaml-mysql-kafka-orders
yaml-mysql-kafka-products
yaml-mysql-kafka-shipments
上述 3 个 Topic 中的部分数据详情:
{"before": null,"after": {"id": 1,"price": 100,"amount": "100.00"},"op": "c","source": {"db": "app_db","table": "orders"}
}
{"before": null,"after": {"id": 2,"product": "Cap"},"op": "c","source": {"db": "app_db","table": "products"}
}
{"before": null,"after": {"id": 2,"city": "xian"},"op": "c","source": {"db": "app_db","table": "shipments"}
}
环境清理
本教程结束后,在 docker-compose.yml 文件所在的目录下执行如下命令停止所有容器:
docker-compose down
在 Flink 所在目录 flink-1.19.2 下执行如下命令停止 Flink 集群:
./bin/stop-cluster.sh
参考资料
[1]
Flink 1.19.2: https://archive.apache.org/dist/flink/flink-1.19.2/flink-1.19.2-bin-scala_2.12.tgz
[2]
flink-cdc-3.3.0-bin.tar.gz: https://www.apache.org/dyn/closer.lua/flink/flink-cdc-3.3.0/flink-cdc-3.3.0-bin.tar.gz
[3]
MySQL pipeline connector 3.3.0: https://repo1.maven.org/maven2/org/apache/flink/flink-cdc-pipeline-connector-mysql/3.3.0/flink-cdc-pipeline-connector-mysql-3.3.0.jar
[4]
Kafka pipeline connector 3.3.0: https://repo1.maven.org/maven2/org/apache/flink/flink-cdc-pipeline-connector-kafka/3.3.0/flink-cdc-pipeline-connector-kafka-3.3.0.jar
[5]
MySQL Connector Java: https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.jar
[6]
debezium-json: https://debezium.io/documentation/reference/stable/integrations/serdes.html
[7]
canal-json: https://github.com/alibaba/canal/wiki
基于 Flink CDC 打造企业级实时数据同步方案
相比于传统数据集成流水线,Flink CDC 提供了全量和增量一体化同步的解决方案。对于一个同步任务,只需使用一个 Flink 作业即可将上游的全量数据和增量数据一致地同步到下游系统。此外, Flink CDC 使用了增量快照算法,无需任何额外配置即可实现全量和增量数据的无缝切换。
现推出“Flink CDC 挑战任务”参与挑战不仅可快速体验《基于 Flink CDC 打造企业级实时数据同步方案》,限时上传任务截图还可获得精美礼品。
点击即可跳转:Flink CDC 挑战任务
相关文章:

基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程的演示都将在 Flink CDC CLI 中进行,无需一行 Java/Scala 代码,也无需安装 IDE。 这篇教程将展示如何基于 Flink CDC YAML 快速构建 MySQL 到 Kafka 的 Streaming ELT 作业,包含整库同步、表结构变更同步演示和关键参数介绍。 准备阶段…...
Hue UI展示中文
个人博客地址:Hue UI展示中文 | 一张假钞的真实世界 如果使用开发分支代码如master分支)编译安装,需要自己编译语言文件。例如Hue安装目录为“/opt/hue”,则安装后执行以下命令: $ cd /opt/hue $ make locales 如果…...

(十 一)趣学设计模式 之 组合模式!
目录 一、 啥是组合模式?二、 为什么要用组合模式?三、 组合模式的实现方式四、 组合模式的优缺点五、 组合模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支…...

安全模块设计:token服务、校验注解(开启token校验、开启签名校验、允许处理API日志)、获取当前用户信息的辅助类
文章目录 引言pom.xmlI 校验注解ApiValidationII token服务TokenService获取当前用户信息的辅助类III 域登录接口响应数据登陆用户信息引言 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/PO…...

Python学习第十八天之深度学习之Tensorboard
Tensorboard 1.TensorBoard详解2.安装3.使用4.图像数据格式的一些理解 后续会陆续在词博客上更新Tensorboard相关知识 1.TensorBoard详解 TensorBoard是一个可视化的模块,该模块功能强大,可用于深度学习网络模型训练查看模型结构和训练效果(…...

Redis安装及其AnotherRedisDesktopManagera安装使用
一、Redis安装 1. 下载Redis安装包 通过网盘分享的文件:Redis 链接: https://pan.baidu.com/s/1elAT8mk3EIoYQQ3WoVVoNg?pwd7yrz 提取码: 7yrz 2. 解压Redis安装包 下载完成后,将Redis安装包解压到一个指定的目录,例如:C:\Re…...

C# dll文件的反编译获取源码
目录 前言操作流程结论 前言 上一篇文章介绍了将C# cs类文件加密为dll文件,在此给大家写一篇关于反编译dll文件的文章。 操作流程 首先,我们需要准备一个C#反编译工具,我这里用的是免费的软件JetBrains dotPeek,类似的有很多&am…...

大语言模型学习--LangChain
LangChain基本概念 ReAct学习资料 https://zhuanlan.zhihu.com/p/660951271 LangChain官网地址 Introduction | 🦜️🔗 LangChain LangChain是一个基于语言模型开发应用程序的框架。它可以实现以下应用程序: 数据感知:将语言模型…...
Spark内存迭代计算
一、宽窄依赖 窄依赖:父RDD的一个分区数据全部发往子RDD的一个分区 宽依赖:父RDD的一个分区数据发往子RDD的多个分区,也称为shuffle 二、Spark是如何进行内存计算的?DAG的作用?Stage阶段划分的作用? &a…...
Python之参数星号(*)使用笔记
背景 在学习python时发现方法调用和方法定义会经常发现有带星号的标记,为了弄明白是怎么使用的。特此做个笔记。 一、参数符号对比速查表 符号类使用场景作用描述示例无符号函数定义/调用普通位置参数或关键字参数.def func(a, b)*函数定义收集多余位置参数为元组…...
一文掌握 Scrapy 框架的详细使用,包括实战案例
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Scrapy 简介2. Scrapy 的核心组件3. 安装 Scrapy4. 创建 Scrapy 项目4.1 创建项目4.2 创建 Spider5. 编写 Spider5.1 定义 Item5.2 编写 Spider 逻辑6. 运行 Scrapy 爬虫6.1 运行爬虫6.2 保存爬取数据7. Scrapy 的高…...

【Mac】git使用再学习
目录 前言 如何使用github建立自己的代码库 第一步:建立本地git与远程github的联系 生成密钥 将密钥加入github 第二步:创建github仓库并clone到本地 第三步:上传文件 常见的git命令 git commit git branch git merge/git rebase …...

【MySQL篇】数据库基础
目录 1,什么是数据库? 2,主流数据库 3,MySQL介绍 1,MySQL架构 2,SQL分类 3,MySQL存储引擎 1,什么是数据库? 数据库(Database,简称DB…...
SpringBoot项目注入 traceId 来追踪整个请求的日志链路
SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排查问题的时候,可以迅速根据 traceId 查找到相关请求的日志,特别是在生产环境的时候,用户可能只提供一个错误截图,我们作为开发…...

【Block总结】SAFMN,空间自适应调制与局部特征增强的协同设计|即插即用
论文信息 标题:Spatially-Adaptive Feature Modulation for Efficient Image Super-Resolution论文链接:https://arxiv.org/pdf/2302.13800代码与模型:https://github.com/sunny2109/SAFMN 创新点 空间自适应特征调制(SAFM&…...
Python爬虫:一文掌握PyQuery模块
文章目录 1. PyQuery 简介2. PyQuery 的安装2.1 安装 PyQuery2.2 安装依赖库3. PyQuery 的基本使用3.1 初始化 PyQuery 对象3.2 选择元素3.3 获取元素内容3.4 遍历元素4. PyQuery 的高级用法4.1 过滤元素4.2 查找子元素4.3 获取属性值4.4 修改元素4.5 添加和删除元素4.6 遍历文…...

LearnOpenGL之Shader编程用算法绘画
———————————————————— 前序 ——————————————————— AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合: Github地址:GitHub - wangyongyao1989/AndroidLearnOpenGL: OpenGL基础及运用 系列文章ÿ…...

如何使用Spring Boot框架整合Redis:超详细案例教程
目录 # 为什么选择Spring Boot与Redis整合? 1. 更新 pom.xml 2. 配置application.yml 3. 创建 Redis 配置类 4. Redis 操作类 5. 创建控制器 6. 启动应用程序 7. 测试 # 为什么选择Spring Boot与Redis整合? 将Spring Boot与Redis整合可以充分利…...

算法--贪心
贪心 原理经典例题[860. 柠檬水找零](https://leetcode.cn/problems/lemonade-change/description/)[2208. 将数组和减半的最少操作次数](https://leetcode.cn/problems/minimum-operations-to-halve-array-sum/description/)[179. 最大数](https://leetcode.cn/problems/large…...

线程控制(创建、终止、等待、分离)
目录 1.前言 2.创建线程 pthread_create函数 3.线程终止 pthread_exit函数 pthread_cancel函数 4.线程等待 5.线程分离 1.前言 在Linux系统中,并不存在真正的线程,只有轻量级进程。所以,Linux系统只提供了操作轻量级进程的系统调用…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

高抗扰度汽车光耦合器的特性
晶台光电推出的125℃光耦合器系列产品(包括KL357NU、KL3H7U和KL817U),专为高温环境下的汽车应用设计,具备以下核心优势和技术特点: 一、技术特性分析 高温稳定性 采用先进的LED技术和优化的IC设计,确保在…...