简介:

基于数据库增量(模拟MySQL slave的交互协议)日志解析,提供增量数据订阅和消费(客户端与canal建立关系)

安装版本:1.1.0

git

环境需求:

  • jdk1.7以上
  • mysql开启binlog_format=row,并配置mysql slave相关权限。

目录结构:

[root@wap canal]# tree -L 2 /usr/local/canal
/usr/local/canal
├── bin #启动、关闭、重启命令
│   ├── restart.sh
│   ├── startup.bat
│   ├── startup.sh
│   └── stop.sh
├── conf #配置文件目录
│   ├── canal.properties #canal程序配置文件
│   ├── example #数据库实例配置目录,一个实例一个目录
│   │ ├── instance.properties #每个实例单独的配置文件
│ │ └── meta.dat #记录binlog相关信息,防止重启相关信息丢失
│   ├── logback.xml
│   ├── metrics
│   └── spring
├── lib
│   ├── aopalliance-1.0.jar
│   ├── aviator-2.2.1.jar ....
└── logs
├── canal #canal程序本身日志目录
└── example #连接数据库实例的日志目录

配置说明:

conf/canal.properties 主配置文件:

  • canal.id: 每个canal server实例的唯一标识
  • canal.ip: 服务地址
  • canal.port: 服务端端口,客户端连接
  • canal.zkServers: 集群时,连接zookeeper
  • canal.instance.detecting.enable: 是否开启心跳检查
  • canal.instance.detecting.sql: 心跳检查sql,配置select查询语句,适用于高可用场景
  • canal.destinations: canal上部署的instance列表,多实例用逗号分隔
  • canal.conf.dir: 配置文件目录
  • canal.auto.scan: 开启instance自动扫描,扫描canal.conf.dir目录下的instance
  • canal.file.data.dir: 持久化数据到file目录
  • canal.instance.global.spring.xml: 全局的spring配置方式的组件文件,默认选择基于file持久化模式,用于非HA场景

canal.instance.global.spring.xml配置选项介绍

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即可.

conf/example/instance.properties 实例配置

  • canal.instance.mysql.slaveId: slaveid唯一,与mysql serverid不同即可。
  • canal.instance.gtidon=false : 是否开启gtid
  • canal.instance.master.address: 数据库链接地址
  • canal.instance.master.journal.name: 链接起始的binlog文件
  • canal.instance.master.position: 链接起始的binlog偏移量
  • canal.instance.master.timestamp: 链接时起始的binlog时间戳
  • canal.instance.dbUsername: 数据库帐号
  • canal.instance.dbPassword: 数据库密码
  • canal.instance.connectionCharset: 与数据库编码格式一致
  • canal.instance.filter.regex=.\.. :正则匹配库和表,默认所有库和表
  • canal.instance.filter.black.regex=mysql..* :过滤掉哪些库和表,这里过滤mysql库的所有表。正则匹配

官网详细配置说明

配置式例:

1. 多实例配置

  1. 打开canal.auto.scan参数,会根据canal.auto.scan.interval定义的频率,进行扫描
  • 发现目录有新增,启动新的instance
  • 发现目录有删除,关闭老的instance
  • 发现对应目录的instance.properties有变化,重启instance
cp -a conf/example conf/example_1

  1. 关闭canal.auto.scan,在canal.destinations后以逗号分隔配置多实例名称。
canal.destinations= example,example_1

$ cp -a conf/example conf/example_1
$ ./bin/restart.sh

高可用,集群相关配置wiki中介绍,请参阅官网

源码分析

