Canal数据格式及写入Kafka数据样例

1. kafka中格式

  • 示例
{"data":[{"id":"27","key_value":null,"double_value":null,"long_value":"100","store_type":"NUMBER","store_url":null,"time":"1588748169","item_id":"600","create_time":"2020-05-06 00:00:00","modify_time":null}],"database":"bigdata","es":1588748884000,"id":24,"isDdl":false,"mysqlType":{"id":"bigint(20)","key_value":"mediumtext","double_value":"double","long_value":"bigint(20)","store_type":"varchar(255)","store_url":"varchar(255)","time":"bigint(20)","item_id":"bigint(20)","create_time":"timestamp","modify_time":"timestamp"},"old":null,"pkNames":["id"],"sql":"","sqlType":{"id":-5,"key_value":-4,"double_value":8,"long_value":-5,"store_type":12,"store_url":12,"time":-5,"item_id":-5,"create_time":93,"modify_time":93},"table":"job_result","ts":1588748884545,"type":"INSERT"}

{"data":[{"id":"27","key_value":null,"double_value":null,"long_value":"1001","store_type":"NUMBER","store_url":null,"time":"1588748169","item_id":"600","create_time":"2020-05-06 15:09:56","modify_time":null}],"database":"bigdata","es":1588748996000,"id":30,"isDdl":false,"mysqlType":{"id":"bigint(20)","key_value":"mediumtext","double_value":"double","long_value":"bigint(20)","store_type":"varchar(255)","store_url":"varchar(255)","time":"bigint(20)","item_id":"bigint(20)","create_time":"timestamp","modify_time":"timestamp"},"old":[{"long_value":"100","create_time":"2020-05-06 00:00:00"}],"pkNames":["id"],"sql":"","sqlType":{"id":-5,"key_value":-4,"double_value":8,"long_value":-5,"store_type":12,"store_url":12,"time":-5,"item_id":-5,"create_time":93,"modify_time":93},"table":"job_result","ts":1588748996121,"type":"UPDATE"}

{"data":[{"id":"27","key_value":null,"double_value":null,"long_value":"1001","store_type":"NUMBER","store_url":null,"time":"1588748169","item_id":"600","create_time":"2020-05-06 15:09:56","modify_time":null}],"database":"bigdata","es":1588764940000,"id":780,"isDdl":false,"mysqlType":{"id":"bigint(20)","key_value":"mediumtext","double_value":"double","long_value":"bigint(20)","store_type":"varchar(255)","store_url":"varchar(255)","time":"bigint(20)","item_id":"bigint(20)","create_time":"timestamp","modify_time":"timestamp"},"old":null,"pkNames":["id"],"sql":"","sqlType":{"id":-5,"key_value":-4,"double_value":8,"long_value":-5,"store_type":12,"store_url":12,"time":-5,"item_id":-5,"create_time":93,"modify_time":93},"table":"job_result","ts":1588764940116,"type":"DELETE"}

{"data":null,"database":"","es":1588830163000,"id":2,"isDdl":false,"mysqlType":null,"old":null,"pkNames":null,"sql":"CREATE DATABASE /*!32312 IF NOT EXISTS*/ `canal_manager` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */","sqlType":null,"table":"","ts":1588830732675,"type":"QUERY"}

2. 格式分析

  1. 一个操作为一个JsonObject
  2. 格式详解:
{
  "data": [
    {
      "id": "27",
      "key_value": null,
      "double_value": null,
      "long_value": "1001",
      "store_type": "NUMBER",
      "store_url": null,
      "time": "1588748169",
      "item_id": "600",
      "create_time": "2020-05-06 15:09:56",
      "modify_time": null
    }
  ],
  "database": "bigdata",
  "es": 1588748996000,
  "id": 30,
  "isDdl": false,
  "mysqlType": {
    "id": "bigint(20)",
    "key_value": "mediumtext",
    "double_value": "double",
    "long_value": "bigint(20)",
    "store_type": "varchar(255)",
    "store_url": "varchar(255)",
    "time": "bigint(20)",
    "item_id": "bigint(20)",
    "create_time": "timestamp",
    "modify_time": "timestamp"
  },
  "old": [
    {
      "long_value": "100",
      "create_time": "2020-05-06 00:00:00"
    }
  ],
  "pkNames": [
    "id"
  ],
  "sql": "",
  "sqlType": {
    "id": -5,
    "key_value": -4,
    "double_value": 8,
    "long_value": -5,
    "store_type": 12,
    "store_url": 12,
    "time": -5,
    "item_id": -5,
    "create_time": 93,
    "modify_time": 93
  },
  "table": "job_result",
  "ts": 1588748996121,
  "type": "UPDATE"
}
  1. data(JSONArray):

具体insert/update/delete的变更数据,可为多条,1个binlog event事件可对应多条变更,比如批处理

  • 注意: 如果为type为delete操作,data为删除前的数据,需要特殊处理.
  1. database:

数据库名

  1. es:

mysql binlog里原始的时间戳,也就是数据原始变更的时间

  1. id
  2. isDdl:

