基于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

 

posted @ 2021-12-02 16:21  佛号静心,涤荡心灵  阅读(481)  评论(0)    收藏  举报