大忙人系列_如何使用Canal和kafka解决MySQL与Redis的同步问题?

本文介绍了如何使用Canal结合Kafka解决MySQL到Redis的数据同步问题,包括MySQL环境配置、Canal服务端设置、客户端构建以及Kafka消费端的代码演示。通过Canal监听MySQL binlog并借助Kafka实现数据流转,确保数据一致性。
摘要由CSDN通过智能技术生成

写在前文

本文是我自己经过实践记录的,环境搭建简单快速,适合于前期学习(如果想深入了解Kafka、Redis、MySQL集群同步等相关知识本文不适用)。使用canal同步有两种方案,一种是使用canal原始的tcp方式,一种是使用canal+kafka类型;

Canal原理

Canal的服务端伪装成MySQL的从服务器订阅MySQL的主服务器的binlog日志,实现增量同步数据,保持最终一致性。

1、搭建MySQL环境(Docker安装MySQL)

docker搭建MySQL可以参考其他文章。

配置:my.cnf文件

开启mysql的binlog同步文件,

# 方法一:
    log-bin=mysql-bin #添加这一行就ok
    binlog-format=ROW #选择row模式
    server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复

# 方法二:
    docker exec mysql bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
    docker exec mysql bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
    docker restart mysql

重启MySQL:docker restart mysql

如果没有开启binlog的话,我们在console中执行:show variables like 'log_bin';的值就是OFF(开启后就为ON)。

在MySQL中创建canal账号(可以直接用root,也可以创建一个新的账号)

执行创建用户我的SQL语句:
drop user 'canal'@'%';
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
grant all privileges on *.* to 'canal'@'%' identified by 'canal';
flush privileges;

注意:如果我们的权限不足的话,如下图。我们在执行程序的时候系统时连接不上MySQL的主节点的,会报权限不足。

2、基于canal的tcp方式同步

架构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值