以下关于Canal的介绍来自Github官方介绍。

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费。
canal模拟MySQL slave的交互协议,将自己伪装为MySQL slave,向MySQL master发送dump协议。MySQL master收到dump请求,开始推送binary log给slave(即canal )。canal解析binary log对象(原始为byte流)。因此可以使用Canal来提供MySQL数据库增量数据的订阅和消费,当MySQL数据库中的数据发生变化时,Canal可以高效地将这些数据同步到下游服务,比如更新Redis中的数据、提供数据给ElasticSearch以及更新索引异构表等。

说明:
server代表一个canal运行实例,对应于一个jvm。instance对应于一个数据队列 (1个server对应1-n个instance)。instance模块:
eventParser (数据源接入,模拟slave协议和master进行交互,协议解析)。eventSink (Parser和Store的链接器,进行数据过滤、加工以及分发的工作)。eventStore (数据存储)。metaManager (增量订阅和消费信息管理器)。本篇博客将介绍如何部署Canal以及Canal Admin,而它们的依赖环境必须要提取准备好。
Mysql:需要先安装Mysql,博主这里安装Mysql 8(Mysql 8 - CentOS yum & Docker安装Mysql 8),使用CentOS yum方式安装即可,其他操作系统的安装步骤可自行百度。
Mysql:systemctl enable mysqld & systemctl start mysqld,查询Mysql状态:systemctl status mysqld,状态为active (running)即可。
JDK:还需要配置JDK环境(JDK8下载地址),下载好压缩包后,使用Xftp将该压缩包上传到虚拟机中。
tar -zxvf jdk-8u202-linux-x64.tar.gz)以及修改/etc/profile配置文件(vim /etc/profile,没有vim可以执行yum install -y vim进行安装)。这些常用工具的配置还是要自己去理解以及多练习,敲熟了,比搜索加Copy快多了(export JAVA_HOME=/usr/local/jdk1.8.0_202、export CLASSPATH=.:$JAVA_HOME/lib、export PATH=$JAVA_HOME/bin:$PATH)。
/etc/profile配置文件的修改生效(source /etc/profile)。
进入Mysql创建Canal和Canal Admin需要使用的用户,并且授予该用户权限。
create user kaven identified by 'kaven';
Mysql 8(需要获取初始密码进入)、修改root用户的密码以及修改合法密码的校验规则,不然给用户设置这种弱密码(kaven)Mysql 8会报错。授予用户权限(为了方便,博主这里直接授予用户所有权限,可以根据目前的业务需求来设置):
grant all privileges on *.* to 'kaven'@'%';
flush privileges;

还需要修改Mysql的配置(vim /etc/my.cnf),要先开启binlog写入功能,配置binlog-format为ROW模式,my.cnf需要增加的配置如下所示:
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

重启Mysql:
systemctl restart mysqld

博主这里选择1.1.5版本(Canal Admin要求Canal版本>=1.1.4,需要依赖canal-server提供面向admin的动态运维管理接口),下载下图所示的两个压缩包。

下载好后再将它们上传到虚拟机中。Canal对应于canal.deployer项目,Canal Admin对应于canal.admin项目。先解压canal.deployer压缩包,再修改配置,如果Canal和Canal Admin不在同一台主机上部署(博主这里是部署在同一台主机上),需要修改Canal的配置(conf/canal_local.properties)。
[root@localhost local]# mkdir ./canal-server
[root@localhost local]# tar -zxvf canal.deployer-1.1.5.tar.gz -C ./canal-server
[root@localhost local]# cd canal-server/
[root@localhost canal-server]# vim conf/canal_local.properties
配置修改如下图所示:

等启动Canal Admin之后再启动Canal。
Canal Admin设计上是为Canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
解压文件和修改配置:
[root@localhost canal-server]# cd /usr/local/
[root@localhost local]# mkdir ./canal-admin
[root@localhost local]# tar -zxvf canal.admin-1.1.5.tar.gz -C ./canal-admin/
[root@localhost local]# cd canal-admin/
[root@localhost canal-admin]# vim conf/application.yml
修改数据库相关配置,需要适配Mysql 8。

