一、kafka搭建
1、安装kafka
1)下载并上传服务器:
https://kafka.apache.org/downloads
2)解压:
tar -zxf kafka_2.13-2.7.0.tgz
cd /zwtx/kafka_2.13-2.7.0
3)修改配置文件
vim config/server.properties
修改其中的:
broker.id=1
# 先创建好log文件目录
log.dirs=/data/kafka/kafka-logs
2、启动
1)启动 zk
使用安装包中的脚本启动单节点 Zookeeper 实例:
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
2)启动Kafka 服务
使用 kafka-server-start.sh
启动 kafka 服务:
bin/kafka-server-start.sh -daemon config/server.properties
二、canal搭建
1、简介
canal,译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
以简单地把canal理解为一个用来同步增量数据的一个工具。
canal的数据同步不是全量的,而是增量。基于binary log增量订阅和消费,canal可以做:
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护
- 业务cache(缓存)刷新
- 带业务逻辑的增量数据处理
2、配置Mysql开启binlog
1、创建canal用户
-- 使用命令登录:mysql -u root -p
-- 创建用户 用户名:canal 密码:canal
create user 'canal'@'%' identified by 'canal';
-- 授权 *.*表示所有库 用户名 密码
grant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'canal'@'%' identified by 'canal';
-- 刷新权限
FLUSH PRIVILEGES;
2、配置my.cnf
[mysqld]
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
改完配置文件后,重启mysql
3、验证
-- 查看是否打开binlog模式
show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
-- 查看binlog日志文件列表
show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 154 |
+------------------+-----------+
-- 查看当前正在写入的binlog文件
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
MySQL服务器这边就搞定了
3、安装canal
1)下载并上传服务器
地址:https://github.com/alibaba/canal/releases
2)解压
3)修改配置文件
vim conf/example/instance.properties
## mysql serverId , v1.0.26+ will autoGen
## v1.0.26版本后会自动生成slaveId,所以可以不用配置
# canal.instance.mysql.slaveId=0
# 数据库地址
canal.instance.master.address=127.0.0.1:3306
# binlog日志名称
canal.instance.master.journal.name=
# mysql主库链接时起始的binlog偏移量
canal.instance.master.position=
# mysql主库链接时起始的binlog的时间戳
canal.instance.master.timestamp=
canal.instance.master.gtid=
# username/password
# 在MySQL服务器授权的账号密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# 字符集
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
# table regex .*\\..*表示监听所有表 也可以写具体的表名,用,隔开
canal.instance.filter.regex=.*\\..*
# mysql 数据解析表的黑名单,多个表用,隔开
canal.instance.filter.black.regex=
4、启动
sh bin/start.sh
# 查看日志看是否启动成功
tail -f logs/example/example.log
三、canal + kafka
1、修改canal配置
1、修改canal.properties
vim conf/canal.properties
# tcp, kafka, RocketMQ 这里选择kafka模式
canal.serverMode = kafka
# 配置MQ的服务地址,这里配置的是kafka对应的地址和端口
canal.mq.servers = 127.0.0.1:9092
2、修改instance.properties
vim conf/example/instance.properties
# 定义主题名
canal.mq.topic=canaltopic
2、启动测试
1、启动canal
2、使用命令进行监听消费:
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic canaltopic
3、mysql CRUD看数据是否能消费到