Flink CDC产品常见问题之pg cdc程序已经停了但是执行删不掉如何解决

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。

问题一:Flink CDC里pg cdc程序已经停了,但是执行删不掉什么回事?


Flink CDC里pg cdc程序已经停了,但是执行 pg_drop_replication_slot('flink')删不掉是怎么回事?CREATE_REPLICATION_SLOT "flink" LOGICAL pgoutp。ut;


参考回答:

在 PostgreSQL 中,当你尝试删除一个 CDC (Change Data Capture) 复制槽(replication slot)时,如果发现即使该CDC程序已经停止运行,仍然无法通过 pg_drop_replication_slot('flink') 删除复制槽,可能有以下原因:

  1. CDC程序仍在连接:确保负责读取该复制槽的 Flink CDC 进程已完全终止,并且没有其他进程正在使用这个复制槽。即使 Flink CDC 任务被停了,也可能存在残留的连接或者后台线程尚未完全退出。
  2. 保留活动事务(Active Transactions)
  • 如果 Flink CDC 在关闭前有一个未提交或回滚的事务,该复制槽可能会因为仍有活动事务而不能被删除。
  • 需要检查并清理任何与该槽相关的遗留事务,例如通过查看 pg_stat_activity 系统视图来确定是否有任何活动事务关联到该槽。
  1. 复制槽中有未确认的更改
  • 如果Flink CDC在停止之前还有未处理的数据,PostgreSQL会保留复制槽直到所有更改被下游消费者确认。
  • 可以先尝试查询 pg_replication_slots 视图,查看槽的状态和滞后信息,如果看到 confirmed_flush_lsn 小于 restart_lsn 或者 wal_status 显示为 active,那么需要确保所有的数据都已经被正确处理并确认。
  1. 持久化槽(Permanent Slots)
  • 默认情况下创建的是临时逻辑复制槽,当不再使用时可以自动删除。但如果你创建的是持久化的逻辑复制槽,那么必须手动删除它。
  • 若要强制删除持久化槽,你需要在 pg_drop_replication_slot 之后加上 FORCE 参数,即执行:pg_drop_replication_slot('flink' , FORCE);

请务必谨慎操作,尤其是在生产环境中,避免造成数据丢失或一致性问题。在尝试强制删除槽之前,请确保确实没有进程依赖此槽以及槽内数据已被妥善处理。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/590896


问题二:用Flink CDC3.0整库同步mysql到starRock提交任务异常,请问是什么原因?


用Flink CDC3.0整库同步mysql到starRock提交任务异常,请问是什么原因?


参考回答:

根据您提供的信息,Flink CDC 3.0在将MySQL整库同步到StarRock时出现异常。这可能是由于多种原因导致的,以下是一些建议供您参考:

  1. 检查MySQL和StarRock的连接配置是否正确。确保数据库地址、端口、用户名和密码等信息正确无误。
  2. 检查MySQL和StarRock的数据表结构是否一致。如果数据表结构不一致,可能会导致同步过程中出现问题。
  3. 检查Flink CDC 3.0的配置参数是否正确。例如,检查源数据库和目标数据库的类型、版本等。
  4. 查看Flink CDC 3.0的日志文件,以获取更多关于异常的详细信息。日志文件中可能包含错误消息、堆栈跟踪等,这些信息有助于诊断问题。
  5. 如果问题仍然存在,可以尝试使用其他工具或方法进行数据同步,例如使用Spark SQL或其他ETL工具。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/590949


问题三:flink cdc 集群的mysql要怎么写呢?


flink cdc 集群的mysql要怎么写呢?mysql集群存储节点:

10.85.25.201 3213-3216

10.85.25.202 3213-3216

10.85.25.203 3213-3216

10.85.25.204 3213-3216

WITH (

'connector' = 'mysql-cdc',

'hostname' = '??',

'port' = '??',

'username' = 'test',

'password' = 'test',

'database-name' = 'SETL_DB',

'table-name' = 'acct');


参考回答:

在Flink CDC集群中,要配置MySQL集群存储节点,需要将hostnameport参数设置为相应的MySQL节点地址和端口。以下是配置示例:

WITH (
  'connector' = 'mysql-cdc',
  'hostname' = '10.85.25.201',
  'port' = '3213',
  'username' = 'test',
  'password' = 'test',
  'database-name' = 'SETL_DB',
  'table-name' = 'acct'
)

请根据实际情况替换hostnameport的值。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/591620


问题四:使用FLink CDC 3.0 ,将MySQL数据同步到SR遇到一些问题


运行环境

MySQL:5.7x

StarRocks:2.5

FLink:1.18.0

FLink-CDC:3.0

配置文件如下

source:
  type: mysql
  hostname: xxx
  port: 3306
  username: xxx
  password: xxx
  tables: xxx_db.\.*
  server-id: 1
  server-time-zone: Asia/Shanghai
sink:
  type: starrocks
  name: StarRocks Sink
  jdbc-url: jdbc:mysql://xxx:9030
  load-url: xxx:8030
  username: root
  password: ""
  table.create.properties.replication_num: 1
pipeline:
  name: Sync MySQL Database to StarRocks
  parallelism: 1

DDL问题:

  1. 添加字段,可以同步成功,但任务会报错,必须取消任务重启后才能恢复正常
  2. 删除字段,可以同步成功,问题同上
  3. 修改字段类型,不会同步
    问题1的错误日志片段如下:
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: temp of AddColumnEvent is already existed
 at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:396)
 at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:2073)
 at com.ververica.cdc.runtime.operators.schema.SchemaOperator.sendRequestToCoordinator(SchemaOperator.java:123)
 ... 30 more