Mysql 8的驱动类名是com.mysql.cj.jdbc.Driver,并且Mysql 8需要配置serverTimezone(以下serverTimezone配置都可以)。
serverTimezone=GMT%2B8
serverTimezone=GMT
serverTimezone=Asia/Shanghai
如果用户使用了sha256_password认证,密码在传输过程中必须使用TLS协议保护,如果RSA公钥不可用,可以使用服务器提供的公钥;可以在连接中通过ServerRSAPublicKeyFile指定服务器的RSA公钥,或者使用allowPublicKeyRetrieval=true参数以允许客户端从服务器获取公钥;但是需要注意的是allowPublicKeyRetrieval=true可能会导致恶意的代理通过中间人攻击(MITM)获取到明文密码,所以默认是关闭的,必须显式开启。
Mysql 8的密码加密方式为caching_sha2_password,将其修改为mysql_native_password,就可以不需要allowPublicKeyRetrieval=true参数。
alter user 'kaven'@'%' identified with mysql_native_password by 'kaven';
flush privileges;
还要将Canal Admin项目中的sql文件导入Mysql中(会生成用于管理Canal的相关表)。
[root@localhost canal-admin]# mysql -uroot -p
Enter password:
mysql> source conf/canal_manager.sql
Query OK, 1 row affected, 2 warnings (0.06 sec)
Database changed
...
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
还需要更换Mysql连接jar包,可以在本地maven仓库里面找,博主选择平时用的最新的8.0.22版本。

使用下面这条命令来查看Mysql版本:
select version();
博主这里的Mysql版本是8.0.27。

默认的Mysql连接jar包是5.1.48版本,连接Mysql 8会出问题。
[root@localhost canal-admin]# cd lib
[root@localhost lib]# ll

删除该jar包。
[root@localhost lib]# rm -f mysql-connector-java-5.1.48.jar
使用Xftp上传Mysql 8的连接jar包到Canal Admin项目的lib路径下。


[root@localhost lib]# find ./ -name mysql*
./mysql-connector-java-8.0.22.jar
启动Canal Admin。
[root@localhost lib]# cd ..
[root@localhost canal-admin]# sh bin/startup.sh
查看日志,发现日志文件不存在,说明启动失败了。
[root@localhost canal-admin]# tail logs/admin.log
tail: 无法打开"logs/admin.log" 读取数据: 没有那个文件或目录
在bin目录下可以找到类似hs_err_pid20182.log的日志文件。
[root@localhost canal-admin]# cd bin
[root@localhost bin]# ll
总用量 40
-rw-r--r--. 1 root root 6 12月 13 23:45 admin.pid
-rw-r--r--. 1 root root 18584 12月 13 23:45 hs_err_pid20182.log
-rwxr-xr-x. 1 root root 205 4月 19 2021 restart.sh
-rwxr-xr-x. 1 root root 747 4月 19 2021 startup.bat
-rwxr-xr-x. 1 root root 2047 4月 19 2021 startup.sh
-rwxr-xr-x. 1 root root 1362 4月 19 2021 stop.sh
由下图可知,Canal Admin启动失败是由于分配2G内存不成功导致的(因为虚拟机本身内存就只分配了2G)。

因此需要修改项目的JVM堆内存配置,这个配置在启动脚本中设置。
[root@localhost bin]# vim startup.sh

初始堆内存和最大堆内存都设置成1G。

再启动Canal Admin。
[root@localhost bin]# ./startup.sh
再查看日志,如下图所示,说明启动成功了。

启动成功后,再关闭防火墙,让本地可以访问Canal Admin。
[root@localhost bin]# systemctl stop firewalld
本地访问192.168.1.199:8089。

现在可以启动Canal了。
[root@localhost bin]# cd /usr/local/canal-server
[root@localhost canal-server]# sh bin/startup.sh local
查看日志,检查Canal是否启动成功。
[root@localhost canal-server]# vim logs/canal/canal.log
如下图所示,说明启动成功了。

刚刚启动的server(Canal)已经在Canal Admin上显示出来了,并且状态是启动。

可以对server进行操作。

比如查看server的日志。

新建instance。

如下图所示进行操作即可。

example instance也是启动状态。

