`
agapple
  • 浏览: 1603314 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Canal AdminGuide

 
阅读更多

 背景

   先前开源了一个开源项目: 【阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费】 

   本文主要是介绍一下如何部署&使用

 

环境要求

1. 操作系统

    a.  纯java开发,windows/linux均可支持

    b.  jdk建议使用1.6.25以上的版本,稳定可靠,目前阿里巴巴使用基本为此版本. 

 

2. mysql要求

   a. 目前canal支持mysql 5.5版本以下,对mysql5.6暂不支持,(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重复  
   c.  canal的原理是模拟自己为mysql slave,所以这里一定需要做为mysql slave的相关权限 
CREATE USER canal IDENTIFIED BY 'canal';    
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;  
FLUSH PRIVILEGES; 
     针对已有的账户可通过grants查询权限:
show grants for 'canal' 

 

部署

1. 获取发布包

方法1: (直接下载)

访问:https://github.com/alibaba/canal/tree/gh-pages/download ,会列出所有历史的发布版本包

下载方式,比如以1.0.4版本为例子: 

wget https://raw.github.com/alibaba/canal/gh-pages/download/canal.deployer-1.0.4.tar.gz

方法2:  (自己编译)

git clone git@github.com:alibaba/canal.git
git co canal-$version #切换到对应的版本上
mvn clean install -Denv=release

执行完成后,会在canal工程根目录下生成一个target目录,里面会包含一个 canal.deployer-$verion.tar.gz

 

2. 目录结构

解压缩发布包后,可得如下目录结构:

drwxr-xr-x 2 jianghang jianghang  136 2013-03-19 15:03 bin
drwxr-xr-x 4 jianghang jianghang  160 2013-03-19 15:03 conf
drwxr-xr-x 2 jianghang jianghang 1352 2013-03-19 15:03 lib
drwxr-xr-x 2 jianghang jianghang   48 2013-03-19 15:03 logs

 

3. 启动/停止

   linux启动 :   

sh startup.sh 

   linux带debug方式启动:(默认使用suspend=y,阻塞等待你remote debug链接成功)

sh startup.sh debug 9099

   linux停止:

sh stop.sh

       

  几点注意: 

  1. linux启动完成后,会在bin目录下生成canal.pid,stop.sh会读取canal.pid进行进程关闭
  2. startup.sh默认读取系统环境变量中的which java获得JAVA执行路径,需要设置PATH=$JAVA_HOME/bin环境变量

-------------   

    windows启动:(windows支持相对比较弱)

startup.bat

    windows停止:直接关闭终端即可

 

配置

介绍配置之前,先了解下canal的配置加载方式:

 

canal配置方式有两种:

  1. ManagerCanalInstanceGenerator: 基于manager管理的配置方式,目前alibaba内部配置使用这种方式。大家可以实现CanalConfigClient,连接各自的管理系统,即可完成接入。
  2. SpringCanalInstanceGenerator:基于本地spring xml的配置方式,目前开源版本已经自带该功能所有代码,建议使用

Spring配置

spring配置的原理是将整个配置抽象为两部分:

  • xxxx-instance.xml   (canal组件的配置定义,可以在多个instance配置中共享)
  • xxxx.properties   (每个instance通道都有各自一份定义,因为每个mysql的ip,帐号,密码等信息不会相同)

通过spring的PropertyPlaceholderConfigurer通过机制将其融合,生成一份instance实例对象,每个instance对应的组件都是相互独立的,互不影响

 

properties配置文件

properties配置分为两部分:

  • canal.properties  (系统根配置文件)
  • instance.properties  (instance级别的配置文件,每个instance一份)

canal.properties介绍:

 

canal配置主要分为两部分定义:

1.   instance列表定义 (列出当前server上有多少个instance,每个instance的加载方式是spring/manager等)        

参数名字 参数说明 默认值
canal.destinations 当前server上部署的instance列表
canal.conf.dir conf/目录所在的路径 ../conf
canal.auto.scan 开启instance自动扫描
如果配置为true,canal.conf.dir目录下的instance配置变化会自动触发:
a. instance目录新增: 触发instance配置载入,lazy为true时则自动启动
b. instance目录删除:卸载对应instance配置,如已启动则进行关闭
c. instance.properties文件变化:reload instance配置,如已启动自动进行重启操作
true
canal.auto.scan.interval instance自动扫描的间隔时间,单位秒 5
canal.instance.global.mode 全局配置加载方式 spring
canal.instance.global.lazy 全局lazy模式 false
canal.instance.global.manager.address 全局的manager配置方式的链接信息
canal.instance.global.spring.xml 全局的spring配置方式的组件文件 classpath:spring/memory-instance.xml 
 (spring目录相对于canal.conf.dir)
canal.instance.example.mode
canal.instance.example.lazy
canal.instance.example.spring.xml
.....
instance级别的配置定义,如有配置,会自动覆盖全局配置定义模式
命名规则:canal.instance.{name}.xxx
canal.instance.tsdb.spring.xml v1.0.25版本新增,全局的tsdb配置方式的组件文件 classpath:spring/tsdb/h2-tsdb.xml (spring目录相对于canal.conf.dir)

 

 

2.  common参数定义,比如可以将instance.properties的公用参数,抽取放置到这里,这样每个instance启动的时候就可以共享.  【instance.properties配置定义优先级高于canal.properties】

参数名字 参数说明 默认值
canal.id 每个canal server实例的唯一标识,暂无实际意义 1
canal.ip canal server绑定的本地IP信息,如果不配置,默认选择一个本机IP进行启动服务
canal.port canal server提供socket服务的端口 11111
canal.zkServers canal server链接zookeeper集群的链接信息
例子:10.20.144.22:2181,10.20.144.51:2181
canal.zookeeper.flush.period canal持久化数据到zookeeper上的更新频率,单位毫秒 1000
canal.instance.memory.batch.mode canal内存store中数据缓存模式
1. ITEMSIZE : 根据buffer.size进行限制,只限制记录的数量
2. MEMSIZE : 根据buffer.size  * buffer.memunit的大小,限制缓存记录的大小
MEMSIZE
canal.instance.memory.buffer.size canal内存store中可缓存buffer记录数,需要为2的指数 16384
canal.instance.memory.buffer.memunit 内存记录的单位大小,默认1KB,和buffer.size组合决定最终的内存使用大小 1024
canal.instance.transactionn.size 最大事务完整解析的长度支持
超过该长度后,一个事务可能会被拆分成多次提交到canal store中,无法保证事务的完整可见性
1024
canal.instance.fallbackIntervalInSeconds canal发生mysql切换时,在新的mysql库上查找binlog时需要往前查找的时间,单位秒
说明:mysql主备库可能存在解析延迟或者时钟不统一,需要回退一段时间,保证数据不丢
60
canal.instance.detecting.enable 是否开启心跳检查 false
canal.instance.detecting.sql 心跳检查sql insert into retl.xdual values(1,now()) on duplicate key update x=now()
canal.instance.detecting.interval.time 心跳检查频率,单位秒 3
canal.instance.detecting.retry.threshold 心跳检查失败重试次数 3
canal.instance.detecting.heartbeatHaEnable 心跳检查失败后,是否开启自动mysql自动切换
说明:比如心跳检查失败超过阀值后,如果该配置为true,canal就会自动链到mysql备库获取binlog数据
false
canal.instance.network.receiveBufferSize 网络链接参数,SocketOptions.SO_RCVBUF 16384
canal.instance.network.sendBufferSize 网络链接参数,SocketOptions.SO_SNDBUF 16384
canal.instance.network.soTimeout 网络链接参数,SocketOptions.SO_TIMEOUT 30
canal.instance.filter.druid.ddl 是否使用druid处理所有的ddl解析来获取库和表名

true

canal.instance.filter.query.dcl 是否忽略dcl语句 false
canal.instance.filter.query.dml 是否忽略dml语句
(mysql5.6之后,在row模式下每条DML语句也会记录SQL到binlog中,可参考MySQL文档)
false
canal.instance.filter.query.ddl 是否忽略ddl语句 false
canal.instance.filter.table.error

是否忽略binlog表结构获取失败的异常

(主要解决回溯binlog时,对应表已被删除或者表结构和binlog不一致的情况)

false
canal.instance.filter.rows

是否dml的数据变更事件

(主要针对用户只订阅ddl/dcl的操作)

false
canal.instance.filter.transaction.entry 是否忽略事务头和尾,比如针对写入kakfa的消息时,不需要写入TransactionBegin/Transactionend事件 false
canal.instance.binlog.format 支持的binlog format格式列表
(otter会有支持format格式限制)
ROW,STATEMENT,MIXED
canal.instance.binlog.image 支持的binlog image格式列表
(otter会有支持format格式限制)
FULL,MINIMAL,NOBLOB
canal.instance.get.ddl.isolation

ddl语句是否单独一个batch返回

(比如下游dml/ddl如果做batch内无序并发处理,会导致结构不一致)

false
canal.instance.parser.parallel

是否开启binlog并行解析模式

(串行解析资源占用少,但性能有瓶颈, 并行解析可以提升近2.5倍+)

true
canal.instance.parser.parallelBufferSize binlog并行解析的异步ringbuffer队列
(必须为2的指数)

256

canal.instance.tsdb.enable 是否开启tablemeta的tsdb能力 true
canal.instance.tsdb.dir 主要针对h2-tsdb.xml时对应h2文件的存放目录,默认为conf/xx/h2.mv.db ${canal.file.data.dir:../conf}/${canal.instance.destination:}
canal.instance.tsdb.url

jdbc url的配置

(h2的地址为默认值,如果是mysql需要自行定义)

jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;
canal.instance.tsdb.dbUsername

jdbc url的配置

(h2的地址为默认值,如果是mysql需要自行定义)

canal
canal.instance.tsdb.dbPassword

jdbc url的配置

(h2的地址为默认值,如果是mysql需要自行定义)

canal
canal.instance.rds.accesskey

aliyun账号的ak信息 (如果不需要在本地binlog超过18小时被清理后自动下载oss上的binlog,可以忽略该值)

canal.instance.rds.secretkey
aliyun账号的sk信息
(如果不需要在本地binlog超过18小时被清理后自动下载oss上的binlog,可以忽略该值)

 

instance.properties介绍:

a. 在canal.properties定义了canal.destinations后,需要在canal.conf.dir对应的目录下建立同名的文件

比如:

 

canal.destinations = example1,example2
 这时需要创建example1和example2两个目录,每个目录里各自有一份instance.properties.

 

 ps. canal自带了一份instance.properties demo,可直接复制conf/example目录进行配置修改

 

cp -R example example1/
cp -R example example2/
 

 

b. 如果canal.properties未定义instance列表,但开启了canal.auto.scan时

  • server第一次启动时,会自动扫描conf目录下,将文件名做为instance name,启动对应的instance
  • server运行过程中,会根据canal.auto.scan.interval定义的频率,进行扫描
    1. 发现目录有新增,启动新的instance
    2. 发现目录有删除,关闭老的instance
    3. 发现对应目录的instance.properties有变化,重启instance

一个标准的conf目录结果:

 

jianghang@jianghang-laptop:~/work/canal/deployer/target/canal$ ls -l conf/
总用量 8
-rwxrwxrwx 1 jianghang jianghang 1677 2013-03-19 15:03 canal.properties  ##系统配置
drwxr-xr-x 2 jianghang jianghang   88 2013-03-19 15:03 example  ## instance配置
-rwxrwxrwx 1 jianghang jianghang 1840 2013-03-19 15:03 logback.xml ## 日志文件
drwxr-xr-x 2 jianghang jianghang  168 2013-03-19 17:04 spring  ## spring instance莫把呢
 

 

instance.properties参数列表:

参数名字 参数说明 默认值
canal.instance.mysql.slaveId mysql集群配置中的serverId概念,需要保证和当前mysql集群中id唯一
(v1.1.x版本之后canal会自动生成,不需要手工指定)
canal.instance.master.address mysql主库链接地址 127.0.0.1:3306
canal.instance.master.journal.name mysql主库链接时起始的binlog文件
canal.instance.master.position mysql主库链接时起始的binlog偏移量
canal.instance.master.timestamp mysql主库链接时起始的binlog的时间戳
canal.instance.gtidon 是否启用mysql gtid的订阅模式 false
canal.instance.master.gtid mysql主库链接时对应的gtid位点
canal.instance.dbUsername mysql数据库帐号 canal
canal.instance.dbPassword mysql数据库密码 canal
canal.instance.defaultDatabaseName mysql链接时默认schema  
canal.instance.connectionCharset mysql 数据解析编码 UTF-8
canal.instance.filter.regex

mysql 数据解析关注的表,Perl正则表达式.

多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)


常见例子:

1.  所有表:.*   or  .*\\..*
2.  canal schema下所有表: canal\\..*
3.  canal下的以canal打头的表:canal\\.canal.*
4.  canal schema下的一张表:canal.test1

5.  多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)

.*\\..*
canal.instance.filter.black.regex

mysql 数据解析表的黑名单,表达式规则见白名单的规则

canal.instance.rds.instanceId
aliyun rds对应的实例id信息
(如果不需要在本地binlog超过18小时被清理后自动下载oss上的binlog,可以忽略该值)

 

几点说明:

1.  mysql链接时的起始位置

  • canal.instance.master.journal.name +  canal.instance.master.position :  精确指定一个binlog位点,进行启动
  • canal.instance.master.timestamp :  指定一个时间戳,canal会自动遍历mysql binlog,找到对应时间戳的binlog位点后,进行启动
  • 不指定任何信息:默认从当前数据库的位点,进行启动。(show master status)

2. mysql解析关注表定义

  • 标准的Perl正则,注意转义时需要双斜杠:\\

3. mysql链接的编码

  • 目前canal版本仅支持一个数据库只有一种编码,如果一个库存在多个编码,需要通过filter.regex配置,将其拆分为多个canal instance,为每个instance指定不同的编码

 

instance.xml配置文件

目前默认支持的instance.xml有以下几种:

  1. spring/memory-instance.xml
  2. spring/default-instance.xml
  3. spring/group-instance.xml

在介绍instance配置之前,先了解一下canal如何维护一份增量订阅&消费的关系信息:

  • 解析位点 (parse模块会记录,上一次解析binlog到了什么位置,对应组件为:CanalLogPositionManager)
  • 消费位点 (canal server在接收了客户端的ack后,就会记录客户端提交的最后位点,对应的组件为:CanalMetaManager)

对应的两个位点组件,目前都有几种实现:

  • memory  (memory-instance.xml中使用)
  • zookeeper
  • mixed  
  • period   (default-instance.xml中使用,集合了zookeeper+memory模式,先写内存,定时刷新数据到zookeeper上)

-------------------

memory-instance.xml介绍:

   所有的组件(parser , sink , store)都选择了内存版模式,记录位点的都选择了memory模式,重启后又会回到初始位点进行解析 

   特点:速度最快,依赖最少(不需要zookeeper)

   场景:一般应用在quickstart,或者是出现问题后,进行数据分析的场景,不应该将其应用于生产环境

 

default-instance.xml介绍:

   store选择了内存模式,其余的parser/sink依赖的位点管理选择了持久化模式,目前持久化的方式主要是写入zookeeper,保证数据集群共享. 

   特点:支持HA

   场景:生产环境,集群化部署. 

 

group-instance.xml介绍:

    主要针对需要进行多库合并时,可以将多个物理instance合并为一个逻辑instance,提供客户端访问。

    场景:分库业务。 比如产品数据拆分了4个库,每个库会有一个instance,如果不用group,业务上要消费数据时,需要启动4个客户端,分别链接4个instance实例。使用group后,可以在canal server上合并为一个逻辑instance,只需要启动1个客户端,链接这个逻辑instance即可. 

 

instance.xml设计初衷:

  允许进行自定义扩展,比如实现了基于数据库的位点管理后,可以自定义一份自己的instance.xml,整个canal设计中最大的灵活性在于此

 

HA模式配置

1.  机器准备

     a.  运行canal的机器: 10.20.144.22 , 10.20.144.51.

     b.  zookeeper地址为10.20.144.51:2181

     c.  mysql地址:10.20.144.15:3306

2.  按照部署和配置,在单台机器上各自完成配置,演示时instance name为example

   a. 修改canal.properties,加上zookeeper配置

 

canal.zkServers=10.20.144.51:2181
canal.instance.global.spring.xml = classpath:spring/default-instance.xml

   b. 创建example目录,并修改instance.properties

canal.instance.mysql.slaveId = 1234 ##另外一台机器改成1235,保证slaveId不重复即可
canal.instance.master.address = 10.20.144.15:3306

   

    注意: 两台机器上的instance目录的名字需要保证完全一致,HA模式是依赖于instance name进行管理,同时必须都选择default-instance.xml配置

3.  启动两台机器的canal

-------
ssh 10.20.144.51
sh bin/startup.sh
--------
ssh 10.20.144.22
sh bin/startup.sh

 启动后,你可以查看logs/example/example.log,只会看到一台机器上出现了启动成功的日志。

   

  比如我这里启动成功的是10.20.144.51

2013-03-19 18:18:20.590 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties]
2013-03-19 18:18:20.596 [main] INFO  c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [example/instance.properties]
2013-03-19 18:18:20.831 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-example 
2013-03-19 18:18:20.845 [main] INFO  c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start successful...

    

   查看一下zookeeper中的节点信息,也可以知道当前工作的节点为10.20.144.51:11111

[zk: localhost:2181(CONNECTED) 15] get /otter/canal/destinations/example/running  
{"active":true,"address":"10.20.144.51:11111","cid":1}

 

4.  客户端链接, 消费数据

    a.  可以直接指定zookeeper地址和instance name,canal client会自动从zookeeper中的running节点,获取当前服务的工作节点,然后与其建立链接:

CanalConnector connector = CanalConnectors.newClusterConnector("10.20.144.51:2181", "example", "", "");

    b. 链接成功后,canal server会记录当前正在工作的canal client信息,比如客户端ip,链接的端口信息等 (聪明的你,应该也可以发现,canal client也可以支持HA功能)

[zk: localhost:2181(CONNECTED) 17] get /otter/canal/destinations/example/1001/running
{"active":true,"address":"10.12.48.171:50544","clientId":1001}

    c. 数据消费成功后,canal server会在zookeeper中记录下当前最后一次消费成功的binlog位点.  (下次你重启client时,会从这最后一个位点继续进行消费)

[zk: localhost:2181(CONNECTED) 16] get /otter/canal/destinations/example/1001/cursor
{"@type":"com.alibaba.otter.canal.protocol.position.LogPosition","identity":{"slaveId":-1,"sourceAddress":{"address":"10.20.144.15","port":3306}},"postion":{"included":false,"journalName":"mysql-bin.002253","position":2574756,"timestamp":1363688722000}}

 

5.  重启一下canal server

    停止正在工作的10.20.144.51的canal server

ssh 10.20.144.51 
sh bin/stop.sh

   这时10.20.144.22会立马启动example instance,提供新的数据服务

[zk: localhost:2181(CONNECTED) 19] get /otter/canal/destinations/example/running
{"active":true,"address":"10.20.144.22:11111","cid":1}

   与此同时,客户端也会随着canal server的切换,通过获取zookeeper中的最新地址,与新的canal server建立链接,继续消费数据,整个过程自动完成

 

触发HA自动切换场景 (server/client HA模式都有效)

1. 正常场景

    a.  正常关闭canal server(会释放instance的所有资源,包括删除running节点)

    b.  平滑切换(gracefully)

         操作:更新对应instance的running节点内容,将"active"设置为false,对应的running节点收到消息后,会主动释放running节点,让出控制权但自己jvm不退出,gracefully. 

{"active":false,"address":"10.20.144.22:11111","cid":1}

2.  异常场景

   a.  canal server对应的jvm异常crash,running节点的释放会在对应的zookeeper session失效后,释放running节点(EPHEMERAL节点)

       ps. session过期时间默认为zookeeper配置文件中定义的tickTime的20倍,如果不改动zookeeper配置,那默认就是40秒

   b.  canal server所在的网络出现闪断,导致zookeeper认为session失效,释放了running节点,此时canal server对应的jvm并未退出,(一种假死状态,非常特殊的情况)

      ps. 为了保护假死状态的canal server,避免因瞬间runing失效导致instance重新分布,所以做了一个策略:canal server在收到running节点释放后,延迟一段时间抢占running,原本running节点的拥有者可以不需要等待延迟,优先取得running节点,可以保证假死状态下尽可能不无谓的释放资源。 目前延迟时间的默认值为5秒,即running节点针对假死状态的保护期为5秒. 

 

mysql多节点解析配置(parse解析自动切换)

1.  mysql机器准备

     准备两台mysql机器,配置为M-M模式,比如ip为:10.20.144.25:3306,10.20.144.29:3306

[mysqld] 
xxxxx ##其他正常master/slave配置
log_slave_updates=true ##这个配置一定要打开

2.  canal instance配置

# position info
canal.instance.master.address = 10.20.144.25:3306
canal.instance.master.journal.name = 
canal.instance.master.position = 
canal.instance.master.timestamp = 

canal.instance.standby.address = 10.20.144.29:3306
canal.instance.standby.journal.name =
canal.instance.standby.position = 
canal.instance.standby.timestamp =

##detecing config
canal.instance.detecting.enable = true ## 需要开启心跳检查
canal.instance.detecting.sql = insert into retl.xdual values(1,now()) on duplicate key update x=now() ##心跳检查sql,也可以选择类似select 1的query语句
canal.instance.detecting.interval.time = 3 ##心跳检查频率
canal.instance.detecting.retry.threshold = 3  ## 心跳检查失败次数阀值,超过该阀值后会触发mysql链接切换,比如切换到standby机器上继续消费binlog
canal.instance.detecting.heartbeatHaEnable = true ## 心跳检查超过失败次数阀值后,是否开启master/standby的切换. 

 

注意:

    a.  填写master/standby的地址和各自的起始binlog位置,目前配置只支持一个standby配置.  

    b.  发生master/standby的切换的条件:(heartbeatHaEnable = true) && (失败次数>=retry.threshold). 

    c. 多引入一个heartbeatHaEnable的考虑:开启心跳sql有时候是为client检测canal server是否正常工作,如果定时收到了心跳语句,那说明整个canal server工作正常

3.  启动 & 测试

    比如关闭一台机器的mysql , /etc/init.d/mysql stop 。在经历大概  interval.time * retry.threshold时间后,就会切换到standby机器上

 

最后

 canal项目: https://github.com/alibaba/canal

 adminGuide : https://github.com/alibaba/canal/wiki/AdminGuide

  • 大小: 38.3 KB
分享到:
评论
1 楼 浅雪夕阳 2016-04-29  
请教一下,怎么配置group 模式呢?没找到group模式的destination name的配置方式

相关推荐

    canal 1.1.5安装包

    Canal-Admin-Guide Canal-Admin-Docker canal-server新增基于账号密码的ACL支持能力 canal-server新增admin动态运维指令,配合canal-admin工程动态管理订阅关系 多语言新增【Python客户端】 instance订阅表过滤,...

    canal.deployer.zip

    Canal-Admin-Guide Canal-Admin-Docker canal-server新增基于账号密码的ACL支持能力 canal-server新增admin动态运维指令,配合canal-admin工程动态管理订阅关系 多语言新增【Python客户端】 instance订阅表过滤...

    阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房).docx

    分布式数据库同步系统 Otter Otter 是阿里巴巴开源的分布式数据库同步系统,旨在解决中美异地机房的数据库同步问题。该系统可以实现跨机房的...同时,Otter 也提供了 Admin Guide,帮助用户更好地理解和使用 Otter。

    matlab实时接收蓝牙和串口数据,并实时显示.zip

    matlab

    共享汽车管理系统.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    面板数据-A股公司监管距离数据集-含原始数据+参考文献+处理代码(2000-2023年).txt

    因文件较多,数据存放网盘,txt文件内包含下载链接及提取码,永久有效。失效会第一时间进行补充。样例数据及详细介绍参见文章:https://blog.csdn.net/T0620514/article/details/146715315

    储能系统中双向DC/DC变换器并联运行的下垂控制与电流分配优化

    内容概要:本文详细探讨了储能系统中双向DC/DC变换器并联运行时的下垂控制技术及其电流分配优化方法。首先介绍了下垂控制的基本概念,即通过虚拟电阻实现电流按比例分配,避免个别变换器过载或欠载。接着讨论了电压补偿机制,用于应对负载变化引起的母线电压波动。文中提供了具体的Python代码示例,展示了如何通过虚拟电阻和下垂系数进行电流分配,并通过电压补偿保持母线电压稳定。此外,还涉及了线路阻抗对电流分配的影响以及相应的在线估算方法。最后,提出了动态虚拟阻抗和自适应控制等前沿研究方向。 适合人群:从事电力电子、储能系统设计与维护的技术人员,以及对分布式电源管理感兴趣的科研人员。 使用场景及目标:适用于需要精确控制并联运行的双向DC/DC变换器电流分配的储能系统设计和调试。主要目标是提高系统的稳定性和效率,确保电流均匀分布,防止单个变换器过载或欠载。 其他说明:文中提供的代码示例和调试技巧有助于理解和实施下垂控制技术。同时,强调了参数整定的重要性,并给出了实际调试过程中的一些经验和教训。

    (源码)基于Python的微信智能聊天机器人.zip

    # 基于Python的微信智能聊天机器人 ## 项目简介 本项目旨在将微信打造成一个智能聊天机器人,支持多端部署,包括个人微信、微信公众号和企业微信应用。机器人能够进行智能对话、语音识别、图片生成等功能,并且支持丰富的插件扩展,如多角色切换、文字冒险、敏感词过滤等。 ## 项目的主要特性和功能 多端部署支持个人微信、微信公众号和企业微信应用等多种部署方式。 智能对话支持私聊及群聊的消息智能回复,支持多轮会话上下文记忆,支持GPT3、GPT3.5、GPT4模型。 语音识别可识别语音消息,通过文字或语音回复,支持Azure、Baidu、Google、OpenAI等多种语音模型。 图片生成支持图片生成和图生图(如照片修复),可选择DellE、Stable Diffusion、Replicate模型。 丰富插件支持个性化插件扩展,已实现多角色切换、文字冒险、敏感词过滤、聊天记录总结等插件。

    15kW数字充电桩开发方案:三相PFC+移相全桥电路与DSP控制详解

    内容概要:本文详细介绍了15kW数字充电桩的开发方案,重点讨论了三相PFC和移相全桥电路的设计与实现。三相PFC采用无桥维也纳结构,利用TI的DSP进行数字化控制,提高了效率并降低了直流母线电压纹波。移相全桥则通过精确的时序控制和合理的PCB布局,实现了高效的ZVS软开关。文中还探讨了双DSP架构的协同机制、散热设计、EMC优化以及通讯协议等方面的技术细节,并分享了一些开发过程中遇到的实际问题及其解决方案。 适用人群:从事电力电子、充电桩开发的技术人员,尤其是对大功率电源设计感兴趣的工程师。 使用场景及目标:适用于希望深入了解和掌握15kW充电桩开发技术的专业人士,旨在帮助他们提高设计水平,解决实际开发中的难题。 其他说明:文章不仅提供了理论指导,还结合了大量的实践经验,包括具体的电路图、代码示例和调试技巧,有助于读者更好地理解和应用相关技术。

    七彩汽球幼儿园教育教学课件模板.pptx

    七彩汽球幼儿园教育教学课件模板

    基于MATLAB Simulink自动生成TMS320F28335 DSP代码实现永磁同步电机电流环控制

    内容概要:本文详细介绍了使用MATLAB Simulink搭建模型并自动生成针对TMS320F28335 DSP的代码,用于实现永磁同步电机(PMSM)的电流环控制。主要内容涵盖硬件选择、工具链配置、PWM和ADC模块的具体应用、id=0矢量控制策略以及电流环PI控制器的设计与优化。文中强调了Simulink与DSP结合的优势,如减少手动编写寄存器配置代码的工作量,同时提供了多个实际代码片段展示生成代码的关键部分及其优化方法。 适合人群:具有一定嵌入式开发经验,特别是熟悉DSP和电机控制领域的工程师和技术爱好者。 使用场景及目标:适用于希望提高开发效率、缩短产品上市时间的研发团队。通过学习本文,读者能够掌握如何利用Simulink进行自动化代码生成功能,从而快速构建稳定可靠的PMSM控制系统。 其他说明:尽管Simulink提供的自动生成代码功能极大简化了开发流程,但在某些情况下仍需深入了解硬件特性和底层机制,以便更好地解决可能出现的问题。此外,文中提到的一些具体参数和配置可能需要根据实际情况进行适当调整。

    2023年上半年广州房地产市场总结合富.pdf

    2023年上半年广州房地产市场总结

    约瑟夫环(循环链表和顺序表) 问题描述: 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数) 一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序

    约瑟夫环(循环链表和顺序表) 问题描述: 编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有一个密码(正整数)。一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。 1.循环链表 2.顺序表

    【计算机求职笔试】资源

    【计算机求职笔试】资源

    tacacs-libs-F4.0.4.28.7fb~20231005g4fdf178-2.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统tacacs-libs-F4.0.4.28.7fb~20231005g4fdf178-2.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf tacacs-libs-F4.0.4.28.7fb~20231005g4fdf178-2.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

    “壮族三月三”教学课件模板.pptx

    “壮族三月三”教学课件模板

    基于TMS320F28069的伺服驱动器设计方案详解与优化技巧

    内容概要:本文详细介绍了基于TMS320F28069的成熟量产型DIY伺服驱动器方案。硬件方面,采用四层板设计,将控制、驱动、电源、滤波等功能分区明确,选用高性能IGBT和MOS管,确保稳定性和高效性能。关键电路如PWM输出、电流环采样、PID算法等进行了深入剖析,并提供了优化建议。软件部分涵盖了ePWM模块配置、ADC采样、PID控制器实现以及FOC SVPWM算法等核心技术。此外,还特别强调了PCB布局、EMI设计、隔离电路等方面的经验教训。 适合人群:具有一定嵌入式开发经验和电机控制基础知识的研发人员和技术爱好者。 使用场景及目标:适用于希望深入了解伺服驱动器设计原理和实现方法的技术人员,旨在帮助他们掌握从硬件设计到软件编程的完整流程,提高产品性能和可靠性。 其他说明:文中提到多个具体实现细节和常见问题解决方案,对于初学者来说有一定的挑战性,建议先熟悉相关基础知识再进行尝试。

    在线商城系统设计与开发-代码.zip

    Java项目基于Springboot框架的课程设计,包含LW+ppt

    基于模糊神经网络的风光互补系统负荷功率智能分配与Simulink仿真

    内容概要:本文详细介绍了在风光互补发电系统中,利用模糊神经网络进行不同等级负荷的智能功率分配及其在Simulink/Matlab环境下的仿真实现。文中首先阐述了光伏和风机的MPPT算法,分别采用了扰动观察法和叶尖速比控制来优化能量捕获。接着深入探讨了模糊控制器的设计,包括输入输出变量选择、隶属度函数构建以及规则库制定。针对VSC逆变器的控制,讨论了锁相环参数设置和LC滤波器的应用,确保并网电流质量。此外,还分享了一些实用的仿真技巧,如Fast Restart功能的使用,以提高调试效率。 适用人群:从事电力电子、智能控制系统研究的技术人员,尤其是对风光互补发电系统感兴趣的科研工作者和工程技术人员。 使用场景及目标:适用于希望深入了解风光互补系统中智能功率分配机制的研究人员和技术开发者。目标是掌握模糊神经网络在复杂电力系统中的应用方法,提升系统的可靠性和效率。 其他说明:文章不仅提供了详细的理论分析,还包括具体的代码实现和实践经验,有助于读者更好地理解和应用于实际项目中。

    质子交换膜燃料电池阴极催化层梯度结构对其性能和耐久性的影响研究(复现论文,含详细可运行代码及解释)

    内容概要:本文复现了一篇关于质子交换膜燃料电池(PEMFC)阴极催化层梯度结构对其性能和耐久性影响的论文。文中详细介绍了1D Pt降解模型和1D PEMFC性能模型的相关参数设定、函数定义及其计算方法。通过Python代码实现了关键计算步骤,包括总表面张力、净Pt溶解速率、净Pt氧化速率、Pt颗粒直径和氧化物覆盖率的更新、Pt2+浓度场的求解、电化学活性表面积(ECSA)的计算以及极化曲线的绘制。此外,还增加了对催化剂层梯度结构的模拟,进一步探讨了其对电池性能的影响。 适合人群:具备一定编程基础和燃料电池基础知识的研发人员和技术爱好者。 使用场景及目标:适用于希望深入了解PEMFC内部机制、优化电池设计的研究人员。主要目标是通过模拟实验验证阴极催化层梯度结构对PEMFC性能和耐久性的具体影响。 阅读建议:读者可以结合论文原文,逐步理解和修改提供的Python代码,以适应不同的研究需求。同时,可以通过调整参数和边界条件,探索更多可能性。

Global site tag (gtag.js) - Google Analytics