Flink CDC 2.2升级到2.3,各位大佬是咋升级的啊,cdc2.2模式INITIAL下ck?

Flink CDC 2.2升级到2.3,各位大佬是咋升级的啊,cdc2.2模式INITIAL下ck,然后2.3恢复会报错,2.3没有INITIAL了?https://github.com/ververica/flink-cdc-connectors/issues/1757

展开
收起
真的很搞笑 2023-05-29 14:28:08 96 分享 版权
阿里云 AI 助理回答

Flink CDC 2.2 升级到 2.3 的问题分析与解决方案

在将 Flink CDC 从 2.2 版本升级到 2.3 版本时,您提到在 2.2 中使用 INITIAL 模式进行 Checkpoint(CK),然后在 2.3 中恢复时会报错,并且发现 2.3 中不再支持 INITIAL 模式。以下是针对该问题的详细分析和解决方案。


1. 问题背景

Flink CDC 2.3 对启动模式进行了调整,移除了 INITIAL 模式。这意味着在 2.3 中无法直接恢复基于 INITIAL 模式的 Checkpoint 数据。这种变更可能导致以下问题: - 如果您的作业在 2.2 中以 INITIAL 模式运行并生成了 Checkpoint,在升级到 2.3 后尝试恢复时,可能会因为模式不兼容而报错。 - 报错的原因是 2.3 不再支持 INITIAL 模式,导致无法正确解析 Checkpoint 中的元数据。


2. 解决方案

2.1 确认当前启动模式

在升级前,请确认您的作业是否依赖 INITIAL 模式。如果确实使用了 INITIAL 模式,建议按照以下步骤进行迁移:

  1. 备份现有 Checkpoint 数据
    在升级之前,确保对现有的 Checkpoint 数据进行完整备份,以便在升级失败时可以回滚。

  2. 切换到兼容的启动模式
    在 2.3 中,推荐使用以下启动模式替代 INITIAL 模式:

    • earliest-offset:从最早的 Binlog 位点开始读取。
    • latest-offset:从最新的 Binlog 位点开始读取。
    • specific-offset:从指定的 Binlog 位点开始读取。
    • timestamp:从指定的时间戳开始读取 Binlog 事件。

    示例配置:

    CREATE TABLE mysql_source (
       ...
    ) WITH (
       'connector' = 'mysql-cdc',
       'scan.startup.mode' = 'earliest-offset' -- 替代 INITIAL 模式
    );
    
  3. 重新生成快照
    如果必须保留全量数据,可以在升级后手动触发一次全量快照(Snapshot)。具体操作如下:

    • 停止当前作业。
    • 修改配置为 earliest-offset 或其他兼容模式。
    • 重新启动作业,触发全量快照。
2.2 调整 Checkpoint 配置

在升级过程中,确保 Checkpoint 配置与新版本兼容。例如: - 确保 Checkpoint 的存储路径一致。 - 检查是否有依赖的第三方库冲突,尤其是 flink-sql-connectorflink-connector 的版本差异。

2.3 处理潜在的依赖冲突

Flink CDC 2.3 可能引入了新的依赖或移除了旧的依赖。为了避免依赖冲突,请执行以下操作: 1. 检查依赖版本
确保使用的 flink-sql-connectorflink-connector 版本与 Flink 引擎版本匹配。例如:

<dependency>
    <groupId>com.ververica</groupId>
    <artifactId>flink-connector-mysql-cdc</artifactId>
    <version>2.3.x</version>
</dependency>
  1. 排除冲突依赖
    如果存在冲突的依赖(如 org.codehaus.janino),可以通过以下方式解决:
    • 在运行参数中添加 classloader.parent-first-patterns.additional 配置:
      classloader.parent-first-patterns.additional: org.codehaus.janino
      
    • 使用 provided 作用域声明 Flink 相关依赖:
      <dependency>
       <groupId>org.apache.flink</groupId>
       <artifactId>flink-streaming-java_2.11</artifactId>
       <scope>provided</scope>
      </dependency>
      

3. 注意事项

  • 避免直接升级生产环境
    在正式升级前,建议在测试环境中验证升级流程,确保新版本的兼容性和稳定性。

  • 关注 MySQL Binlog 配置
    如果您的作业需要长时间运行,请确保 MySQL 的 Binlog 保留时间足够长,避免因 Binlog 文件被清理导致数据丢失。例如:

    SET GLOBAL expire_logs_days = 7;
    
  • 检查主键配置
    在 2.3 中,启用增量快照功能(scan.incremental.snapshot.enabled)时,表必须定义主键。如果表缺少主键,可能会导致以下错误:

    The primary key is necessary when enable 'Key: 'scan.incremental.snapshot.enabled'
    

    解决方法是为表添加主键,或者禁用增量快照功能。


4. 总结

通过以上步骤,您可以顺利完成 Flink CDC 从 2.2 到 2.3 的升级。关键点包括: 1. 替换 INITIAL 模式为兼容的启动模式(如 earliest-offset)。 2. 调整 Checkpoint 配置,确保与新版本兼容。 3. 解决潜在的依赖冲突,避免运行时异常。

如果您在升级过程中遇到其他问题,可以参考官方文档或联系技术支持获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

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

大数据领域前沿技术分享与交流,这里不止有技术干货、学习心得、企业实践、社区活动,还有未来。

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