可以查看example instance的日志。

再新建一个other instance,配置和example instance一样,other Instance的状态也是启动。

也可以查看other instance的日志。

实现逻辑就是在Canal项目的日志路径和配置路径下创建了对应instance的相关文件。
[root@localhost canal-server]# ll logs
总用量 0
drwxr-xr-x. 2 root root 47 12月 14 15:27 canal
drwxr-xr-x. 2 root root 25 12月 14 15:20 example
drwxr-xr-x. 2 root root 23 12月 14 15:34 other
[root@localhost canal-server]# ll conf
总用量 16
-rwxrwxrwx. 1 root root 319 4月 19 2021 canal_local.properties
-rwxrwxrwx. 1 root root 6277 4月 19 2021 canal.properties
drwxrwxrwx. 2 root root 65 12月 14 15:17 example
-rwxrwxrwx. 1 root root 3437 4月 19 2021 logback.xml
drwxrwxrwx. 2 root root 39 12月 13 23:02 metrics
drwxr-xr-x. 2 root root 38 12月 14 15:36 other
drwxrwxrwx. 3 root root 149 12月 13 23:02 spring
[root@localhost canal-server]# ll conf/other/
总用量 156
-rw-r--r--. 1 root root 155648 12月 14 15:36 h2.mv.db
-rw-r--r--. 1 root root 40 12月 14 15:36 meta.dat
example instance的相关文件在Canal项目中默认存在,而配置信息以在Canal Admin中的配置为准(其他instance也一样),比如修改example instance的数据库用户配置。

example instance的日志中就会出现数据库拒绝访问的错误日志。

因此instance的配置以Canal Admin中的配置为准。部署Canal、Canal Admin就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。
我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie
我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon
深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal
Ocra无法处理需要“tk”的应用程序require'tk'puts'nope'用奥克拉http://github.com/larsch/ocra不起作用(如链接中的一个问题所述)问题:https://github.com/larsch/ocra/issues/29(Ocra是1.9的"new"rubyscript2exe,本质上它用于将rb脚本部署为可执行文件)唯一的问题似乎是缺少tcl的DLL文件我不认为这是一个问题据我所知,问题是缺少tk的DLL文件如果它们是已知的,则可以在执行ocra时将它们包括在内有没有办法知道tk工作所需的DLL依赖项? 最佳答
我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在Heroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class
出于某种原因,heroku尝试要求dm-sqlite-adapter,即使它应该在这里使用Postgres。请注意,这发生在我打开任何URL时-而不是在gitpush本身期间。我构建了一个默认的Facebook应用程序。gem文件:source:gemcuttergem"foreman"gem"sinatra"gem"mogli"gem"json"gem"httparty"gem"thin"gem"data_mapper"gem"heroku"group:productiondogem"pg"gem"dm-postgres-adapter"endgroup:development,:t
如何使用Capistrano将Rails应用程序部署到无法访问外部网络或存储库的生产或暂存服务器?我已经设法完成部署的一半,并意识到Capistrano没有在我的本地机器上下载gitrepo,但它首先连接到远程服务器并尝试在那里下载Git存储库。我希望有一个类似Javaee的构建系统,其中创建可交付成果并将该可交付成果发送到服务器。就像您构建.ear文件并将其部署到您想要的任何服务器上一样。显然在RoR中,你被迫(据我所知)在该服务器上构建应用程序,在那里创建一个gem存储库,在那里克隆最新的分支等等。有什么方法可以将准备运行的包发送到远程服务器吗? 最佳答
集成背景我们当前集群使用的是ClouderaCDP,Flink版本为ClouderaVersion1.14,整体Flink安装目录以及配置文件结构与社区版本有较大出入。直接根据Streampark官方文档进行部署,将无法配置FlinkHome,以及后续整体Flink任务提交到集群中,因此需要进行针对化适配集成,在满足使用需求上,尽量提供完整的Streampark使用体验。集成步骤版本匹配问题解决首先解决无法识别Cloudera中的FlinkHome问题,根据报错主要明确到的事情是无法读取到Flink版本、lib下面的jar包名称无法匹配。修改对象:修改源码:(解决无法匹配clouderajar