Cannl 数据同步-ES篇
Cannl 数据同步
目录
- Cannl 数据同步
- 一、概述
- 1、简介
- 2、原理
- 3、模块
- 二、配置MySQL
- 1、使用版本
- 使用版本
- 2、环境要求
- 1)操作系统
- 2)MySQL要求
- 三、配置Canal-server
- 1、下载安装
- 2、**修改配置**
- **单机配置**
- **集群配置**
- **分库分表配置**
- 四、配置canal-adapter
- 1.同步ES配置
- 1 修改启动配置
- 2 配置映射文件
- 3 启动ES数据同步
- 查询所有订阅同步
- 启动
- 4.验证
- 2.注意事项:
- 五、配置canal-admin
一、概述
1、简介
canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。
Git地址:https://github.com/alibaba/canal
docker : https://github.com/alibaba/canal/wiki/Docker-QuickStart
docker-hub: https://hub.docker.com/r/canal/canal-server/tags/
2、原理
canal模拟MySQL主库和从库的交互协议,向MySQL主库发送dump协议,MySQL主库收到dump请求会向canal推送binlog,canal通过解析binlog将数据同步到其他存储(MySQL、Elasticsearch、HBase)中去。
3、模块
canal-server:监听MySQL的binlog。
canal-adapter:相当于canal的客户端,会从canal-server中获取数据,然后对数据进行同步,可以同步到MySQL、Elasticsearch和HBase等存储中去。
canal-admin:支持面向WebUI的canal动态管理能力,支持配置、任务、日志等在线白屏运维能力,具体文档:https://github.com/alibaba/canal/wiki/Canal-Admin-Guide
二、配置MySQL
1、使用版本
使用版本
| 软件 | 版本 |
|---|---|
| canal | 1.1.5 |
| es | 6.8.0 |
2、环境要求
https://github.com/alibaba/canal/wiki/AdminGuide
1)操作系统
a. 纯java开发,windows/linux均可支持
b. jdk建议使用1.6.25以上的版本,稳定可靠,目前阿里巴巴使用基本为此版本。
2)MySQL要求
a. 当前的canal开源版本支持5.7及以下的版本(阿里内部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48),ps. mysql4.x版本没有经过严格测试,理论上是可以兼容
b. canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能,并且配置binlog模式为row.
[mysqld]
log-bin=mysql-bin #添加这一行就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
# 指定同步数据库
据库重启后, 简单测试 my.cnf 配置是否生效:
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
c. canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限
mysql -uroot -pmysql> CREATE USER canal IDENTIFIED BY 'canal';
mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
#--GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
mysql> FLUSH PRIVILEGES;# 针对已有的账户可通过grants查询权限:
mysql> show grants for 'canal';
三、配置Canal-server
server代表一个canal运行实例,instance对应于一个数据队列(1个server对应n个instance)。
1、下载安装
离线下载
访问:https://github.com/alibaba/canal/tree/gh-pages/download ,会列出所有历史的发布版本包
在线下载
wget https://raw.github.com/alibaba/canal/gh-pages/download/canal.deployer-1.1.5.tar.gz
上传解压
# ---------------------------- canal deployer ----------------------------
# 上传
scp /Users/wangfugui/Downloads/dev/middleware/elasticsearch/tools/canal/canal.deployer-1.1.5.tar.gz root@172.16.227.129:/root/software
# canal.deployer-1.1.5.tar.gz 没有父文件夹
mkdir -p /root/software/canal/canal.deployer-1.1.5
# 解压
tar zxvf canal.deployer-1.1.5.tar.gz -C /root/software/canal/canal.deployer-1.1.5
# ---------------------------- canal adapter ----------------------------
# 上传
scp /Users/wangfugui/Downloads/dev/middleware/elasticsearch/tools/canal/canal.adapter-1.1.5.tar.gz root@172.16.227.129:/root/software
# canal.adapter-1.1.5.tar.gz 没有父文件夹
mkdir -p /root/software/canal/canal.adapter-1.1.5
# 解压
tar zxvf canal.adapter-1.1.5.tar.gz -C /root/software/canal/canal.adapter-1.1.5
# ---------------------------- canal admin ----------------------------
# 上传
scp /Users/wangfugui/Downloads/dev/middleware/elasticsearch/tools/canal/canal.admin-1.1.5.tar.gz root@172.16.227.129:/root/software
# canal.admin-1.1.5.tar.gz 没有父文件夹
mkdir -p /root/software/canal/canal.admin-1.1.5
# 解压
tar zxvf canal.admin-1.1.5.tar.gz -C /root/software/canal/canal.admin-1.1.5
2、修改配置
[root@localhost conf]# tree
.
├── canal_local.properties
├── canal.properties # 全局配置,很多配置都可以被 instance.propeties 覆盖,配置通用信息
├── example
│ └── instance.properties # 实例配置,存放实例的非共享配置,比如数据库 IP,账号,密码等
├── logback.xml
├── metrics
│ └── Canal_instances_tmpl.json
└── spring├── base-instance.xml├── default-instance.xml├── file-instance.xml├── group-instance.xml # 多库合并时,可以将多个物理instance合并为一个逻辑instance。├── memory-instance.xml└── tsdb├── h2-tsdb.xml├── mysql-tsdb.xml├── sql│ └── create_table.sql└── sql-map├── sqlmap-config.xml├── sqlmap_history.xml└── sqlmap_snapshot.xml
单机配置
https://github.com/alibaba/canal/wiki/QuickStart
集群配置
https://github.com/alibaba/canal/wiki/AdminGuide#ha%E6%A8%A1%E5%BC%8F%E9%85%8D%E7%BD%AE
分库分表配置
处理分表分库的场景,主要是要使用配置group-instance.xml。group-instance主要针对需要进行多库合并时,可以将多个物理instance合并为一个逻辑instance,提供客户端访问。
1.修改全局配置
https://github.com/alibaba/canal/wiki/AdminGuide
vim /root/software/canal/canal.deployer-1.1.5/conf/canal.properties
#############################################################
######### common argument #############
#############################################################
canal.ip = 172.16.227.129
canal.port = 11111
# canal.instance.parser.parallel = false # 如果系统是1个 cpu,设置为 false
# canal.instance.parser.parallelThreadSize = 2 # cpu个数
#############################################################
######### destinations #############
#############################################################
# 当前server上部署的instance列表:可设置多个,需要在canal.conf.dir对应的目录下建立同名的文件
canal.destinations = mysql_server_0,mysql_server_1,mysql_server_2,mysql_server_3# 启动 group-instance.xml
# 解析数据库信息 : <property name="address" value="${canal.instance.master1.address}" />
canal.instance.global.spring.xml = classpath:spring/group-instance.xml
2.实例配置
垂直分库
有几个数据库,复制几份canal instance的文件夹:
cd /root/software/canal/canal.deployer-1.1.5/conf
cp -R example mysql_server_0;
修改每个实例配置
vim /root/software/canal/canal.deployer-1.1.5/conf/mysql_server_0/instance.properties# position info (group-instance.xml中解析默认为canal.instance.master1.address)
canal.instance.master1.address=172.25.1.246:3307
# username/password
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# mq config # topic用同一个,客户端只监听这一个,也可不同示例配成不同,客户端分别监听
canal.mq.topic=enterprise_topic
# 从库配置
#canal.instance.standby.address =# -------------------------- 监听表 --------------------------
# table regex : 监听表规则(Perl正则表达式,多规则用逗号分隔)
canal.instance.filter.regex=.*\\..*
# table black regex : 过滤表规则
canal.instance.filter.black.regex=mysql\\.slave_.*
# table field filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
canal.instance.filter.field=db_toker_*.tbl_enterprise_mtype_*:id/eid/credit_no/full_name,db_toker_*.tbl_enterprise_stime_*:id/eid/credit_no/full_name
# table field black filter(format: schema1.tableName1:field1/field2,schema2.tableName2:field1/field2)
#canal.instance.filter.black.field=test1.t_product:subject/product_image,test2.t_company:id/name/contact/ch
配置好第一个,其他实例只改数据库连接。
cp -R mysql_server_0 mysql_server_1;
cp -R mysql_server_0 mysql_server_2;
cp -R mysql_server_0 mysql_server_3;
rm -rf example;
水平分库
修改全局配置
vim /root/software/canal/canal.deployer-1.1.5/conf/canal.properties
canal.destinations = mysql_server
修改实例配置
cd /root/software/canal/canal.deployer-1.1.5/conf
mv example mysql_server;vim /root/software/canal/canal.deployer-1.1.5/conf/mysql_server/instance.properties# position info
canal.instance.master1.address=172.25.1.246:3307
canal.instance.master1.journal.name=
canal.instance.master1.position=
canal.instance.master1.timestamp=
canal.instance.master1.gtid=# position info
canal.instance.master2.address=172.25.1.246:3308
canal.instance.master2.journal.name=
canal.instance.master2.position=
canal.instance.master2.timestamp=
canal.instance.master2.gtid=# position info
canal.instance.master3.address=172.25.1.246:3309
canal.instance.master3.journal.name=
canal.instance.master3.position=
canal.instance.master3.timestamp=
canal.instance.master3.gtid=# position info
canal.instance.master4.address=172.25.1.246:3310
canal.instance.master4.journal.name=
canal.instance.master4.position=
canal.instance.master4.timestamp=
canal.instance.master4.gtid=# mq config
canal.mq.topic=enterprise_topic
3.修改group-instance.xml
主要针对需要进行多库合并时,可以将多个物理instance合并为一个逻辑instance,提供客户端访问。
场景:分库业务。 比如产品数据拆分了4个库,每个库会有一个instance,如果不用group,业务上要消费数据时,需要启动4个客户端,分别链接4个instance实例。使用group后,可以在canal server上合并为一个逻辑instance,只需要启动1个客户端,链接这个逻辑instance即可。
vim /root/software/canal/canal.deployer-1.1.5/conf/spring/
# -------------------- 修改 eventParser --------------------<bean id="eventParser" class="com.alibaba.otter.canal.parse.inbound.group.GroupEventParser"><property name="eventParsers"><list><ref bean="eventParser1" /><ref bean="eventParser2" /><ref bean="eventParser3" /><ref bean="eventParser4" /></list></property></bean>
# -------------------- 增加 eventParser3,4 --------------------
<bean id="eventParser3" parent="baseEventParser"><property name="destination" value="${canal.instance.destination}" /><property name="slaveId" value="${canal.instance.mysql.slaveId:0}" /><!-- 心跳配置 --><property name="detectingEnable" value="${canal.instance.detecting.enable:false}" /><property name="detectingSQL" value="${canal.instance.detecting.sql}" /><property name="detectingIntervalInSeconds" value="${canal.instance.detecting.interval.time:5}" /><property name="haController"><bean class="com.alibaba.otter.canal.parse.ha.HeartBeatHAController"><property name="detectingRetryTimes" value="${canal.instance.detecting.retry.threshold:3}" /><property name="switchEnable" value="${canal.instance.detecting.heartbeatHaEnable:false}" /></bean></property><property name="alarmHandler" ref="alarmHandler" /><!-- 解析过滤处理 --><property name="eventFilter"><bean class="com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter" ><constructor-arg index="0" value="${canal.instance.filter.regex:.*\..*}" /></bean></property><property name="eventBlackFilter"><bean class="com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter" ><constructor-arg index="0" value="${canal.instance.filter.black.regex:}" /><constructor-arg index="1" value="false" /></bean></property><!-- 最大事务解析大小,超过该大小后事务将被切分为多个事务投递 --><property name="transactionSize" value="${canal.instance.transaction.size:1024}" /><!-- 网络链接参数 --><property name="receiveBufferSize" value="${canal.instance.network.receiveBufferSize:16384}" /><property name="sendBufferSize" value="${canal.instance.network.sendBufferSize:16384}" /><property name="defaultConnectionTimeoutInSeconds" value="${canal.instance.network.soTimeout:30}" /><!-- 解析编码 --><!-- property name="connectionCharsetNumber" value="${canal.instance.connectionCharsetNumber:33}" /--><property name="connectionCharset" value="${canal.instance.connectionCharset:UTF-8}" /><!-- 解析位点记录 --><property name="logPositionManager"><bean class="com.alibaba.otter.canal.parse.index.MemoryLogPositionManager" /></property><!-- failover切换时回退的时间 --><property name="fallbackIntervalInSeconds" value="${canal.instance.fallbackIntervalInSeconds:60}" /><!-- 解析数据库信息 --><property name="masterInfo"><bean class="com.alibaba.otter.canal.parse.support.AuthenticationInfo" init-method="initPwd"><property name="address" value="${canal.instance.master3.address}" /><property name="username" value="${canal.instance.dbUsername:retl}" /><property name="password" value="${canal.instance.dbPassword:retl}" /><property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" /><property name="enableDruid" value="${canal.instance.enableDruid:false}" /><property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" /></bean></property><property name="standbyInfo"><bean class="com.alibaba.otter.canal.parse.support.AuthenticationInfo" init-method="initPwd"><property name="address" value="${canal.instance.standby3.address}" /><property name="username" value="${canal.instance.dbUsername:retl}" /><property name="password" value="${canal.instance.dbPassword:retl}" /><property name="pwdPublicKey" value="${canal.instance.pwdPublicKey:retl}" /><property name="enableDruid" value="${canal.instance.enableDruid:false}" /><property name="defaultDatabaseName" value="${canal.instance.defaultDatabaseName:}" /></bean></property><!-- 解析起始位点 --><property name="masterPosition"><bean class="com.alibaba.otter.canal.protocol.position.EntryPosition"><property name="journalName" value="${canal.instance.master3.journal.name}" /><property name="position" value="${canal.instance.master3.position}" /><property name="timestamp" value="${canal.instance.master3.timestamp}" /><property name="gtid" value="${canal.instance.master3.gtid}" /></bean></property><property name="standbyPosition"><bean class="com.alibaba.otter.canal.protocol.position.EntryPosition"><property name="journalName" value="${canal.instance.standby3.journal.name}" /><property name="position" value="${canal.instance.standby3.position}" /><property name="timestamp" value="${canal.instance.standby3.timestamp}" /><property name="gtid" value="${canal.instance.standby3.gtid}" /></bean></property><property name="filterQueryDml" value="${canal.instance.filter.query.dml:false}" /><property name="filterQueryDcl" value="${canal.instance.filter.query.dcl:false}" /><property name="filterQueryDdl" value="${canal.instance.filter.query.ddl:false}" /><property name="useDruidDdlFilter" value="${canal.instance.filter.druid.ddl:true}" /><property name="filterDmlInsert" value="${canal.instance.filter.dml.insert:false}" /><property name="filterDmlUpdate" value="${canal.instance.filter.dml.update:false}" /><property name="filterDmlDelete" value="${canal.instance.filter.dml.delete:false}" /><property name="filterRows" value="${canal.instance.filter.rows:false}" /><property name="filterTableError" value="${canal.instance.filter.table.error:false}" /><property name="supportBinlogFormats" value="${canal.instance.binlog.format}" /><property name="supportBinlogImages" value="${canal.instance.binlog.image}" /><!-- parallel parser --><property name="parallel" value="${canal.instance.parser.parallel:true}" /><property name="parallelThreadSize" value="${canal.instance.parser.parallelThreadSize}" /><property name="parallelBufferSize" value="${canal.instance.parser.parallelBufferSize:256}" /><property name="autoResetLatestPosMode" value="${canal.auto.reset.latest.pos.mode:false}" /></bean>
4.启动监听
cd /root/software/canal/canal.deployer-1.1.5/bin
# 虚机1核1G启动失败,改成1核2G启动成功
./startup.sh
# 查看canal进程
ps aux | grep canal
# 日志路径
cd /root/software/canal/canal.deployer-1.1.5/logs
#./stop.sh'
https://github.com/alibaba/canal/blob/master/example/src/main/java/com/alibaba/otter/canal/example
客户端过滤数据会覆盖服务端过滤规则,按需配置。
四、配置canal-adapter
1.同步ES配置
-
Adapter本质上是为了将canal-server订阅到的实时增量数据进行消费,相当于client。
-
client-adapter分为适配器和启动器两部分, 适配器为多个fat jar, 每个适配器会将自己所需的依赖打成一个包, 以SPI的方式让启动器动态加载, 目前所有支持的适配器都放置在plugin目录下。
-
logback.xml中默认日志等级为debug,线上使用时,记得改info。
1 修改启动配置
vim /root/software/canal/canal.adapter-1.1.5/conf/application.ymlcanal.conf:consumerProperties:# canal tcp consumercanal.tcp.server.host: 127.0.0.1:11111canal.tcp.zookeeper.hosts:canal.tcp.batch.size: 500canal.tcp.username:canal.tcp.password:canalAdapters:- instance: mysql_server # canal instance Name or mq topic namegroups:- groupId: g1outerAdapters:- name: logger- name: eshosts: 172.16.227.129:9300,172.16.227.130:9300,172.16.227.131:9300 # 127.0.0.1:9200 for rest mod(es 集群地址, 逗号分隔)properties:mode: rest # or rest# security.auth: test:123456 # only used for rest modecluster.name: my-es-cluster
adapter将会自动加载 conf/es 下的所有.yml结尾的配置文件
说明:
一份数据可以被多个group同时消费, 多个group之间会是一个并行执行, 一个group内部是一个串行执行多个outerAdapters
目前client adapter数据订阅的方式支持两种,直连canal server 或者 订阅kafka/RocketMQ的消息
2 配置映射文件
使用adapter同步mysql数据至es,需要预先在es中建立mapping关系,每个索引都需要定义一个配置。
修改 conf/es/mytest_user.yml文件:
dataSourceKey: defaultDS # 源数据源的key, 对应上面配置的srcDataSources中的值
outerAdapterKey: exampleKey # 对应application.yml中es配置的key
destination: mysql_server_0 # cannal的instance或者MQ的topic
groupId: g1 # 对应MQ模式下的groupId, 只会同步对应groupId的数据
esMapping:_index: enterprise # es 的索引名称_type: _doc # es 的type名称, es7下无需配置此项_id: _id # es 的_id, 如果不配置该项必须配置下面的pk项_id则会由es自动分配
# pk: id # 如果不需要_id, 则需要指定一个属性为主键属性# sql映射sql: "select a.id as _id, a.name, a.role_id, a.c_time from user a"
# objFields:
# _labels: array:; # 数组或者对象属性, array:; 代表以;字段里面是以;分隔的
# _obj: object # json对象etlCondition: "" # etl 的条件参数commitBatch: 3000 # 提交批大小
该sql对应的es mapping示例:
{"mytest_user": {"mappings": {"_doc": {"properties": {"name": {"type": "text"},"role_id": {"type": "long"},"c_time": {"type": "date"}}}}}
}
ClientAdapter目前只支持垂直分库,不支持水平分库,待完善。
- (后续支持) ElasticSearch多表数据同步,ETL功能
3 启动ES数据同步
查询所有订阅同步
curl http://127.0.0.1:8081/destinations
数据同步开关
增量同步
默认值开启DML 同步,如果需要使用DDL同步能力,需要在rdb中将配置mirrorDb为true注释打开。
全量同步
参考官网 https://github.com/alibaba/canal/wiki/ClientAdapter#322-%E6%95%B0%E6%8D%AE%E5%90%8C%E6%AD%A5%E5%BC%80%E5%85%B3
开关
curl http://127.0.0.1:8081/syncSwitch/example/off -X PUT
开关状态
curl http://127.0.0.1:8081/syncSwitch/example
启动
# 启动canal-adapter启动器
./startup.sh
4.验证
新增mysql mytest.user表的数据, 将会自动同步到es的mytest_user索引下面, 并会打出DML的log
修改mysql mytest.role表的role_name, 将会自动同步es的mytest_user索引中的role_name数据
新增或者修改mysql mytest.label表的label, 将会自动同步es的mytest_user索引中的labels数据
2.注意事项:
Step1: 先把 adapter 下面的 bootstrap.yml,全部注释掉,否则会提示你 XX 表不存在。
Step2: 再修改 adapter 的 application.yml 配置文件。
Step3: 修改我们在 application.yml 中配置的目标数据源 es7 文件夹内容。
五、配置canal-admin
在线下载
wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.admin-1.1.5.tar.gz
解压: tar zxvf canal.admin-1.1.5.tar.gz
创建canal-admin对应数据库
相关文章:
Cannl 数据同步-ES篇
Cannl 数据同步 目录 Cannl 数据同步一、概述1、简介2、原理3、模块 二、配置MySQL1、使用版本使用版本 2、环境要求1)操作系统2)MySQL要求 三、配置Canal-server1、下载安装2、**修改配置****单机配置****集群配置****分库分表配置** 四、配置canal-ada…...
Webpack 前端性能优化全攻略
文章目录 1. 性能优化全景图1.1 优化维度概览1.2 优化效果指标 2. 构建速度优化2.1 缓存策略2.2 并行处理2.3 减少构建范围 3. 输出质量优化3.1 代码分割3.2 Tree Shaking3.3 压缩优化 4. 运行时性能优化4.1 懒加载4.2 预加载4.3 资源优化 5. 高级优化策略5.1 持久化缓存5.2 模…...
时间序列分析的军火库:AutoTS、Darts、Kats、PaddleTS、tfts 和 FancyTS解析
引言:时间序列分析的现代挑战 时间序列分析在多个领域中扮演着关键角色,包括工程、金融、气象、工业预测等。随着开源工具的快速发展,开发者可以通过多种库快速实现时间序列预测与分析。本文将对 AutoTS、Darts、Kats、PaddleTS、tfts 和 FancyTS 六大主流库进行详细解析,…...
MySQL意向锁我该怎么理解?
在MySQL中,意向锁(Intention Lock)是一种用于协调不同粒度锁(如表锁和行锁)的机制,其核心目的是在保证数据一致性的同时提高并发性能。以下是关于意向锁的详细解析: 一、意向锁的作用 意向锁的…...
Linux 操作系统简介
Linux 操作系统 Linux 是一种自由和开源的操作系统,最初由芬兰的 Linus Torvalds 在1991年创建。它是一个类 Unix 操作系统,广泛用于服务器、个人电脑和嵌入式设备。Linux 操作系统的核心是 Linux 内核,其周围构建了各种工具和应用程序&…...
前端大文件上传(分片上传)与下载
文章目录 一、问题二、思路1、选择文件2、校验文件是否符合规范3、文件切片上传4、分片上传注意点5、大文件下载 一、问题 日常业务中难免出现前端需要向后端传输大型文件的情况,这时单次的请求不能满足传输大文件的需求,就需要用到分片上传 业务需求为…...
工业领域 - 离散工业与流程工业极简理解
离散工业 离散工业是指通过组装或加工离散的零部件来生产产品 离散工业生产的是可数的、独立的产品 离散工业的每个产品通常由多个部件组成,生产过程可以分解为多个独立的步骤 离散工业生产过程主要涉及组装和加工,组装是将多个零部件组装成最终产品&…...
一个使用Python和相关深度学习库(如`PyTorch`)实现GCN(图卷积网络)与PPO(近端策略优化)强化学习模型结合的详细代码示例
以下是一个使用Python和相关深度学习库(如PyTorch)实现GCN(图卷积网络)与PPO(近端策略优化)强化学习模型结合的详细代码示例。这个示例假设你在一个图环境中进行强化学习任务。 1. 安装必要的库 确保你已…...
【YOLOv8】YOLOv8改进系列(7)----替换主干网络之LSKNet
主页:HABUO🍁主页:HABUO 🍁YOLOv8入门改进专栏🍁 🍁如果再也不能见到你,祝你早安,午安,晚安🍁 【YOLOv8改进系列】: 【YOLOv8】YOLOv8结构解读…...
CCF CSP 第30次(2023.05)(1_仓库规划_C++)
CCF CSP 第30次(2023.05)(1_仓库规划_C) 题目描述:输入格式:输出格式:样例输入:样例输出:样例解释:子任务:解题思路:思路一࿱…...
【LangChain】理论及应用实战(7):LCEL
文章目录 一、LCEL简介二、LCEL示例2.1 一个简单的示例2.2 RAG Search 三、LCEL下核心组件(PromptLLM)的实现3.1 单链结构3.2 使用Runnables来连接多链结构3.2.1 连接多链3.2.2 多链执行与结果合并3.2.3 查询SQL 3.3 自定义输出解析器 四、LCEL添加Memor…...
Leetcode 刷题笔记1 单调栈part02
leetcode 42 接雨水 本题用双指针法更为浅显易懂 双指针法: class Solution:def trap(self, height: List[int]) -> int:leftheight, rightheight [0] * len(height), [0] * len(height)ans 0leftheight[0] height[0]for i in range(1, len(height)):lefth…...
ai本地化 部署常用Ollama软件
现在用最简单的方式介绍一下 Ollama 的作用和用法: Ollama 是什么? Ollama 是一个让你能在自己电脑上免费运行大型语言模型(比如 Llama 3、Mistral 等)的工具。 相当于你本地电脑上有一个类似 ChatGPT 的 AI,但完全…...
vllm部署QwQ32B(Q4_K_M)
vllm部署QwQ32B(Q4_K_M) Ollama是一个轻量级的开源LLM推理框架,注重简单易用和本地部署,而VLLM是一个专注于高效推理的开源大型语言模型推理引擎,适合开发者在实际应用中集成和使用。两者的主要区别在于Ollama更注重为用户提供多种模型选择和…...
VLLM:虚拟大型语言模型(Virtual Large Language Model)
VLLM:虚拟大型语言模型(Virtual Large Language Model) VLLM指的是一种基于云计算的大型语言模型的虚拟实现。它通常是指那些由多个服务器组成的分布式计算环境中的复杂机器学习模型,这些模型能够处理和理解大量的文本数据。VLLM的…...
企业内网监控软件的选型与应用:四款主流产品的深度剖析
在数字化办公的时代背景下,企业内部网络管理的重要性愈发显著。对于企业管理者而言,如何精准掌握员工工作状态,保障网络安全与工作效率,已成为亟待解决的关键问题。本文将深入剖析四款主流企业内网监控软件,探讨其功能…...
蓝桥杯省赛(2024)
问题描述 小蓝和朋友们在玩一个报数游戏。由于今年是 20242024 年,他们决定要从小到大轮流报出是 2020 或 2424 倍数的正整数。前 1010 个被报出的数是:20,24,40,48,60,72,80,96,100,12020,24,40,48,60,72,80,96,100,120。请问第 2024202420242024202420…...
Qt窗口控件之字体对话框QFontDialog
字体对话框QFontDialog QFontDialog 是 Qt 内置的字体对话框,用户能够在这里选择字体的样式、大小,设置加粗和下划线并将结果作为返回值返回。QFontDialog 最好使用其提供的静态函数实例化匿名对象,并获取返回值最为用户选择字体设置的结果。…...
Qt QML实现视频帧提取
## 前言 视频帧率(Frame Rate)是指视频播放时每秒显示的画面帧数,通常用fps(Frames Per Second)来表示。视频是由一系列静止的图像帧组成的,而视频帧率则决定了这些图像帧在单位时间内播放的速度。较高的视…...
网络性能指标
目录 时延 延迟抖动 丢包率 时延:数据传输的快慢,影响实时性。抖动:延迟的变化,影响稳定性。丢包率:数据丢失的比例,影响可靠性。 时延 定义:时延是指数据从发送端传输到接收端所需的时间&…...
在 Ubuntu 服务器上使用宝塔面板搭建博客
📌 介绍 在本教程中,我们将介绍如何在 Ubuntu 服务器 上安装 宝塔面板,并使用 Nginx PHP MySQL 搭建一个博客(如 WordPress)。 主要步骤包括: 安装宝塔面板配置 Nginx PHP MySQL绑定域名与 SSL 证书…...
计算机组成与接口16
1.0的表示方法唯一的有补码,移码,ASCII码 2.可以多次编程的只读存储器是EPROM,掩膜式ROM 3.8259A芯片可设置成脉冲边沿触发方式;全嵌套方式;自动中断结束方式;特殊屏蔽方式 4.计算机系统中的总线按层次可以分为板级…...
有了大语言模型还需要 RAG 做什么
一、百炼平台简介 阿里云的百炼平台就像是一个超级智能的大厨房,专门为那些想要做出美味AI大餐的企业和个人厨师准备的。你不需要从头开始做每一道菜,因为这个厨房已经为你准备了很多预制食材(预训练模型),你可以根据…...
【从0到1搞懂大模型】RNN基础(4)
先说几个常用的可以下载数据集的地方 平台:kaggle(https://www.kaggle.com/datasets) 和鲸社区(https://www.heywhale.com/home) 阿里天池(https://tianchi.aliyun.com/) 其他:海量公…...
【第K小数——可持久化权值线段树】
题目 代码 #include <bits/stdc.h> using namespace std;const int N 1e5 10;int a[N], b[N]; int n, m, len; int rt[N], idx; // idx 是点分配器struct node {int l, r;int s; } tr[N * 22];int getw(int x) {return lower_bound(b 1, b len 1, x) - b; }int bui…...
直流减速电机控制实验:Simulink应用层开发(1)
文章目录 1 阶段目标2 功能需求3 需求拆解及方案研究3.1 需求拆解3.2 按键指令识别3.3 电机状态转换3.4 脉宽及启停判断4 总结1 阶段目标 本文是《直流减速电机控制实验》的第三部分,会通过图文结合的方式,手把手带读者操作Simulink工具进行直流减速电机的应用层开发。 本章…...
本地部署Deep Seek-R1,搭建个人知识库——笔记
目录 一、本地部署 DeepSeek - R1 1:安装Ollama 2:部署DeepSeek - R1模型 3:安装Cherry Studio 二、构建私有知识库 一、本地部署 DeepSeek - R1 1:安装Ollama 1.打开Ollama下载安装 未科学上网,I 先打开迅雷再下…...
【软考-架构】5.3、IPv6-网络规划-网络存储-补充考点
✨资料&文章更新✨ GitHub地址:https://github.com/tyronczt/system_architect 文章目录 IPv6网络规划与设计建筑物综合布线系统PDS💯考试真题第一题第二题 磁盘冗余阵列网络存储技术其他考点💯考试真题第一题第二题 IPv6 网络规划与设计…...
fastapi+angular外卖系统
说明: fastapiangular外卖系统 1.美食分类(粥,粉,面,炸鸡,炒菜,西餐,奶茶等等) 2.商家列表 (kfc,兰州拉面,湘菜馆,早餐店…...
Oracle静默安装方法
Web服务器上面的Linux一般是不会有图形界面的,所有通过图形界面来安装Linux的方式在没有图形界面的Linux上面是行不通的,我们要使用的安装方式叫做Linux的静默安装。即在没有图形界面的Linux上面安装。 1. 下载地址 http://www.oracle.com/technetwork…...
