中间件canal概述

Posted 程序猿小哈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件canal概述相关的知识,希望对你有一定的参考价值。

简介

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 mysql 数据库增量日志解析,提供增量数据订阅和消费

基于日志增量订阅和消费的业务包括:

  • 数据库镜像

  • 数据库实时备份

  • 索引构建和实时维护(拆分异构索引、倒排索引等)

  • 业务 cache 刷新

  • 带业务逻辑的增量数据处理

当前的 canal 支持源端 MySQL 版本包括 5.1.x , 5.5.x , 5.6.x , 5.7.x , 8.0.x

模块解析

  • common模块: 主要是提供了一些公共的工具类和接口.

  • driver模块: 主要提供数据库连接,从而获取到binlog.

  • dbsync模块: 提供binlog事件对象.(原始的binlog是二进制流,需要解析为对应的binlog事件).源于淘宝的tddl.

  • parser模块: 数据源接入,模拟slave协议和master进行交互,协议解析.parser模块依赖于dbsyncdriver模块.

  • store模块: 数据存储.核心接口CanalEventStore

  • sink模块: parserstore链接器,进行数据过滤,加工,分发的工作.核心接口为CanalEventSink

  • meta模块: 增量订阅&消费信息管理器,核心接口为CanalMetaManager,主要用于记录canal消费到的mysql binlog的位置.

  • instance模块: 一个server有多个instance.每个instance都会模拟成一个mysql实例的slave.instance模块有四个核心组成部分:parser模块、sink模块、store模块,meta模块。核心接口为CanalInstance

  • protocol模块: client和server模块之间的通信协议

  • deployer模块: 部署模块,通过该模块提供的CanalLauncher来启动canal server

  • client模块: canal的客户端,核心接口为CanalConnector

  • example模块: 提供client模块使用案例

模块结构

各个模块之间的依赖关系:

通过deployer模块,启动一个canal-server,一个cannal-server内部包含多个instance,每个instance都会伪装成一个mysql实例的slave.client与server之间的通信协议由protocol模块定义.client在订阅binlog信息时,需要传递一个destination参数,server会根据这个destination确定由哪一个instance为其提供服务.


以上是关于中间件canal概述的主要内容,如果未能解决你的问题,请参考以下文章

Flume概述

中间件——canal小记

大数据之实时数据源同步中间件--生产上Canal与Maxwell颠峰对决

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

秒杀系统番外篇 | 阿里开源MySQL中间件Canal快速入门

Canal