canal+kafka实现mysql与redis数据同步(centos7)

Posted 牛壹壹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了canal+kafka实现mysql与redis数据同步(centos7)相关的知识,希望对你有一定的参考价值。

为什么不直接使用 canal 同步数据到redis中?

回答:  数据同步的代码和业务逻辑代码搅合在一起不方便维护。

目前cannal的最新版支持三种消息队列,kafka , rocketmq(有bug) rabbitMq   因此本文使用kafka作为mysql同步数据到redis的消息队列

kafka2.8以后的版本不在依赖zookeeper   本文采用kafka2.12的版本使用自带的kraft代替zookeeper

官网搭建文档 :​​​​​​https://github.com/alibaba/canal/wiki/Canal-Admin-QuickStart  

大厂的文档是真的狗啊。。。。。。。。。。。。真傲娇啊。。。

配置mysql数据库 vim /etc/my.cnf

[mysqld]
server-id=1
log-bin = mysql-bin
binlog-format = ROW

重启数据库  systemctl restart mysqld

检查binlog是否开启

> show variables like '%log_bin%';

创建canal 用户给授权给canal_manager数据库
CREATE USER 'canal''@%' IDENTIFIED by 'canal';
GRANT ALL PRIVILEGES ON  canal_manager.* TO canal@'%' IDENTIFIED by 'canal';

搭建canal 官网 Releases · alibaba/canal · GitHub

获取安装包 canal.deployer-1.1.6.tar.gz     canal.admin-1.16.tar.gz

mkdir cannal

mv canal.deployer-1.1.6.tar.gz canal    && cd canal

tar -zxvf canal.deployer-1.1.6.tar.gz 

vim /conf/canal.properties

# tcp, kafka, rocketMQ, rabbitMQ, pulsarMQ
canal.serverMode = kafka
#########                    Kafka                   #############
kafka.bootstrap.servers = 127.0.0.1:9092
#########               destinations            #############
canal.destinations = example

修改cannal配置文件 canal/conf/example

vim instance.properties

# position info
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=mysql-bin.000005    # SHOW MASTER STATUS 获取;
canal.instance.master.position=154                        #binlog日志位置
# username/password
canal.instance.dbUsername=cannal
canal.instance.dbPassword=yourpassword
# mq config   消息队列的topic 我这里的topic名称是devops 根据自身情况而定
canal.mq.topic=devops

启动canal应用  查看进程

./canal/bin/startup.sh   

查看日志是否运行成功  less canal.log

 

安装canal.admin 

tar -zxvf  canal.admin-1.16.tar.gz -C /usr/local/canal/canal_web

将/canal_web/conf下的canal_manager.sql 文件导入mysql数据库

> create database canal_manager; 
>source /cannal_web/canal_manager.sql

修改配置文件 vim /conf/application.yml

server:
  port: 8089
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8

spring.datasource:
  address: 127.0.0.1:3306
  database: canal_manager
  username: canal
  password: canal         #确保mysql -ucanal -pcanal 可以登陆canal_manager数据库
  driver-class-name: com.mysql.jdbc.Driver
  url: jdbc:mysql://$spring.datasource.address/$spring.datasource.database?useUnicode=true&characterEncoding=UTF-8&useSSL=false
  hikari:
    maximum-pool-size: 30
    minimum-idle: 1

canal:
  adminUser: admin
  adminPasswd: 123456    #注意:自己修改的密码和web登陆不是同一套验证  第一次用123456

启动 canal.web

./bin/startup.sh

访问canal.web页面    localhost:8089

搭建kafka3.0  使用自带的kraft代替zookeeper

Kafka官网地址: Apache Kafka   去下载binary Downloads  二进制包 不要下载源码包

$ tar -xzf kafka_2.13-3.3.1.tgz
$ cd kafka_2.13-3.3.1/congfig/kraft/

修改配置 vim kraft/server.properties

node.id=1
controller.quorum.voters=1@localhost:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
advertised.listeners=PLAINTEXT://localhost:9092
controller.listener.names=CONTROLLER
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAI
log.dirs=/usr/local/script/kafka/logs/kraft_log/    #单机主要该这里 meta数据的存储位置

生成一个唯一集群id kafka3.x专有的   会生成uuid字符串

../../bin/kafka-storage.sh random-uuid

格式化操作,会在配置的kraft_log中出现一个meta表

../../bin/kafka-storage.sh format -t ODmFtRXAQl6zabcZfzScnxw -c /usr/local/script/kafka/config/kraft/server.properties

启动kafka

./bin/kafka-server-start.sh -daemon config/kraft/server.properties   后台启动

./bin/kafka-server-start.sh config/kraft/server.properties     前端启动

创建一个topic   topic名称为devops

./kafka-topics.sh --create  --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic devops

查看kafka topic列表

./bin/kafka-topics.sh --list --bootstrap-server localhost:9092

查看topic名称为devops的消息内容

./kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic devops

验证是否消息可以正常生产与消费

创建生产者     输入hello

./kafka-console-producer.sh  --bootstrap-server localhost:9092  --topic devops

重新开一个中端,创建消费者   并在消费端查看

./kafka-console-consumer.sh --bootstrap-server  localhost:9092 -topic devops --from-beginning

至此kafka3.x搭建完毕

以上是关于canal+kafka实现mysql与redis数据同步(centos7)的主要内容,如果未能解决你的问题,请参考以下文章

canal+kafka实现mysql与redis数据同步(centos7)

canal+Kafka实现mysql与redis数据同步

canal+Kafka实现mysql与redis数据同步

canal+Kafka实现mysql与redis数据同步

mysql同步数据到redis-增量同步

基于Canal的Mysql&Redis数据同步实现