Mysql数据如何实时同步到Es,使用Canal进行实时数据同步

参考:https://blog.csdn.net/m0_73311735/article/details/127490520

阿里文档:https://github.com/alibaba/canal?tab=readme-ov-file

php实现:https://blog.51cto.com/phpme/5904012

python实现

https://github.com/bithaolee/canal-python

 

docker 部署

https://www.cnblogs.com/hg-super-man/p/17370364.html

 

docker安装
1、拉取镜像:
docker pull canal/canal-server:v1.1.7

2、启动容器:
docker run -p 11111:11111 --name canal -d canal/canal-server:v1.1.7

3、修改配置:
vi canal-server/conf/example/instance.properties
改mysql配置:

canal.instance.master.address=192.168.26.201:3306
canal.instance.master.journal.name=mysql-bin.000003
canal.instance.master.position=154
canal.instance.dbUsername=root
canal.instance.dbPassword=root

消费端

kafka安装
参考:
https://developer.aliyun.com/article/1048866

1. 安装zookeeper

查找镜像:
docker search zookeeper
拉取镜像:
docker pull wurstmeister/zookeeper
创建并启动zookeeper容器
docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper


2.安装kafka

查找镜像
docker search kafka
拉取镜像:
docker pull wurstmeister/kafka
创建并启动kafka容器,连接到上一步创建的zookeeper
docker run -d --name kafka --publish 9092:9092 --link zookeeper --env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 --env KAFKA_ADVERTISED_HOST_NAME=localhost --env KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka

3.操作

1.如何进入kafka终端命令行:
C:\Users\2019051634>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4855e784c7e wurstmeister/kafka “start-kafka.sh” 17 minutes ago Up 17 minutes 0.0.0.0:9092->9092/tcp kafka
30fd2cdbc0a7 wurstmeister/zookeeper “/bin/sh -c '/usr/sb…” 22 minutes ago Up 22 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp zookeeper
docker exec -it kafka /bin/sh
2.创建 topic
kafka-topics.sh --zookeeper 172.17.0.2:2181 --create --topic king --replication-factor 1 --partitions 8

kafka-topics.sh --create --bootstrap-server 172.18.0.3:9092 --replication-factor 3 --partitions 1 --topic second

3.查看 topic
kafka-topics.sh --zookeeper 172.17.0.2:2181 --list
kafka-topics.sh --list --bootstrap-server 172.18.0.3:9092

4、查看详细主题
kafka-topics.sh --bootstrap-server 172.18.0.3:9092 --describe --topic test


5.修改topic分区数
/ # kafka-topics.sh --zookeeper 172.17.0.2:2181 --alter --topic my-topic --partitions 2

kafka-topics.sh --bootstrap-server 172.18.0.3:9092 --alter --partitions 1 --topic example

6.删除topic
/ # kafka-topics.sh --zookeeper 172.17.0.2:2181 --delete --topic my-topic
7.查看日志文件目录
在/kafka/kafka-logs-a4855e784c7e 下面
或者使用 这个命令
kafka-topics.sh --zookeeper 172.17.0.2:2181 --describe
8.查看zookeeper或者kafka的网络地址

docker inspect kafka

9.终端生产数据

kafka-console-producer.sh --broker-list 172.17.0.3:9092 --topic king

10.终端消费数据

kafka-console-consumer.sh --bootstrap-server 172.17.0.3:9092 --topic king --from-beginning

 

查看消费者组
kafka-consumer-groups.sh --bootstrap-server 172.18.0.3:9092 --list

创建消费者从头开始读并设置消费者组
kafka-console-consumer.sh --bootstrap-server 172.18.0.3:9092 --topic example --from-beginning --group example

创建消费者时设置偏移量为最新
kafka-consumer-groups.sh --bootstrap-server 172.18.0.3:9092 --group example --topic first --reset-offsets --to-latest --execute
#启动
kafka-console-consumer.sh --bootstrap-server 172.18.0.3:9092 --topic example --group example

创建消费者时设置具体的偏移量数据(重置偏移量到6)
kafka-consumer-groups.sh --bootstrap-server 172.18.0.3:9092 --group example --topic first --reset-offsets --to-offset 6 --execute
#启动
kafka-console-consumer.sh --bootstrap-server 172.18.0.3:9092 --topic example --group example


查看消费者组主具体信息
kafka-consumer-groups.sh --bootstrap-server 172.18.0.3:9092 --describe --group example

删除消费者组

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group example --delete

 


11.查看配置文件:
find / -name *server.properties*

 

canal-php 安装:
$ composer require xingwenge/canal_php
or
$ git clone https://github.com/xingwenge/canal-php.git
$ cd canal-php


$ composer update

 


问题:
重启指定访问点canal.instance.master.position,需删除同目录的 meta.dat 历史记录

参考网址:
https://blog.csdn.net/lisuibi/article/details/129823507

https://github.com/alibaba/canal?tab=readme-ov-file

topic参考
https://blog.csdn.net/ashic/article/details/104722975
https://github.com/alibaba/canal/wiki/AdminGuide

canal 1.1.3版本之后, 支持配置格式:schema 或 schema.table,多个配置之间使用逗号或分号分隔

例子1:test\\.test 指定匹配的单表,发送到以test_test为名字的topic上
例子2:.*\\..* 匹配所有表,则每个表都会发送到各自表名的topic上
例子3:test 指定匹配对应的库,一个库的所有表都会发送到库名的topic上
例子4:test\\.* 指定匹配的表达式,针对匹配的表会发送到各自表名的topic上
例子5:test,test1\\.test1,指定多个表达式,会将test库的表都发送到test的topic上,test1\\.test1的表发送到对应的test1_test1 topic上,其余的表发送到默认的canal.mq.topic值
为满足更大的灵活性,允许对匹配条件的规则指定发送的topic名字,配置格式:topicName:schema 或 topicName:schema.table

例子1: test:test\\.test 指定匹配的单表,发送到以test为名字的topic上
例子2: test:.*\\..* 匹配所有表,因为有指定topic,则每个表都会发送到test的topic下
例子3: test:test 指定匹配对应的库,一个库的所有表都会发送到test的topic下
例子4:testA:test\\.* 指定匹配的表达式,针对匹配的表会发送到testA的topic下
例子5:test0:test,test1:test1\\.test1,指定多个表达式,会将test库的表都发送到test0的topic下,test1\\.test1的表发送到对应的test1的topic下,其余的表发送到默认的canal.mq.topic值

大家可以结合自己的业务需求,设置匹配规则,建议MQ开启自动创建topic的能力

posted @ 2023-03-31 09:46  飞鹰之歌  阅读(94)  评论(0)    收藏  举报