基于Canal同步Mysql数据到Kafka
mysql配置
查看mysql是否开启binlog
SHOW VARIABLES LIKE '%bin%';
设置mysql开启binlog
binlog_format=ROW # 这里一定是row格式 server-id=1 gtid-mode=on enforce-gtid-consistency=1 #设置为主从强一致性 log-slave-updates=1 #记录日志 log-bin=mysql-bin #指定日志文件
创建Canal用户
# 新建一个用户名canal密码为123456的新用户,赋予REPLICATION SLAVE和 REPLICATION CLIENT权限 CREATE USER canal IDENTIFIED BY '123456'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
创建数据库
CREATE DATABASE `数据库名` CHARSET `utf8mb4` COLLATE `utf8mb4_unicode_ci`;
创建表
CREATE TABLE `order` ( id BIGINT UNIQUE PRIMARY KEY AUTO_INCREMENT COMMENT '主键', order_id VARCHAR(64) NOT NULL COMMENT '订单ID', amount DECIMAL(10, 2) NOT NULL DEFAULT 0 COMMENT '订单金额', create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', UNIQUE uniq_order_id (`order_id`) ) COMMENT '订单表';
Zookeeper配置
创建zookeeper目录
midkr /data/zk midkr /data/zk/data cd /data/zk wget https://downloads.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz tar -zxvf apache-zookeeper-3.6.0-bin.tar.gz cd apache-zookeeper-3.6.0-bin/conf cp zoo_sample.cfg zoo.cfg && vim zoo.cfg
启动
sh /data/zk/apache-zookeeper-3.6.0-bin/bin/zkServer.sh start # 启动后显示 /usr/bin/java ZooKeeper JMX enabled by default Using config: /data/zk/apache-zookeeper-3.6.0-bin/bin/../conf/zoo.cfg Starting zookeeper ... STARTED # 启动的默认端口是2181
Kafka配置
安装kafka
# 创建kafka目标并解压kafka mkdir /data/kafka mkdir /data/kafka/data wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.13-2.8.0.tgz tar -zxvf kafka_2.13-2.4.0.tgz
配置
vim /data/kafka/kafka_2.13-2.4.0/config/server.properties # 修改日值文件地址为 /data/kafka/data
启动
sh /data/kafka/kafka_2.13-2.4.0/bin/kafka-server-start.sh /data/kafka/kafka_2.13-2.4.0/config/server.properties # 后台启动 sh /data/kafka/kafka_2.13-2.4.0/bin/kafka-server-start.sh -daemon /data/kafka/kafka_2.13-2.4.0/config/server.properties
Canal配置
安装
mkdir /data/canal cd /data/canal # 这里注意一点,Github在国内被墙,下载速度极慢,可以先用其他下载工具下载完再上传到服务器中 wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz tar -zxvf canal.deployer-1.1.4.tar.gz
目录结构
- bin # 运维脚本 - conf # 配置文件 canal_local.properties # canal本地配置,一般不需要动 canal.properties # canal服务配置 logback.xml # logback日志配置 metrics # 度量统计配置 spring # spring-实例配置,主要和binlog位置计算、一些策略配置相关,可以在canal.properties选用其中的任意一个配置文件 example # 实例配置文件夹,一般认为单个数据库对应一个独立的实例配置文件夹 instance.properties # 实例配置,一般指单个数据库的配置 - lib # 服务依赖包 - logs # 日志文件输出目录
配置(canal.properties 和 instance.properties)
# canal.properties 去掉canal.instance.parser.parallelThreadSize = 16这个配置项的注释,也就是启用此配置项,和实例解析器的线程数相关,不配置会表现为阻塞或者不进行解析。 canal.serverMode配置项指定为kafka,可选值有tcp、kafka和rocketmq(master分支或者最新的的v1.1.5-alpha-1版本,可以选用rabbitmq),默认是kafka。 canal.mq.servers配置需要指定为Kafka服务或者集群Broker的地址,这里配置为127.0.0.1:9092。 # canal.mq.servers在不同的canal.serverMode有不同的意义。 # kafka模式下,指Kafka服务或者集群Broker的地址,也就是bootstrap.servers # rocketmq模式下,指NameServer列表 # rabbitmq模式下,指RabbitMQ服务的Host和Port
# instance.properties
# 需要配置一个和Master节点的服务ID完全不同的值,这里笔者配置为654321。
# 配置数据源实例,包括地址、用户、密码和目标数据库
canal.instance.mysql.slaveId
canal.instance.master.address,# 这里指定为127.0.0.1:3306。
canal.instance.dbUsername,# 这里指定为canal。
canal.instance.dbPassword,# 这里指定为123456。
# 新增:
canal.instance.defaultDatabaseName,# 这里指定为test(需要在MySQL中建立一个test数据库,见前面的流程)。
# Kafka相关配置,这里暂时使用静态topic和单个partition:
canal.mq.topic,这里指定为test,也就是解析完的binlog结构化数据会发送到Kafka的命名为test的topic中。
canal.mq.partition,这里指定为0
其他配置项可以参考下面两个官方Wiki的链接
# Canal-Kafka-RocketMQ-QuickStart
https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart
# AdminGuide
https://github.com/alibaba/canal/wiki/AdminGuide
启动
sh /data/canal/bin/startup.sh # 查看服务日志 tail -100f /data/canal/logs/canal/canal # 查看实例日志 -- 一般情况下,关注实例日志即可 tail -100f /data/canal/logs/example/example.log
启动消费端
sh /data/kafka/kafka_2.13-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic test
kafka添加数据到topic
sh /data/kafka/kafka_2.13-2.8.0/bin/kafka-console-producer.sh --broker-list 192.168.31.214:9092 -topic test

浙公网安备 33010602011771号