开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC把mysql的表迁移和同步到doris,为什么呢?

Flink CDC把mysql的表迁移和同步到doris,因为doris不支持doris类型,flink-connector-mysql-cdc 把blob类型变成了text类型了,而且blob中的数据同步到doris的text字段之后变成了base64编码了,为什么呢?

展开
收起
真的很搞笑 2023-11-30 15:29:53 93 0
3 条回答
写回答
取消 提交回答
  • 界面展示图片常用的就是解析Blob和base64,这是程序内部做保护了吧,要看下官网数据类型转换,BYTES类型试试,image.png
    https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc%28ZH%29.html,写入的时候你cast as string试试,此回答整理自钉群“Flink CDC 社区”

    2023-11-30 20:38:52
    赞同 展开评论 打赏
  • Flink CDC 在处理 MySQL 的 BINARY/VARBINARY 类型时,会将其转换为 Flink 支持的 RowDataType。对于 BINARY/VARBINARY 类型的字段,Flink CDC 默认会将其转换为 STRING 类型。因此,当您将数据从 MySQL 迁移到 Doris 时,如果 MySQL 中的 BINARY/VARBINARY 类型字段被转换为了 STRING 类型,那么在 Doris 中就会出现类似的问题。

    为了解决这个问题,您可以在 Flink CDC 中显式地指定 BINARY/VARBINARY 类型字段的数据类型为 BYTES。这样,Flink CDC 就会将这些字段正确地转换为 BYTES 类型,而不会将其转换为字符串类型。具体来说,您可以使用以下代码来指定 BINARY/VARBINARY 类型字段的数据类型:

    // 定义表结构
    Table schema = TableSchema.newBuilder()
        .column("id", DataTypes.INT())
        .column("name", DataTypes.STRING())
        .column("data", DataTypes.BYTES()) // 显式指定 BINARY/VARBINARY 类型字段的数据类型为 BYTES
        .build();
    
    // 创建源表
    SourceTable table = SourceTable.forPath(path, schema);
    

    通过这种方式,Flink CDC 就可以正确地处理 BINARY/VARBINARY 类型字段,并将其迁移到 Doris 中。

    2023-11-30 17:51:03
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在 Flink CDC 迁移过程中,当从 MySQL 中读取 BLOB 类型数据并将其同步到 Doris 时,Flink-connector-mysql-cdc 将 BLOB 类型转换为 TEXT 类型,并且将原始二进制数据以 base64 编码的形式存储。这是因为 Doris 不支持 BLOB 类型,而 TEXT 类型可以容纳较大的字符串,因此被作为替代方案。

    以下是一些关于为什么会出现这种现象的原因:

    1. 类型兼容性

      • 在 Flink CDC 连接器中,为了尽可能地保持数据兼容性,它会尝试将源数据库中的不支持的类型映射到目标数据库中可接受的类型。
      • 在这个例子中,由于 Doris 不支持 BLOB 类型,所以连接器选择了 TEXT 类型作为替代。
    2. base64编码

      • 当需要将二进制数据存储在文本字段中时,通常会选择使用 base64 编码,因为它是一种安全的、可逆的编码方式,适合在文本环境中表示二进制数据。
      • 使用 base64 编码可以使二进制数据在传输和存储过程中避免因为特殊字符或编码问题而导致的数据损坏。
    3. 默认行为

      • Flink-connector-mysql-cdc 的设计者可能认为将 BLOB 数据转换为 base64 编码的 TEXT 是一种合理的默认行为,因为它可以在大多数情况下保持数据的完整性。
    2023-11-30 16:22:43
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载