docker+mysql+canal+kafka环境搭建

docker+mysql+canal+kafka环境搭建

软件版本

macOS 11.4
Docker version 20.10.7
canal-admin v1.1.5
canal-server v1.1.5
mysql 5.7
mysql 8
wurstmeister/kafka 2.13-2.7.0
zookeeper 3.6.3

docker常用命令

docker官方安装地址

  • 查询容器(加上-a可以查询所有容器,包括失败容器)
docker ps
  • 进入容器
docker exec -it mysql bash
  • 查看所有容器的IP
docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Mysql配置

mysql5.7

1)、docker容器运行(此步骤只是先将容器配置以及数据复制到宿主机)

docker run -d --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2)、拷贝容器配置及数据

\\ 需先建立目录
mkdir /docker/mysql/5.7/data
mkdir /docker/mysql/5.7/conf
\\ 拷贝数据(这是mysql的表数据以及日志数据)
docker cp mysql5.7:/var/lib/mysql  ~/docker/mysql/5.7/data
\\ 拷贝配置文件
docker cp mysql5.7:/etc/mysql  ~/docker/mysql/5.7/conf

3)、删除容器

docker stop mysql5.7
docker rm mysql5.7

4)、运行加了容器卷映射的容器(注意这里容器卷的映射和上面拷贝的地址是不一样的,多加了一层目录)。这里制定了root账户的密码是123456

docker run  \
-d  \
--name mysql5.7 \
-p 3306:3306  \
-v ~/docker/mysql/5.7/data/mysql:/var/lib/mysql  \
-v ~/docker/mysql/5.7/conf/mysql:/etc/mysql  \
-e MYSQL_ROOT_PASSWORD=123456  \
mysql:5.7

5)、修改配置,开启binlog,以row形式进行增量记录

修改 /home/docker/mysql/5.7/conf/mysql下的my.cnf、mysql.cnf、mysql.conf.d下的或者conf.d下的任一文件。server-id需在mysql中保持唯一

log-bin=/var/lib/mysql/mysql-bin
server-id=123454
binlog-format=ROW

如上面配置未生效,可执行命令修改

docker exec mysql5.7 bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf"
docker exec mysql5.7 bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf"

6)、重启容器

docker restart mysql5.7

7)、连接mysql,在mysql中执行下列脚本。查看容器是否开启binlog(为NO则为开启,OFF为没开启)

mysql -uroot -p
SHOW  GLOBAL VARIABLES LIKE '%log_bin%';

7)、添加canal用户

#更新一下用户密码,这里是把账户为canal的密码修改为使用mysql_native_password规则生成,密码为canal。
ALTER USER 'canal'@'%' IDENTIFIED WITH mysql_native_password BY 'canal'; 
#刷新权限
FLUSH PRIVILEGES;

kafka

先启动zookeeper

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.6.3

启动kafka

docker run -d --name kafka \
-p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper的ip:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://当前主机的ip:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka:2.13-2.7.0

canal-server

canal-server是真正工作的。是将自己伪装成mysql的从库去获取mysql的binlog并解析,可以自己选择是tcp, kafka, rocketMQ, rabbitMQ这几种中选择一种方式推送解析后的日志数据。我这里选择的是kafka,因为kafka的吞吐量是在mq中是最好的。

启动canal-server

docker run  \
-d  \
-e canal.instance.master.address=mysql的ip:3306 \
-e canal.instance.dbUsername=canal \
-e canal.instance.dbPassword=canal \
--name canal-server  \
-p 11111:11111 \
 canal/canal-server:v1.1.5

修改配置

server配置文件/canal-server/conf/canal.properties

# tcp, kafka, rocketMQ, rabbitMQ
canal.serverMode = kafka
kafka.bootstrap.servers = kafka的ip:9092

instance配置文件/canal-server/conf/example/instance.properties

canal.instance.master.address=数据库的ip:3306
canal.instance.dbUsername=数据库连接名
canal.instance.dbPassword=数据库连接密码

这里环境就搭建完成了

kafka使用本文参考该文章完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值