开发者社区> 问答> 正文

Canal+kafka,'data': [{...],所有字段均成String类型?

在kafka上监控CANAL写入的数据,其中data部分,所有字段的值均变成String,如 'RENTAL_INCOME_I1': '0.0', 'RENTAL_INCOME_I2':'0.0', 'RECE_PRINCIPAL': '0',在MYSQL中均是decimal类型,请问是为什么出现这现象呢?

原提问者GitHub用户windtalkerbj

展开
收起
云上静思 2023-05-04 13:18:24 174 0
2 条回答
写回答
取消 提交回答
  • json格式的数据,全部为string类型,需要特殊处理一下blob类型即可

    原回答者GitHub用户agapple

    2023-05-05 10:46:20
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    这个现象可能是由于在 Canal 的数据同步过程中,数据类型发生了变化,从而导致了数据类型不一致的问题。

    具体来说,Canal 在进行数据同步时,会将 MySQL 中的数据转换成 JSON 格式,并使用 Avro 或 Protobuf 进行序列化后写入 Kafka。在这个过程中,Canal 会根据 MySQL 中的数据类型来选择相应的数据类型进行序列化,但是有些数据类型可能无法直接转换成 Avro 或 Protobuf 中的数据类型。比如 MySQL 中的 Decimal 类型,如果在 Canal 中无法正确处理,就会被转换成字符串类型写入 Kafka。

    为了解决这个问题,可以尝试升级 Canal 的版本,或者在 Canal 中使用自定义的数据类型映射规则,将 MySQL 中的 Decimal 类型映射成 Avro 或 Protobuf 中的相应数据类型。同时,也可以在 Kafka 消费端对数据进行处理,将字符串类型的数据转换成相应的数据类型。

    2023-05-04 17:58:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程【第16讲】:Spring Boot 2.0 实战Apache Kafka百万级高并发消息中间件与原理解析 立即下载
MaxCompute技术公开课第四季 之 如何将Kafka数据同步至MaxCompute 立即下载
消息队列kafka介绍 立即下载

相关实验场景

更多