是否是ddl变更操作,比如create table/drop table

  1. mysqlType(JSONObject):

data中每个字段对应的格式类型

  1. old(JSONArray):

修改前的字段数据(id变更前的值)

  1. pkNames(JSONArray):

对应Mysql中PriMary Key

  1. sql:

具体的ddl sql

  1. sqlType(JSONObject):

jdbc type

  1. table:

表名

  1. ts:

时间戳(13位),canal收到这个binlog,构造自己协议对象的时间.

  1. type:

操作类型(INSERT,UPDATE,DELETE,QUERY,TRUNCATE)

特例
当truncate表后,canal的数据为:

{
"data": null,
"database": "basicstat",
"es": 1608280674000,
"id": 30,
"isDdl": true,
"mysqlType": null,
"old": null,
"pkNames": null,
"sql": "truncate test_canal_truncate",
"sqlType": null,
"table": "test_canal_truncate",
"ts": 1608280674856,
"type": "TRUNCATE"
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Canal来实现将MySQL数据同步到Kafka。Canal是阿里巴巴开源的一款基于MySQL数据库增量日志解析和同步的工具,可以实时捕获MySQL数据库的增量日志,解析日志内容,并将解析后的数据发送到Kafka等消息队列中。 具体实现步骤如下: 1. 安装Canal并配置MySQL数据源信息。 2. 配置CanalKafka输出端,包括Kafka的地址、topic等信息。 3. 启动Canal服务,并开启Kafka输出端。 4. 在MySQL数据库中进行数据操作,Canal会实时捕获增量日志并将解析后的数据发送到Kafka中。 通过以上步骤,就可以实现将MySQL数据同步到Kafka中。 ### 回答2: Canal是一个开源的MySQL数据库数据同步工具,可用于将MySQL数据库中的数据推送到Kafka等消息队列系统中。Canal具有简单易用和高效稳定等特点,可以实时地将MySQL的操作事件转换为消息发布到Kafka中,从而实现数据的传输和同步。 Canal数据同步过程主要分为三个步骤:数据的抽取、数据的传输和数据写入。在数据的抽取阶段,Canal会通过监听MySQL的binlog日志来实时获取数据库的更新操作事件。在数据的传输阶段,Canal会将获取到的数据转化为Kafka数据结构并将数据推送到Kafka中。在数据写入阶段,Kafka消费者会接收到Canal推送过来的数据并将数据写入到目标数据库中。 Canal同步MySQL数据Kafka具有以下优点: 1. 实时性好:Canal可以实时获取MySQL的binlog日志,因此同步数据的速度较快,数据可以实时同步到Kafka中,提高了数据同步的实时性。 2. 高效稳定:Canal具有高效稳定的数据同步能力,可以对MySQL的大量数据进行实时同步,同时Canal对复杂的数据类型和操作也具有很好的兼容性。 3. 低延迟:Canal同步MySQL数据Kafka的过程中,除了Canal本身的处理时间外,数据传输和写入等步骤都可以实现实时同步,因此具有低延迟的特点。 4. 扩展性强:Canal支持插件机制,可以根据需要进行扩展和定制,支持多种不同的数据源和目标,也支持多线程和分布式部署等高级特性。 总之,Canal同步MySQL数据Kafka是一种高效稳定、实时性好、低延迟、扩展性强的数据同步方案。在实际的数据同步应用中,可以根据具体情况选择适合自己的部署方式和应用场景,并结合其他工具和技术进行更加灵活高效的数据同步。 ### 回答3: Canal是阿里巴巴公司开发的一款基于binlog的增量数据同步工具,可以把MySQL数据库数据变更同步到Kafka等消息队列或其他存储介质中。 Canal架构包括三个组件:Canal Server、Canal Client和Canal Adapter。 Canal Server是作为数据源的MySQL数据库的代理工具,负责解析MySQL的binlog日志,并将变更事件以JSON的形式发送给Canal Client。 Canal Client是Canal数据同步的传输逻辑,接受Canal Server解析出来的binlog事件,并将事件转化为适合Kafka等消息队列的消息格式。 Canal Adapter是Canal的一个插件式架构,根据业务需求,可以通过Adapter来将数据发送到Kafka或其他消息队列、ElasticSearch等存储介质中。 在使用Canal同步MySQL数据Kafka时,需要配置Canal Server和Canal Client,其中Canal Server需要连接MySQL数据库,并开启Binlog日志功能。Canal Client需要连接Canal Server,接收MySQL数据库的变更事件,并将事件转换为对应的消息格式发送到Kafka中。 同时,需要根据业务需求配置Canal Adapter,将MySQL数据库数据变更事件转化为Kafka消息队列的消息格式,并发送到Kafka中。 总之,Canal是一款可靠高效的增量数据同步工具,可以帮助企业快速实现数据的分布式同步和多数据源之间的数据交换。在实际应用中,可以结合其他开源工具,如Flink、Presto等,构建出一套全方位的数据处理和分析平台,实现数据的快速处理和洞察。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值