canal中间件的更多相关文章

  1. 阿里Canal中间件的初步搭建和使用

    一.前言 Binlog是MySQL数据库的二进制日志,用于记录用户对数据库操作的SQL语句(除了数据查询语句)信息.而Binlog格式也有三种,分别为STATEMENT.ROW.MIXED.STATM ...

  2. 阿里Canal框架(数据同步中间件)初步实践

    最近在工作中需要处理一些大数据量同步的场景,正好运用到了canal这款数据库中间件,因此特意花了点时间来进行该中间件的的学习和总结. 背景介绍 早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存 ...

  3. Canal使用小结

    Canal使用小结 之前公司存在mysql数据同步mongo的需求,可以有多种实现方式,比如硬编码,发送消息等.公司选择的是Canal中间件,最近有空来研究下他的使用方式,对于mysql数据变更监听有 ...

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

    一.Canal简介: canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 二.背景介绍: ...

  5. MySql Binlog 说明 & Canal 集成MySql的更新异常说明 & MySql Binlog 常用命令汇总

    文章来源于本人的印象笔记,如出现格式问题可访问该链接查看原文 原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 目录 背景介绍 开启MySq ...

  6. Canal 实战 | 第一篇:SpringBoot 整合 Canal + RabbitMQ 实现监听 MySQL 数据库同步更新 Redis 缓存

    一. Canal 简介 canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 早期阿里巴巴因为杭州和美国双机房部署,存在跨机房同 ...

  7. 消费端如何保证消息队列MQ的有序消费

    消息无序产生的原因 消息队列,既然是队列就能保证消息在进入队列,以及出队列的时候保证消息的有序性,显然这是在消息的生产端(Producer),但是往往在生产环境中有多个消息的消费端(Consumer) ...

  8. Mysql和Redis数据同步策略

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

  9. 中间件——canal小记

    接到个小需求,将mysql的部分数据增量同步到es,但是不仅仅是使用canal而已,整体的流程是mysql>>canal>>flume>>kafka>> ...

随机推荐

  1. WebSocket协议-原理篇

    本篇文章主要讲述以下几点: WebSocket的原理与机制 WebSocket与Socket.io WebSocket兼容性 WebSocket的原理与机制 WebSocket协议分为两部分:握手和数 ...

  2. SSH登录服务器慢

      最近频繁遇到ssh登录到服务器验证慢的这个问题,今天抽时间总结下原因以及解决办法. UseDNS   登录到服务器端查看sshd_config配置文件,当UseDNS项配置为yes时(默认情况下可 ...

  3. 关于matlab tfdata的用法

      加上'v',可以让输出的值由元胞数组改为数组直接输出:举个例子:h = tf([1 1],[1 2 5]);[num,den] = tfdata(h)可以看出输出的num和den为元胞数组的形式无 ...

  4. Discarding Game CodeForces - 1250G(思维)

    Discarding Game \[ Time Limit: 3000 ms\quad Memory Limit: 524288 kB \] 题意 一个人和一个电脑在玩游戏,游戏规则是 游戏有 \(n ...

  5. 黑苹果MacOS安装记录

    https://blog.daliansky.net/macOS-Catalina-10.15-19A583-Release-version-with-Clover-5093-original-ima ...

  6. 这篇文章主要讲解C#中的泛型,泛型在C#中有很重要的地位,尤其是在搭建项目框架的时候。

    一.什么是泛型 泛型是C#2.0推出的新语法,不是语法糖,而是2.0由框架升级提供的功能. 我们在编程程序时,经常会遇到功能非常相似的模块,只是它们处理的数据不一样.但我们没有办法,只能分别写多个方法 ...

  7. Python3 使用企业微信 API 发送消息

    #coding=utf- import requests import json Secret = "TUbfeW8nFQakwOS4czm13SCnxSUPOqY2K0XHtM8XLT34 ...

  8. java do while 循环

    public class Sample { public static void main(String[] args) { ; do { System.out.print(num + " ...

  9. 收藏一份devmem源码

    /* * devmem2.c: Simple program to read/write from/to any location in memory. * * Copyright (C) 2000, ...

  10. python之lambda、filter、map、reduce的用法说明(基于python2)

    python中有一些非常有趣的函数,面试的时候可能会遇到.今天也来总结一下,不过该类的网上资料也相当多,也没多少干货,只是习惯性将一些容易遗忘的功能进行整理. lambda 为关键字.filter,m ...