canal配合kafka使用

一、部署和安装
  1. 部署zookeeper
    zookeeper: Zookeeper QuickStart
  2. 部署kafka
    kafka: Kafka QuickStart
  3. 部署canal
    canal: Canal部署和使用
二、修改配置
  1. 修改instance的配置(可参考一、中的《Canal的部署和使用》)
#  按需修改成自己的数据库信息
#################################################
...
canal.instance.master.address=192.168.1.20:3306
# username/password,数据库的用户名和密码
...
canal.instance.dbUsername = canal
canal.instance.dbPassword = canal
...
# mq config
canal.mq.topic=example
# 针对库名或者表名发送动态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
#################################################
  1. 修改canal配置
# ...
# 可选项: 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
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

mq相关参数说明

参数名参数说明默认值
canal.mq.serverskafka为bootstrap.servers,rocketMQ中为nameserver列表127.0.0.1:6667
canal.mq.retries发送失败重试次数0
canal.mq.batchSizekafka为ProducerConfig.BATCH_SIZE_CONFIG,rocketMQ无意义16384
canal.mq.maxRequestSizekafka为ProducerConfig.MAX_REQUEST_SIZE_CONFIG,rocketMQ无意义1048576
canal.mq.lingerMskafka为ProducerConfig.LINGER_MS_CONFIG , 如果是flatMessage格式建议将该值调大, 如: 200,rocketMQ无意义1
canal.mq.bufferMemorykafka为ProducerConfig.BUFFER_MEMORY_CONFIG,rocketMQ无意义33554432
canal.mq.producerGroupkafka无意义,rocketMQ为ProducerGroup名Canal-Producer
canal.mq.canalBatchSize获取canal数据的批次大小50
canal.mq.canalGetTimeout获取canal数据的超时时间100
canal.mq.flatMessage是否为json格式,如果设置为false,对应MQ收到的消息为protobuf格式,需要通过CanalMessageDeserializer进行解码true
canal.mq.transactionkafka消息投递是否使用事务, 主要针对flatMessage的异步发送和动态多topic消息投递进行事务控制来保持和canal binlog position的一致性, flatMessage模式下建议开启(需要kafka版本支持)。如果设置为false, flatMessage消息将会采用逐条同步的方式投递, 可能会产生消息丢失或者重复投递,rocketMQ无意义false
canal.mq.topicmq里的topic名
canal.mq.dynamicTopicmq里的动态topic规则, 1.1.3版本支持
canal.mq.partition单队列模式的分区下标,1
canal.mq.partitionsNum散列模式的分区数
canal.mq.partitionHash散列规则定义,库名.表名 : 唯一主键,比如mytest.person: id,1.1.3版本支持新语法,见下文
三、写入kafka中的数据
{
    "data":[
        {
            "field1":"4d672137-517e-4d31-befc-2bf5dadfb828",
            "field2":"XXXXX",
            "field3":"",
            "field4":"",
            "field5":"0",
            "create_user":"user",
            "create_time":"2019-04-09 11:24:49",
            "modify_user":"CMDB_SYNC",
            "modify_time":"2019-09-16 15:54:16"
        }
    ],
    "database":"uoamp_db",
    "es":1568620456000,
    "id":50,
    "isDdl":false,
    "mysqlType":{
        "field1":"varchar(60)",
        "field2":"varchar(200)",
        "field3":"varchar(100)",
        "field4":"varchar(50)",
        "field5":"char(1)",
        "create_user":"varchar(50)",
        "create_time":"datetime",
        "modify_user":"varchar(50)",
        "modify_time":"datetime"
    },
    "old":[
        {
            "modify_time":"2019-09-16 15:53:16"
        }
    ],
    "pkNames":[
        "field1"
    ],
    "sql":"",
    "sqlType":{
        "field1":12,
        "field2":12,
        "field3":12,
        "field4":12,
        "field5":1,
        "create_user":12,
        "create_time":93,
        "modify_user":12,
        "modify_time":93
    },
    "table":"table_name",
    "ts":1568620839843,
    "type":"UPDATE"
}

消费kafka中的数据进行业务操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值