热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Canal——阿里巴巴开源的基于binlog的MySQL增量订阅&消费组件

 

 

简介

canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费,应用场景十分丰富。

常用场景
  1. 电商场景下商品、用户实时更新同步到至Elasticsearch、solr等搜索引擎;
  2. 价格、库存发生变更实时同步到redis;
  3. 数据库异地备份、数据同步;
  4. 代替使用轮询数据库方式来监控数据库变更,有效改善轮询耗费数据库资源。
工作原理

MySQL主备复制原理

 

  1. Master发生数据变更时会将变更信息记录至binlog日志;
  2. Slave将Master的binlog日志中的事件拷贝到它relay log;
  3. Slave重放relay log中事件,将数据变更反映它自己的数据;

canal工作原理

 

简单地讲,canal将伪装自己为MySQL Slave并向Master发送dump协议,获取binlog并解析

Canal内部组件解析

 

Canal server内部由几个模块组成, 外部的Server负责接收Canal Client的请求并返回数据。每个Server 内部由多个Instance组成,每个Instance都有五个模块,Parser负责解析,Sink负责过滤,Store负责存储,Manager 对元数据进行管理,Alarm则用于报警,Instance通常是一个数据库。

工作流程

Canal Server 启动后,会根据配置启动多个Instance, 每个Instance都会通过Socket连接到MySQL Master并dump binlog,然后将binlog二进制数据交给Parser解析,通过Sink过滤,最后存储在Store里面,当客户端连接时,会从zookeeper上读取对应的client的信息,而Manager负责管理zookeeper,如果这个过程出现错误,Alarm则会打印出报警信息。

canal客户端支持JavaGolangPHPPythonRustC#六种语言,其他语言可将变更记录投放到 Kafka/RocketMQ中,借助MQ多语言特性进行处理。

日常管理

canal 1.1.4版本,已引入canal-admin工程,提供相对友好的WebUI操作界面,方便更多用户配置管理、节点运维等的操作。

canal-admin的核心模型主要有:

  1. instance,对应canal-server里的instance,一个最小的订阅mysql的队列
  2. server,对应canal-server,一个server里可以包含多个instance
  3. 集群,对应一组canal-server,组合在一起面向高可用HA的运维
使用示例(基于docker)

拉取镜像

docker pull canal/canal-server

本地编译

git clone git@github.com:alibaba/canal.git
cd canal/docker && sh build.sh

运行cannal

sh run.sh -e canal.auto.scan=false \
-e canal.destinatiOns=test \
-e canal.instance.master.address=127.0.0.1:3306 \
-e canal.instance.dbUsername=canal \
-e canal.instance.dbPassword=canal \
-e canal.instance.cOnnectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false \
性能监控

 

Canal server性能指标监控基于prometheus的实现。如果没接触过,可以先了解一下,目前主流的互联网公司都会用到prometheus,篇幅有限,这里不做展开,明天单独进行详细的介绍。


推荐阅读
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • python第一天学习python
    1、python语言可使用的开发工具有:charles、fiddles等。。。2、语言分类:编译型和解释型,编译型如:c、c++、c#。。。。解释型:python、java、php ... [详细]
  • 本文探讨了Go语言(Golang)的学习价值及其在Web开发领域的应用潜力,包括其独特的语言特性和为什么它是现代软件开发的理想选择。 ... [详细]
  • 解决MySQL Administrator 登录失败问题
    本文提供了解决在使用MySQL Administrator时遇到的登录错误的方法,包括启动变量和服务部分禁用的问题。同时,文章还介绍了通过安全配置模式来解决问题的具体步骤。 ... [详细]
  • 远程访问用户 Kindle通过电子书实现控制
    介绍自2007年以来,亚马逊已售出数千万台Kindle,令人印象深刻。但这也意味着数以千万计的人可能会因为这些Kindle中的软件漏洞而被黑客入侵。他 ... [详细]
  • 成为一名高效的Java架构师不仅需要掌握高级Java编程技巧,还需深入理解JVM的工作原理及其优化方法。此外,对池技术(包括对象池、连接池和线程池)的应用、多线程处理、集合对象的内部机制、以及常用的数据结构和算法的精通也是必不可少的。同时,熟悉Linux操作系统、TCP/IP协议栈、HTTP协议等基础知识,对于构建高效稳定的系统同样重要。 ... [详细]
  • 构建高性能Feed流系统的设计指南
    随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
  • 一家位于长沙的知名网络安全企业,现面向全国诚聘高级后端开发工程师,特别欢迎具有一线城市经验的技术精英回归故乡,共创辉煌。 ... [详细]
  • “近年来最大计算机漏洞”被中国程序员发现!
    头条中国程序员,计算机漏洞头条(观察者网讯)据美联社12月11日报道,中国阿里云安全团队在Web服务器软件阿帕奇(Apache)下的开源日志组件Log4j内,发现一个漏洞Log4S ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
author-avatar
不要再想Ta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有