otter

数据异构之 Canal 初探(技巧篇)

拥有回忆 提交于 2020-08-07 07:35:46
1、应用场景 提到 Canal,大家应该都能想到这是一个用于解析 MySQL binlog 日志的工具,并将 MySQL 数据库中数据同步到其他存储介质中,例如 Elasticsearch。 即 Canal 一个非常常用的使用场景:数据异构,一种更高级别的数据读写分离架构设计方法。 随着业务不断的发展,企业发展到一定阶段,发现单体的关系型数据库已无法支撑业务高速发展带来数据不断累积的压力,从而会诞生出一种设计架构:分库分表。分库分表对缓解单库数据库压力确实是一种非常好的解决方案,但又衍生出另外一种困境,关联查询不友好,甚至跨库JOIN就更加如此。 举例说明如下: 例如一个订单系统,通常有两类用户需要去查询订单,一类是顾客,一类是商家,在对数据库进行分库分表时,如果以顾客(buy_id)进行分库的话,同一个商家的订单数据会分布在不同的库中,如果以商家(shop_id)进行分库的话,同一个用户购买的所有订单数据将会分布子啊不同的库中,这样进行关联查询,就必然需要跨库进行join,其成本都会偏高。而且上面的场景只能满足一方的需求,那如何是好呢? Canal 这个时候就闪亮登场了,在电商设计中,其实商家、顾客会被拆分成两个不同的服务,我们可以为两个不同的服务搭建不同的数据库集群,我们可以用户订单库、商家订单库进行分库,以用户订单库为主库,当用户在订单系统下单后,数据进入到用户订单库中

聊聊canal的MysqlConnection

十年热恋 提交于 2020-04-25 12:49:27
序 本文主要研究一下canal的MysqlConnection ErosaConnection canal-1.1.4/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/ErosaConnection.java public interface ErosaConnection { public void connect() throws IOException; public void reconnect() throws IOException; public void disconnect() throws IOException; /** * 用于快速数据查找,和dump的区别在于,seek会只给出部分的数据 */ public void seek(String binlogfilename, Long binlogPosition, String gtid, SinkFunction func) throws IOException; public void dump(String binlogfilename, Long binlogPosition, SinkFunction func) throws IOException; public void dump(long timestamp,

Canal的简单使用(监控数据库数据的变化)

孤者浪人 提交于 2020-04-24 03:27:08
原文:https://www.cnblogs.com/java-spring/p/8930740.html canal可以用来监控数据库数据的变化,从而获得新增数据,或者修改的数据,用于实际工作中,比较实用,特此记录一下 Canal简介 canal是应阿里巴巴存在杭州和美国的双机房部署,存在跨机房同步的业务需求而提出的。 阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务 基于日志增量订阅&消费支持的业务: 数据库镜像 数据库实时备份 多级索引 (卖家和买家各自分库索引) search build 业务cache刷新 价格变化等重要业务消息 keyword:数据库同步,增量订阅&消费。 首先,下载canal安装包: https://github.com/alibaba/canal/releases 安装步骤: 在opt下(或者其他目录)创建一个canal文件夹 因为canal解压后并没有整体的文件夹,是把里面的内容一下解压出来的 然后进入canal文件夹,将安装包canal.deployer-1.0.24.tar.gz传输进来 解压: tar -zxvf canal.deployer-1.0.24.tar.gz 可以删除安装包canal.deployer-1.0.24.tar.gz了 修改canal配置文件 vi conf

阿里Canal框架数据库同步-实战教程

情到浓时终转凉″ 提交于 2020-04-21 10:51:44
一、Canal简介:   canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB)。 二、背景介绍:   早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。 三、适用场景:   在一些复杂的业务逻辑中,可能插入或者查询数据都比较频繁,如果一直在数据库插入查询会造成速度非常慢,可以把数据库表分成两个库,一个库用来做查询,一个库作为插入数据,读写分离,怎么解决呢?就可以用canal框架来监听数据是否发生改变,来同步数据。 比如大部分人都做搜索引擎ES,咱们不可能每次数据库更新了数据手动去同步索引库,咱们就可以用Canal来监听数据库增删改时去重新导入索引库,保持数据一致性。 四、Canal的工作机制    复制过程分成三步: (1) Master主库将改变记录,写到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看); (2)

聊聊canal的MysqlDetectingTimeTask

