Flink CDC里所以确定是上下游schema一致吗?

Flink CDC里所以确定是上下游schema一致吗?48123ae19ae024b4b5228cd1c0cfc3a3.png

展开
收起
小小鹿鹿鹿 2024-04-15 20:11:16 64 分享 版权
阿里云 AI 助理回答

在Flink CDC中,上下游Schema的一致性并不是绝对的,而是取决于具体的配置和下游系统的支持能力。以下是对上下游Schema一致性的详细分析:


1. 全量阶段与增量阶段的Schema一致性

在Flink CDC作业中,Schema的同步分为两个阶段: - 全量阶段:在作业启动时,Flink CDC会通过SELECT语句读取全量数据,并记录Binlog位点。此时,Schema是固定的,基于作业启动时的表结构。 - 增量阶段:从Binlog中读取增量数据时,Flink CDC支持实时同步表结构变更(如添加列、删除列、重命名列等),但具体行为取决于下游系统的支持能力和配置。

重要提醒:如果在全量阶段发生Schema变更(如新增列),可能会导致作业失败(如抛出NullPointerException)。解决方法是停止作业并删除下游表后,以无状态方式重新启动作业。


2. 下游系统对Schema变更的支持

不同的下游系统对Schema变更的支持能力不同,这直接影响了上下游Schema的一致性: - 支持Schema变更的系统(如Kafka): - 添加列:会在当前Schema末尾添加对应的列,并同步新增列的数据。 - 删除列:不会直接删除列,而是将该列的数据填充为NULL。 - 重命名列:被看作添加列和删除列,在Schema末尾添加新列,并将原列数据填充为NULL。 - 列类型变更:对于支持列类型变更的下游系统(如Kafka),可以同步列类型变更;但对于不支持列类型变更的系统(如Hologres),需要使用宽类型映射策略。

  • 不支持Schema变更的系统(如Hologres):
    • 列类型变更:Hologres不支持列类型变更,因此需要在作业启动时开启宽容模式(LENIENTEVOLVE),并在下游建立更宽泛的表结构以兼容可能的Schema变更。

3. Schema变更行为的配置

Flink CDC提供了多种Schema变更行为配置,用户可以根据需求选择适合的模式: - LENIENT模式(默认): - 不发送Drop tableTruncate table变更。 - 列重命名时,改为发送更改列类型和新增列两个事件,原有列不删除,新增列为nullable。 - 删除列时,改为发送更改列类型事件,将对应字段类型变为nullable。 - 新增列时,字段类型会变为nullable

  • EVOLVE模式

    • 数据摄入YAML作业会将所有Schema变更应用于目标端。
    • 如果Schema变更在目标端应用失败,作业会抛出异常并触发故障重启。
    • 警告:在未删除结果表的情况下无状态重启可能导致上游数据与结果表结构不一致,需手动调整下游表结构。
  • EXCEPTION模式

    • 不允许任何Schema变更行为。
    • 当目标端不支持处理Schema变更时,可以使用此模式。收到Schema变更事件时,作业会抛出异常。

4. CTAS语句与Schema变更同步

通过CREATE TABLE AS(CTAS)语句,可以在实时同步数据的同时同步表结构变更。但需要注意以下限制: - 对于不支持列类型变更的下游系统(如Hologres),CTAS无法支持列类型变更,需使用宽容模式同步。 - 暂不支持同步以下Schema变更: - 主键或索引等约束的变更。 - 非空列的删除。 - 从NOT NULL转为NULLABLE的变更。

重要提醒:如果遇到不支持的Schema变更,需要手动删除下游结果表并重新启动CTAS作业。


5. 总结与建议

  • 上下游Schema的一致性依赖于下游系统的支持能力和Flink CDC的配置。
  • 在使用Flink CDC时,建议根据下游系统的特性选择合适的Schema变更行为模式(如LENIENTEVOLVE)。
  • 对于不支持Schema变更的下游系统(如Hologres),可以通过宽类型映射策略实现宽容的列类型变更支持。
  • 如果在全量阶段发生Schema变更,需停止作业并删除下游表后,以无状态方式重新启动作业。

通过以上配置和注意事项,可以最大程度地保证上下游Schema的一致性,同时避免因Schema变更导致的作业失败。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

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

还有其他疑问?
咨询AI助理