canal

开源组件梳理

点点圈 提交于 2019-12-03 11:38:33
cannal+otter :mysql数据库同步组件,阿里出品 https://github.com/alibaba/canal https://github.com/alibaba/otter 来源: https://www.cnblogs.com/clarino/p/11794279.html

大数据时代下的数据同步

不羁的心 提交于 2019-12-03 07:09:25
大数据时代下的数据同步 1)、基于数据库日志(比如mysql的binlog)的同步 我们都知道很多数据库都支持了主从自动同步,尤其是mysql,可以支持多主多从的模式。那么我们是不是可以利用这种思想呢,答案当然是肯定的,mysql的主从同步的过程是这样的。  A、master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);  B、slave将master的binary log events拷贝到它的中继日志(relay log);  C、slave重做中继日志中的事件,将改变反映它自己的数据。 阿里巴巴开源的canal就完美的使用这种方式,canal 伪装了一个Slave 去和Master进行同步 A、 canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议 B、 mysql master收到dump请求,开始推送binary log给slave(也就是canal) C、 canal解析binary log对象(原始为byte流) 另外canal 在设计时,特别设计了 client-server 模式,交互协议使用 protobuf 3.0 , client

【Canal】之 一些坑

匿名 (未验证) 提交于 2019-12-03 00:37:01
记录一些遇到的问题 在 Mixed 模式下,通过 canal 解析 Binlog 获得 SQL 语句,再到另个数据库中去执行这个SQL。 在单机和一个instance下,SQL 执行了两次,程序抛出异常。 同时监听了这两个数据库,导致执行一次触发一次 行不通 因为在 Mixed 模式下,filter将失效,因为不解析sql,所以无法准确提取tableName进行过滤 资料参考 既然不能通过设置filter来判断,那就自己写逻辑。 根据上个问题,我们知道在 Mixed 模式下 无法准确提取 tableName,那么就根据 数据库名(schemaName)来判断。 文章来源: 【Canal】之 一些坑

macox 安装 canal 1.0.24

匿名 (未验证) 提交于 2019-12-03 00:22:01
一、官网地址: https://github.com/alibaba/canal 二、安装 canal server 1. 下载canal 直接下载 访问: https://github.com/alibaba/canal/releases 下载: https://github.com/alibaba/canal/releases/download/canal-1.0.24/canal.deployer-1.0.24.tar.gz 2. 解压缩 mkdir canal tar zxvf canal.deployer-$version.tar.gz 解压完成后,进入canal目录,可以看到如下结构: drwxr-xr-x 2 jianghang jianghang 136 2013-02-05 21:51 bin drwxr-xr-x 4 jianghang jianghang 160 2013-02-05 21:51 conf drwxr-xr-x 2 jianghang jianghang 1.3K 2013-02-05 21:51 lib drwxr-xr-x 2 jianghang jianghang 48 2013-02-05 21:29 logs 3. 配置修改 应用参数: vi conf/example/instance.properties #############

canal入门

匿名 (未验证) 提交于 2019-12-03 00:15:02
canal入门   数据抽取简单的来说,就是将一个表的数据提取到另一个表中。有很多的ETL工具可以帮助我们来进行数据的抽取和转换,ETL工具能进行一次性或者定时作业抽取数据,不过canal作为阿里巴巴提供的开源的数据抽取项目,能够做到实时抽取,原理就是伪装成mysql从节点,读取mysql的binlog,生成消息,客户端订阅这些数据变更消息,处理并存储。下面我们来一起搭建一下canal服务 配置mysql   mysql默认没有开启binlog,修改mysql的my.cnf文件,添加如下配置,注意binlog-format必须为row,因为binlog如果为 STATEMENT或者MIXED,则binlog中记录的是sql语句,不是具体的数据行,canal就无法解析到具体的数据变更了 log-bin=E:/mysql5.5/bin_log/mysql-bin.log binlog-format=ROW server-id=123 canal配置   下载并安装canal,在conf目录可以看到canal.properties文件,修改该文件为 #设置要监听的mysql服务器的地址和端口 canal.instance.master.address = 127.0.0.1:3306#设置一个可访问mysql的用户名和密码并具有相应的权限,本示例用户名、密码都为canal canal