[亡魂溺海] 提交于 2020-04-21 01:58:23
序 本文主要研究一下canal的MysqlDetectingTimeTask MysqlDetectingTimeTask canal-1.1.4/parse/src/main/java/com/alibaba/otter/canal/parse/inbound/mysql/MysqlEventParser.java class MysqlDetectingTimeTask extends TimerTask { private boolean reconnect = false; private MysqlConnection mysqlConnection; public MysqlDetectingTimeTask(MysqlConnection mysqlConnection){ this.mysqlConnection = mysqlConnection; } public void run() { try { if (reconnect) { reconnect = false; mysqlConnection.reconnect(); } else if (!mysqlConnection.isConnected()) { mysqlConnection.connect(); } Long startTime = System.currentTimeMillis();

聊聊canal的ClientIdentity

最后都变了- 提交于 2020-04-18 12:20:35
序 本文主要研究一下canal的ClientIdentity ClientIdentity canal-1.1.4/protocol/src/main/java/com/alibaba/otter/canal/protocol/ClientIdentity.java public class ClientIdentity implements Serializable { private static final long serialVersionUID = -8262100681930834834L; private String destination; private short clientId; private String filter; public ClientIdentity(){ } public ClientIdentity(String destination, short clientId){ this.clientId = clientId; this.destination = destination; } public ClientIdentity(String destination, short clientId, String filter){ this.clientId = clientId; this.destination =

《从Paxos到zookeeper》第6章 Zookeeper的典型应用场景(下)

 ̄綄美尐妖づ 提交于 2020-03-27 11:06:53
目录 6.2 Zookeeper在大型分布式系统中的应用 6.2.1 Hadoop YARN介绍 如何解决ResourceManager单点问题,实现高可用? 6.2.3 Kafka 术语介绍 问题 Kafka与Zookeeper Broker注册管理 Topic注册管理 生产者负载均衡 消费者负载均衡 消费分区与消费者关系 消息消费进度Offset记录 消费者注册 负载均衡 1)Range策略 2)RoundRobin策略 资料 6.3 Zookeeper在阿里巴巴的实践与应用 6.3.2 案例二 RPC服务框架:Dubbo 服务提供者 服务消费者 监控中心 6.3.3 案例三 基于MySQL Binlog的增量订阅和消费组件:Canal Canal基本工作原理 Canal Server主备切换设计 Canal Client的HA设计 6.3.4 案例四 分布式数据库同步系统:Otter 分布式SEDA模型 数据模型 任务处理流程(多阶段任务协调处理) 6.2 Zookeeper在大型分布式系统中的应用 6.2.1 Hadoop YARN介绍 YARN是Hadoop为了提高计算节点的扩展性,同时为了支持多计算模型和提供资源的细粒度调度而引入的全新一代分布式协调框架。 核心为ResourceManager,资源管理中心,负责集群中所有资源的统一管理和分配。 (可理解为YARN的大脑

Python Day18 Homework

拥有回忆 提交于 2020-03-25 02:36:29
# # 作业:import timefrom functools import wraps### # 1、编写课上讲解的有参装饰器准备明天默写# def otter(r_type):# def auto(func):# @wraps(func)# def wrapper(*args, **kwargs):# in_name = input('输入姓名:')# in_password = input('输入密码:')# if r_type == 'file':# with open('db.txt')as f:# for i in f:# name, password = i.strip().split(':')# if name == in_name and password == in_password:# print('登录正确')# res = func(*args, **kwargs)# return res# break# else:# print('未登录')# elif r_type == 'mysql':# print('mysql')# else:# print('other')## return wrapper## return auto### @otter(r_type='file')# def run():# print('run====>')### run

Otter双A同步搭建入门教程

烂漫一生 提交于 2020-03-09 20:10:21
1.准备阶段 1.1 环境 虚拟机A : 192.168.0.130 虚拟机B :192.168.0.131 系统: Ubuntu 16.04 LTS JRE:OpenJDK 1.8.0_151(A、B都要安装) DB:MySQL 5.7.20(A、B都要安装) ZooKeeper:3.4.11(只装A机) Otter Manager:4.2.14 (只装A机)( 4.2.15 启动Node时感觉有Bug,没有使用) Otter Node:4.2.14(A、B都要安装) 1.2 安装环境 1.2.1 JRE安装 sudo apt-get install default-jre 1.2.2 MySQL安装 sudo apt-get install mysql-server sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf character-set-server=utf8 log-bin=mysql-bin binlog-format=ROW server-id=1 #A,B需要设置成不一样的id #bind-address=127.0.0.1 #注释该行 service mysql restart 进入mysql,设置单独账号密码 grant all on *.* to 'root'@'%' identified by 'password';

windows 下 cannal & otter 配置

可紊 提交于 2020-03-09 20:09:40
技术准备:下载相关组件和文档,下载地址:http://pan.baidu.com/s/1mgVIL5Y 电脑:最好准备两台以上机器进行测试; mysql数据库配置: [client] port=3306 [mysql] # 如果不是修改成UTF8 default-character-set=UTF8 [mysqld] port=3306 #Path to installation directory. All paths are usually resolved relative to this. basedir="C:/Program Files/MySQL/MySQL Server 5.5/" #Path to the database root datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" # The default character set that will be used when a new schema or table is # 如果不是修改成UTF8 character-set-server=UTF8 # The default storage engine that will be used when create new tables when default-storage-engine