tcp实时传输kafka数据_canal实时同步mysql表数据到Kafka

canal实时同步mysql表数据到Kafka

准备

对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式,my.cnf 中配置如下

[mysqld]

log-bin=mysql-bin # 开启 binlog

binlog-format=ROW # 选择 ROW 模式

server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

注意:针对阿里云 RDS for MySQL , 默认打开了 binlog , 并且账号默认具有 binlog dump 权限 , 不需要任何权限或者 binlog 设置,可以直接跳过这一步

授权 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;

安装canal.server

1 下载压缩包

到官网地址(release)下载最新压缩包,请下载 canal.deployer-latest.tar.gz

2 将canal.deployer 复制到固定目录并解压

mkdir -p /usr/local/canal

cp canal.deployer-1.1.1.tar.gz /usr/local/canal

tar -zxvf canal.deployer-1.1.1.tar.gz

3 配置修改参数

a. 修改instance 配置文件,修改单个数据源的配置 vi conf/example/instance.properties

# 按需修改成自己的数据库信息

#################################################

...

#需要同步的mysql地址,端口

canal.instance.master.address=192.168.1.20:3306

# username/password,数据库的用户名和密码

...

canal.instance.dbUsername = root

canal.instance.dbPassword = 123456

#需要同步的具体表,也可以使用正则表达式监听多张表或者库

canal.instance.filter.regex=realtime.tpp_vehicle_through_points_history

...

# mq config

# topic的名称

canal.mq.topic=topic_start

# 针对库名或者表名发送动态topic

#canal.mq.dynamicTopic=mytest,.*,mytest.user,mytest\\..*,.*\\..*

canal.mq.partition=0

# hash partition config

#canal.mq.partitionsNum=3

# 库名.表名: 唯一主键,多个表之间用逗号分隔

#canal.mq.partitionHash=mytest.person:id,mytest.role:id

#################################################

b. 修改canal 配置文件,修改 Canal 全局设置  vi ./conf/canal.properties

# ...

# 可选项: tcp(默认), kafka, RocketMQ

# 更改模式,直接把数据扔进 Kafka

canal.serverMode = kafka

# ...

# kafka/rocketmq 集群配置: 192.168.1.117:9092,192.168.1.118:9092,192.168.1.119:9092

## Kafka 的地址

canal.mq.servers = 10.255.xx.xx:9092,10.255.xx.xx:9092,10.255.xx.xx: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 = false

canal.mq.flatMessage = true# 使用文本格式(JSON)进行传输,否则 Kafka 里扔进去的是二进制数据,虽然不影响,但是看起来不方便

canal.mq.compressionType = none

canal.mq.acks = all

# kafka消息投递是否使用事务

canal.mq.transaction = false

详细参数配置请看:https://github.com/alibaba/canal/wiki/Canal-Kafka-RocketMQ-QuickStart

开启 Canal bin/startup.sh

查看日志是否有异常 vim logs/canal/canal.log vim logs/test/test.log

测试,连上数据库尝试执行更改 SQL

启动kafka的消费监控:kafka-console-consumer –bootstrap-server app02:9092 –from-beginning –topic topic_start

看得到同步的表名称和同步的数据类型:UPDATE,INSERT,DELETE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值