Caused by: java.lang.IllegalArgumentException: temp of AddColumnEvent is already existed
 at com.ververica.cdc.common.utils.SchemaUtils.applyAddColumnEvent(SchemaUtils.java:73)
 at com.ververica.cdc.common.utils.SchemaUtils.applySchemaChangeEvent(SchemaUtils.java:53)
 at com.ververica.cdc.runtime.operators.schema.coordinator.SchemaManager.applySchemaChange(SchemaManager.java:113)
 at com.ververica.cdc.runtime.operators.schema.coordinator.SchemaRegistryRequestHandler.handleSchemaChangeRequest(SchemaRegistryRequestHandler.java:102)
 at com.ververica.cdc.runtime.operators.schema.coordinator.SchemaRegistry.handleCoordinationRequest(SchemaRegistry.java:157)
 at org.apache.flink.runtime.scheduler.DefaultOperatorCoordinatorHandler.deliverCoordinationRequestToCoordinator(DefaultOperatorCoordinatorHandler.java:143)
 at org.apache.flink.runtime.scheduler.SchedulerBase.deliverCoordinationRequestToCoordinator(SchedulerBase.java:1070)
 at org.apache.flink.runtime.jobmaster.JobMaster.sendRequestToCoordinator(JobMaster.java:616)
 at jdk.internal.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.base/java.lang.reflect.Method.invoke(Method.java:568)
 at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.lambda$handleRpcInvocation$1(PekkoRpcActor.java:309)
 at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:83)
 at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleRpcInvocation(PekkoRpcActor.java:307)
 at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleRpcMessage(PekkoRpcActor.java:222)
 at org.apache.flink.runtime.rpc.pekko.FencedPekkoRpcActor.handleRpcMessage(FencedPekkoRpcActor.java:85)
 at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleMessage(PekkoRpcActor.java:168)
 at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:33)
 at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:29)
 at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)

DML问题:

  1. 取消同步任务,在MySQL上删除一条数据,然后重启同步任务,删除的数据无法同步在SR上删除;但同样的操作,添加数据可以同步


参考回答:

这个问题可能是由于Flink CDC在处理删除字段时出现了问题。你可以尝试以下方法解决这个问题:

  1. 检查FLink CDC的版本,确保它是最新的。如果不是,请升级到最新版本,看看问题是否得到解决。
  2. 如果问题仍然存在,你可以尝试在FLink CDC的GitHub仓库中提交一个issue,详细描述你遇到的问题。这样,FLink团队可能会关注这个问题,并在后续版本中修复它。
  3. 作为临时解决方案,你可以尝试在同步任务中使用DELETE操作符,而不是直接删除数据。这样,FLink CDC应该能够正确处理删除操作。例如:
DELETE FROM your_table WHERE some_condition;


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/591687


问题五:Flink CDC里写数据到hdfs的hudi表,为什么看不到数据文件啊?


Flink CDC里写数据到hdfs的hudi表,为什么看不到数据文件啊?hudi写数据前需要建表吗?算子页面上都是0%,下面字节传输和接受是有值的,这是什么原因啊?


参考回答:

你这个没有压缩计划生成,一只没有执行compact肯定不会有parquet文件的。再看下配置:checkpoint的时长,还有compact的策略等等。


关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/592235

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
消息中间件 Java Kafka
Flink CDC 在外部查询某个 job 中的表数据
【2月更文挑战第27天】Flink CDC 在外部查询某个 job 中的表数据
44 5
|
1月前
|
API 数据库 流计算
有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
【2月更文挑战第27天】有大佬知道在使用flink cdc实现数据同步,如何实现如果服务停止了对数据源表的某个数据进行删除操作,重启服务之后目标表能进行对源表删除的数据进行删除吗?
52 3
|
30天前
|
SQL 存储 API
阿里云实时计算Flink的产品化思考与实践【下】
本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。
110834 99
阿里云实时计算Flink的产品化思考与实践【下】
|
1月前
|
消息中间件 Kafka 流计算
如果有多个版本的Flink CDC在同一环境中运行,可能会导致Debezium版本冲突
【2月更文挑战第30天】如果有多个版本的Flink CDC在同一环境中运行,可能会导致Debezium版本冲突
20 2
|
1月前
|
消息中间件 API Apache
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
本文整理自阿里云开源大数据平台徐榜江 (雪尽),关于阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会。
1416 1
官宣|阿里巴巴捐赠的 Flink CDC 项目正式加入 Apache 基金会
|
1月前
|
Java 关系型数据库 MySQL
Flink CDC有见这个报错不?
【2月更文挑战第29天】Flink CDC有见这个报错不?
22 2
|
2月前
|
消息中间件 Kafka Apache
Apache Flink 是一个开源的分布式流处理框架
Apache Flink 是一个开源的分布式流处理框架
482 5
|
1月前
|
SQL Java API
官宣|Apache Flink 1.19 发布公告
Apache Flink PMC(项目管理委员)很高兴地宣布发布 Apache Flink 1.19.0。
1355 1
官宣|Apache Flink 1.19 发布公告
|
1月前
|
SQL Apache 流计算
Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
【2月更文挑战第25天】Apache Flink官方网站提供了关于如何使用Docker进行Flink CDC测试的文档
143 3
|
1月前
|
XML Java Apache
Apache Flink自定义 logback xml配置
Apache Flink自定义 logback xml配置
152 0

相关产品

  • 实时计算 Flink版