环境准备:
1、redis (默认端口6379)
2、zookeeper (默认端口2181)
3、Kafka (默认端口9092)
4、Canal (默认端口 11111)
5、MySQL (默认端口 3306
本文Github代码地址:https://github.com/cheriduk/spring-boot-integration-template
Canal介绍:引用官方介绍
canal 是阿里巴巴 MySQL 数据库 Binlog 的增量订阅&消费组件。
名称:canal [kə'næl]
译意: 水道/管道/沟渠
语言: 纯java开发
定位: 基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL早期,阿里巴巴 B2B 公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于 trigger 的方式获取增量 变更,不过从 2010 年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开 启了一段新纪元。ps. 目前内部使用的同步,已经支持 MySQL 8.x 和 Oracle 部分版本的日志解析
基于日志增量订阅&消费支持的业务:
-
数据库镜像
-
数据库实时备份
-
多级索引 (卖家和买家各自分库索引)
-
search build (elastic search)
-
业务cache刷新(redis)
-
价格变化等重要业务消息
Canal 工作原理:
原理相对比较简单:
-
canal模拟mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
-
mysql master收到dump请求,开始推送binary log给slave(也就是canal)
-
canal解析binary log对象(原始为byte流)
以上为官方介绍
canal 链接: https://pan.baidu.com/s/1HIT4b30BtXrkHym-w4peww 提取码: ar6c
实现项目开发中如何使用呢?
实际项目我们是配置MQ模式,配合RocketMQ或者Kafka,canal会把数据发送到MQ的topic中,然后通过消息队列的消费者进行消费处理。
这篇文章演示部署Canal,配合使用Kafka,同步数据到Redis
通过架构图,我们很清晰就知道要用到的组件:MySQL、Canal、Kafka、ZooKeeper、Redis
MySQL搭建大家应该都会,ZooKeeper、Redis这些网上也有很多资料参考
主要说下Kafka搭建
首先在官网下载安装包:
解压,打开/config/server.properties配置文件,修改日志目录
首先启动ZooKeeper,我用的是3.4.13版本:
接着再启动Kafka,在Kafka的bin目录下打开cmd,输入命令:
kafka-server-start.bat ../../config/se