win运行canal

匿名 (未验证) 提交于 2019-12-03 00:11:01
前提 win运行canal 加入canal依赖 1 <dependency> 2 <groupId> com . alibaba . otter </ groupId > 3 <artifactId> canal . client </ artifactId > 4 <version> 1.1 . 3 </ version > 5 </ dependency > 把ip、端口、监听表名做成配置文件 代码实现 1 package com . frame . modules . dabis . archives . thread ; 2 3 import com . alibaba . fastjson . JSONObject ; 4 import com . alibaba . otter . canal . client . CanalConnector ; 5 import com . alibaba . otter . canal . client . CanalConnectors ; 6 import com . alibaba . otter . canal . protocol . CanalEntry ; 7 import com . alibaba . otter . canal . protocol . Message ; 8 import com .

k8s网络模型从 Calico切换为Canal踩的坑

匿名 (未验证) 提交于 2019-12-02 23:45:01
问题描述 在跟着《每天五分钟玩转kubernets》这本书学习到K8S的网络章节时,实验中部署canal网络以演示Network Policy。因为最开始搭建k8s集群是部署的Calico网络(Calico也支持Network Policy,但是为了和教程保持一致,还是切换了),所以这里重新初始化了master,切换网络。 按照书上指示,操作了下面的步骤: 1、首先在k8s集群所有节点执行kubeadm reset命令销毁当前集群 2、在k8s的master上执行命令重新初始化了master: kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=10.0.0.101 根据安装k8s集群时的步骤,初始化master之后,也又在master上执行了下面的配置kubectl的三条命令( 这一步骤书上在这一环节没有提,只说了要重新init,所以还是怀着忐忑的心情执行的 ): mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config 3

Canal踩坑

匿名 (未验证) 提交于 2019-12-02 23:34:01
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nehcJava/article/details/90438043 线上使用Canal+ES+Kafka,为ES做实时数据同步。 昨晚Canal-Server停机,今早恢复,启动时,各instance报图中错误。 Could not find first log file name in binary log index file 解决方法如下: 停止Canal-Server和Canal-Client服务 删除Zookeeper中/otter节点(rmr /otter) 重启Canal服务 文章来源: https://blog.csdn.net/nehcJava/article/details/90438043

canal redis mysql实现数据同步

匿名 (未验证) 提交于 2019-12-02 22:06:11
canal 原理【 官方文档 】 简介 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同步的业务需求,实现方式主要是基于业务 trigger 获取增量变更。从 2010 年开始,业务逐步尝试数据库日志解析获取增量变更进行同步,由此衍生出了大量的数据库增量订阅和消费业务 基于日志增量订阅和消费的业务包括 数据库镜像 数据库实时备份 索引构建和实时维护(拆分异构索引、倒排索引等) 业务 cache 刷新 带业务逻辑的增量数据处理 当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x MySQL主备复制原理 MySQL master 将数据变更写入二进制日志( binary log, 其中记录叫做二进制日志事件binary log events,可以通过 show binlog events 进行查看) MySQL slave 将 master 的 binary log events 拷贝到它的中继日志(relay log) MySQL slave 重放 relay log 中事件,将数据变更反映它自己的数据 canal 工作原理 canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送dump 协议 MySQL master 收到 dump

Canal支持MySQL增量数据订阅&消费

别来无恙 提交于 2019-12-02 16:52:50
https://github.com/alibaba/canal 概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。 基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) search build 业务cache刷新 价格变化等重要业务消息 工作原理 mysql主备复制实现: 从上层来看,复制分成三步: master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看); slave将master的binary log events拷贝到它的中继日志(relay log); slave重做中继日志中的事件,将改变反映它自己的数据。 canal的工作原理 原理相对比较简单: canal模拟mysql