Flink cdc debug调试动态变更表结构

本文详细描述了FlinkCDC3.0动态变更表结构过程中遇到的问题,如缺失jar包引发的异常、JsonFactory异常和版本不匹配的NoSuchMethodError,以及如何进行代码拉取、本地打包、配置启动参数、日志设置和问题排查。

前言

接着上一篇Flink cdc3.0动态变更表结构——源码解析,cdc debug部分官方没有特别说明,尝试踩了一些坑, 这里记录下。

调试流程

1. 拉取代码本地打包

通过 github 拉取3.0.0 以上版本,本地maven打包 mvn clean package -DskipTests

2. 配置启动参数

搜索启动类CliFrontend,修改运行配置。
在这里插入图片描述
需要配置环境变量FLINK_HOMEpipeline connector依赖包flink-dist 包,以及指定配置文件,--use-mini-cluster true 代表使用 local 集群。
在这里插入图片描述
mysql-to-doris.yaml

################################################################################
# Description: Sync MySQL all tables to Doris
################################################################################
source:
  type: mysql
  hostname: localhost
  port: 3306
  username: root
  password: 123456
  tables: app_db.\.*
  server-id: 5400-5404
  server-time-zone: UTC

sink:
  type: doris
  fenodes: 127.0.0.1:8030
  username: root
  password: ""
  table.create.properties.light_schema_change: true
  table.create.properties.replication_num: 1

### Flink CDC 处理表结构变更方案 在Flink CDC框架中,处理表结构变更是通过引入特定类型的事件来完成的。每当检测到源数据库中的表结构发生变化时,会生成`SchemaChangeEvent`事件[^3]。 #### SchemaChangeEvent 和 DataChangeEvent - `SchemaChangeEvent`: 此类事件表示表结构发生了改变,比如新增列、删除列或修改现有列属性。 - `DataChangeEvent`: 这种事件则用于描述具体的数据变动情况,如插入、更新或删除记录。 为了适应这些变化,在Flink应用内部设置了专门负责处理模式变更的操作符(Operator),即`SchemaOperator`。当接收到`SchemaChangeEvent`之后,该操作符能够动态调整其后的逻辑以匹配最新的表结构定义。 以下是简化版的代码片段展示如何接收并响应schema变更事件: ```java public class SchemaChangeHandler { private final Map<String, TableSchema> tableSchemas; public void handle(SchemaChangeEvent event) { String tableName = event.getTableName(); switch (event.getAction()) { case ADD_COLUMN: addColumnToTableSchema(tableName, event.getColumn()); break; case DROP_COLUMN: dropColumnFromTableSchema(tableName, event.getColumn().getName()); break; default: throw new UnsupportedOperationException("Unsupported action " + event.getAction()); } } private void addColumnToTableSchema(String tableName, Column column) { // 更新tableSchemas映射关系,加入新的字段信息 System.out.println("Adding column to schema of table " + tableName); } private void dropColumnFromTableSchema(String tableName, String columnName) { // 从tableSchemas移除指定名称的字段 System.out.println("Dropping column from schema of table " + tableName); } } ``` 此段Java代码展示了基本的处理器方法,它可以根据不同的动作类型执行相应的操作来维护内存中的表格模式状态。实际部署时还需要考虑更多细节,例如并发控制以及与其他组件之间的协调工作等。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值