MySQL binlog解析canal + kafka

MySQL binlog解析canal + kafka

参考:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart

系统环境

系统:CentOS-7-x86_64-Minimal
JDK:jdk-8u131-linux-x64.tar.gz
zookeeper:zookeeper-3.4.13.tar.gz
kafka:kafka_2.12-2.3.0.tgz
canal:canal.deployer-1.1.3.tar.gz
MySQL:5.7.26

关闭系统防火墙
systemctl stop firewalld
systemctl disable firewalld

部署java环境

首先进入创建 mkdir -p /usr/local/java
然后进入该目录 cd /usr/local/java
到官网下载jdk:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载及解压:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
tar -zxvf jdk-8u131-linux-x64.tar.gz
mv jdk1.8.0_131  jdk1.8

配置环境变量:
vi /etc/profile
在文件最后添加变量

export JAVA_HOME=/usr/local/java/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

然后执行source命令,使配置生效
source /etc/profile
查看是否配置成功
java -version

安装zookeeper

下载源码包,并解压

官网下载地址:http://www.apache.org/dyn/closer.cgi/zookeeper

wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
tar zxvf zookeeper-3.4.14.tar.gz
mv zookeeper-3.4.14 /usr/local/zookeeper

修改环境变量

编辑 /etc/profile 文件, 在文件末尾添加以下环境变量配置:

# ZooKeeper Env
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

运行以下命令使环境变量生效: source /etc/profile

重命名配置文件

初次使用 ZooKeeper 时,需要将$ZOOKEEPER_HOME/conf 目录下的 zoo_sample.cfg 重命名为 zoo.cfg, zoo.cfg

mv  $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg

单机模式–修改配置文件

创建目录/usr/local/zookeeper/data 和/usr/local/zookeeper/logs 修改配置文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/logs
clientPort=2181

如果是多节点,配置文件中尾部增加

server.1=192.168.1.110:2888:3888
server.2=192.168.1.111:2888:3888
server.3=192.168.1.112:2888:3888

同时,增加

#master
echo "1">/usr/local/zookeeper/data/myid
#slave1
echo "2">/usr/local/zookeeper/data/myid
#slave2
echo "3">/usr/local/zookeeper/data/myid

启动 ZooKeeper 服务

cd /usr/local/zookeeper/bin
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: standalone

验证zooKeeper服务

服务启动完成后,可以使用 telnet 和 stat 命令验证服务器启动是否正常:

[root@localhost bin]# telnet 127.0.0.1 2181
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
stat
Zookeeper version: 3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
Clients:
 /127.0.0.1:43804[0](queued=0,recved=1,sent=0)
Latency min/avg/max: 0/0/0
Received: 2
Sent: 1
Connections: 1
Outstanding: 0
Zxid: 0x0
Mode: standalone
Node count: 4
Connection closed by foreign host.

停止 ZooKeeper 服务

# ./zkServer.sh  stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED

zk ui安装 (选装,页面查看zk的数据)

zkui是zookeeper的一个web界面的管理控制面板,可以查看和修改zookeeper中数据
项目地址:https://github.com/DeemOpen/zkui
源码编译需要安装 maven

# wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
#cd zkui/
#yum install -y maven
#mvn clean install

修改配置文件默认值

#vim config.cfg
    serverPort=9090     #指定端口
    zkServer=192.168.1.110:2181 # zk服务器
    sessionTimeout=300000

启动程序至后台
2.0-SNAPSHOT 会随软件的更新版本不同而不同,执行时请查看target 目录中真正生成的版本

nohup java -jar target/zkui-2.0-SNAPSHOT-jar-with-dependencies.jar & 

用浏览器访问:

http://192.168.1.110:9090/

安装Kafka

下载压缩包, 复制到固定目录并解压

到官网下载压缩包

wget http://mirror.bit.edu.cn/apache/kafka/2.3.0/kafka_2.12-2.3.0.tgz
tar -zxvf kafka_2.12-2.3.0.tgz
mv   kafka_2.12-2.3.0   /usr/local/kafka

修改配置文件

vim /usr/local/kafka/config/server.properties 修改参数

#31行 listeners=PLAINTEXT://:9092
#36行 advertised.listeners=PLAINTEXT://192.168.10.110:9092
#123行 zookeeper.connect=localhost:2181

启动server

启动

bin/kafka-server-start.sh -daemon config/server.properties &

查看所有topic

bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181

查看指定topic下数据

bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --from-beginning --topic example  #从开头开始消费
bin/kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic example  #实时消费

安装canal.server

到官网地址(https://github.com/alibaba/canal/releases)下载最新压缩包,请下载 canal.deployer-latest.tar.gz

wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
mkdir -p /usr/local/canal
cp canal.deployer-1.1.3.tar.gz /usr/local/canal
cd /usr/local/canal
tar -zxvf canal.deployer-1.1.3.tar.gz

配置修改参数

mysql相关初始化

本机安装mysql:https://www.cnblogs.com/luohanguo/p/9045391.html
对应ip 地址的MySQL 数据库需进行相关初始化与设置
先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant

CREATE USER canal IDENTIFIED BY 'canal';  
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;

重启mysql

canal配置

a. 修改instance 配置文件 vi conf/example/instance.properties

#  按需修改成自己的数据库信息  
#################################################
...
canal.instance.master.address=192.168.1.20:3306  # 第9行
# username/password,数据库的用户名和密码
...
canal.instance.dbUsername = canal   #第33行
canal.instance.dbPassword = canal
...
 # table regex 监控数据的变化
canal.instance.filter.regex=.*\\..* # 该配置不生效,不用管
# table black regex
canal.instance.filter.black.regex=
# mq config
canal.mq.topic=example # kafka主题
# 针对库名或者表名发送动态topic
canal.mq.dynamicTopic=canal:canaltest\\.moniotr # canal指定kafaka的topic,canaltest\\.moniotr指定表
canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#库名.表名: 唯一主键,多个表之间用逗号分隔
#canal.mq.partitionHash=mytest.person:id,mytest.role:id
#################################################

b. 修改canal 配置文件vi /usr/local/canal/conf/canal.properties

# ...
# 可选项: tcp(默认), kafka, RocketMQ
canal.serverMode = kafka
# ...
# kafka/rocketmq 集群配置: 192.168.1.117:9092,192.168.1.118:9092,192.168.1.119:9092 
canal.mq.servers = 127.0.0.1:9092 #kafka端口为9092
canal.mq.retries = 0
# flagMessage模式下可以调大该值, 但不要超过MQ消息体大小上限
canal.mq.batchSize = 16384
canal.mq.maxRequestSize = 1048576
# flatMessage模式下请将该值改大, 建议50-200
canal.mq.lingerMs = 1
canal.mq.bufferMemory = 33554432
# Canal的batch size, 默认50K, 由于kafka最大消息体限制请勿超过1M(900K以下)
canal.mq.canalBatchSize = 50
# Canal get数据的超时时间, 单位: 毫秒, 空为不限超时
canal.mq.canalGetTimeout = 100
# 是否为flat json格式对象
canal.mq.flatMessage = true
canal.mq.compressionType = none
canal.mq.acks = all
# kafka消息投递是否使用事务
canal.mq.transaction = false
启动

cd /usr/local/canal/
sh bin/startup.sh
查看 logs/canal/canal.log
vi logs/canal/canal.log
查看instance的日志
vi logs/example/example.log

关闭

cd /usr/local/canal/
sh bin/stop.sh

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beter138

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值