实时计算 Flink版操作报错之当将两个连接器放在同一个作业中时,MySQL作业无法启动,该怎么解决

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
简介: 在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。

问题一:FlinkCDC同步Oracle的同一个库的多个表就会延迟很大


使用同一段代码,只是表名不同,目的是同步同一个库中的多个表。运行在yarn上的。当启动一个表的任务时,基本没什么延迟,并且一切正常,但是当再启动另一个表的同步任务时,就会特别慢,延迟四五分钟这样,哪怕新增一笔数据也是延迟这么久。有时候还会出现数据库连接失败的报错。具体代码如下:public static void main(String[] args) throws Exception {

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

env.enableCheckpointing();

env.getCheckpointConfig().setCheckpointInterval(30000);

env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);

env.getCheckpointConfig().setMinPauseBetweenCheckpoints(30000);

env.getCheckpointConfig().setCheckpointTimeout(60000);

env.getCheckpointConfig().setMaxConcurrentCheckpoints(1);

env.setParallelism(1);

EnvironmentSettings Settings = EnvironmentSettings.newInstance()
        .inStreamingMode()
        .build();
StreamTableEnvironment tableEnv = StreamTableEnvironment.create(env, Settings);
String sourceDDL = "CREATE TABLE TS_XX_source (\n" +
                "ACCT_ID DECIMAL,\n" +
                " SEQ DECIMAL,\n" +
                " CC_TYPE DECIMAL,\n" +
                " CREDIT_LIMIT DECIMAL,\n" +
                " EFF_DATE TIMESTAMP(3),\n" +
                " EXP_DATE TIMESTAMP(3),\n" +
                " SP_ID DECIMAL,\n" +
                " primary key (ACCT_ID) not enforced\n" +
                ") WITH (\n" +
                " 'connector' = 'oracle-cdc',\n" +
                " 'hostname' = '******',\n" +
                " 'port' = '******',\n" +
                " 'username' = '******',\n" +
                " 'password' = '******',\n" +
                " 'database-name' = '******',\n" +
                " 'schema-name' = '******'," +
                " 'table-name' = '这里表名不同',\n" +
                " 'scan.startup.mode' = 'latest-offset'\n" +
                ")";
String sinkDDL = "CREATE TABLE TS_XX_sink (\n" +
                "ACCT_ID DECIMAL,\n" +
                " SEQ DECIMAL,\n" +
                " CC_TYPE DECIMAL,\n" +
                " CREDIT_LIMIT DECIMAL,\n" +
                " EFF_DATE TIMESTAMP(3),\n" +
                " EXP_DATE TIMESTAMP(3),\n" +
                " SP_ID DECIMAL,\n" +
                " primary key (ACCT_ID) not enforced\n" +
                ") WITH (\n" +
                " 'connector' = 'jdbc',\n" +
                " 'driver' = 'oracle.jdbc.driver.OracleDriver',\n" +
                " 'url' = '******',\n" +
                " 'username' = '****',\n" +
                " 'password' = '****',\n" +
                " 'table-name' = '****'\n" +
                ")";
String transformDmlSQL =  "insert into TS_XX_sink select * from TS_XX_source";
tableEnv.executeSql(sourceDDL).print();
tableEnv.executeSql(sinkDDL).print();
tableEnv.executeSql(transformDmlSQL).print();
env.execute("sync-cdc");

}


参考回答:

根据您提供的代码段,以下是一些可能导致同步任务运行缓慢和数据库连接失败的常见问题和建议解决方法:

  1. 并行度设置:在代码中,您将并行度设置为了1 (env.setParallelism(1)),这意味着只有一个并行任务来处理数据。如果您同时启动了多个任务,但并行度仍然为1,可能会导致任务之间的竞争和资源争夺,从而导致某些任务运行缓慢。建议适当调整并行度,以充分利用集群资源,并确保每个任务都可以获得足够的计算能力。
  2. 数据源配置:检查您的数据源配置是否正确,并且与每个表的任务相关。确保使用了正确的连接参数、用户名、密码等信息。还要确保数据库服务器具有足够的性能和资源,以支持同时处理多个任务。
  3. 资源调整:在执行多个任务时,尤其是在相同的数据库上执行时,需要评估和调整任务所需的资源。包括内存、CPU、网络等方面的资源。确保分配给每个任务的资源足够,并避免资源争夺和瓶颈。
  4. 数据库连接池:考虑使用连接池管理数据库连接,以减少连接的创建和销毁开销。连接池可以帮助提供可重用的连接,并对连接进行管理,以支持并发访问和提高性能。
  5. 日志和错误排查:检查任务运行期间的日志文件,查看是否存在其他错误或异常信息,这可能有助于确定导致任务慢和数据库连接失败的具体原因。注意关注资源不足、网络问题、数据库负载过高等可能的问题。
  6. 调整参数:根据具体情况,可以尝试调整 Flink 的相关配置参数,如网络缓冲区大小、堆内存大小等,以优化任务的性能和资源利用。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/575709



问题二:FlinkCDC同步oracle数据的时候报错


报错信息为:Caused by: io.debezium.DebeziumException: Online REDO LOG files or archive log files do not contain the offset scn 17674590. Please perform a new snapshot.


参考回答:

这个错误是由于Flink CDC在同步Oracle数据时,找不到指定的偏移量(offset scn)17674590。为了解决这个问题,你需要执行一个新的快照。

解决方法:

  1. 停止当前的Flink CDC任务。
  2. 删除现有的Oracle数据库快照文件。
  3. 重新创建一个新的Oracle数据库快照。
  4. 重新启动Flink CDC任务。

具体操作步骤如下:

  1. 停止当前的Flink CDC任务。你可以使用以下命令来停止任务:
./bin/flink stop -t <job-id>

<job-id>替换为你的Flink CDC任务的ID。

  1. 删除现有的Oracle数据库快照文件。你需要找到并删除与Flink CDC相关的Oracle数据库快照文件。这些文件通常位于$FLINK_HOME/connectors/jdbc/oracle/snapshots目录下。
  2. 重新创建一个新的Oracle数据库快照。你可以使用以下命令来创建新的快照:
./bin/flink run -p oracle-cdc --from-jars flink-connector-oracle-cdc_2.11-1.13.2.jar /path/to/your/sql/script.sql

/path/to/your/sql/script.sql替换为你的SQL脚本文件路径。这个脚本文件应该包含创建新快照所需的所有SQL语句。

  1. 重新启动Flink CDC任务。你可以使用以下命令来启动任务:
./bin/flink run -t <job-id>

<job-id>替换为你的Flink CDC任务的ID。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/575386



问题三:Flink CDC中flinksql消费kafka的数据写入doris中,没报错,有遇到过么?


Flink CDC中flinksql消费kafka的数据写入doris中,没报错,但是也没有输出,大家有遇到过么?


参考回答:

在使用Flink CDC将Kafka中的数据写入Doris时,如果没有任何错误信息但也没有输出结果,可能的原因和解决方法包括:

  1. 检查源表的元数据:确保从Kafka读取的数据列与目标Doris表的列相匹配。这包括列的数量、名称和类型。
  2. 确认数据是否正确流入Kafka:可以使用如kafka-console-consumer.sh工具来直接查看Kafka中是否有数据。
  3. 检查SQL查询语句:确保你的INSERT INTO或INSERT OVERWRITE SQL语句没有逻辑错误,并且正确的指定了源表和目标表。
  4. 确认数据格式转换:如果你的源数据是JSON或者其他非结构化的数据格式,你需要在插入到Doris之前进行解析和转换。
  5. 查看Flink任务的状态:可以通过Flink Web UI或者命令行界面(CLI)来检查Flink任务的运行状态和日志,看看是否有任何警告或异常。
  6. 开启并查看Flink的日志记录级别:将Flink的日志记录级别设置为DEBUG或TRACE,以获取更详细的日志信息。
  7. 检查Doris表的权限:确认你有足够的权限向该Doris表中写入数据。
  8. 确认网络连接:确保Flink集群能够访问到Kafka和Doris服务器。
  9. 验证Doris实例的健康状况:检查Doris实例是否正常运行,有无磁盘空间不足、负载过高等问题。
  10. 重启Flink作业:有时重启Flink作业可能会解决问题,尤其是在配置更改后。
  11. 升级Flink和相关依赖库版本:如果使用的不是最新版本的Flink和相关库,尝试更新到最新版,因为可能存在已知的问题和修复。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/575333



问题四:Flink CDC 有碰到过mysql的作业无法启动的问题吗?


Flink CDC有碰到过mongo-cdc与mysql-cdc的胖包放一起之后,mysql的作业无法启动的问题吗?

2023-11-30 01:50:48,073 INFO org.apache.flink.runtime.executiongraph.ExecutionGraph [] - Source: t_a_data_develop_task_info[3] -> ConstraintEnforcer[4] -> t_a_data_develop_task_info[4]: Writer -> t_a_data_develop_task_info[4]: Committer (1/1) (e7c156712ee3d1468468a1713462c619_cbc357ccb763df2852fee8c4fc7d55f2_0_8) switched from INITIALIZING to RUNNING.

2023-11-30 01:50:48,079 ERROR org.apache.flink.runtime.source.coordinator.SourceCoordinator [] - Uncaught exception in the SplitEnumerator for Source Source: t_a_data_develop_task_info[3] while handling operator event RequestSplitEvent (host='10.36.0.6') from subtask 0 (#8). Triggering job failover.

org.apache.flink.util.FlinkRuntimeException: Chunk splitting has encountered exception

at com.ververica.cdc.connectors.mysql.source.assigners.MySqlSnapshotSplitAssigner.checkSplitterErrors(MySqlSnapshotSplitAssigner.java:583) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]

at com.ververica.cdc.connectors.mysql.source.assigners.MySqlSnapshotSplitAssigner.getNext(MySqlSnapshotSplitAssigner.java:341) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]


参考回答:

从日志中可以看出,Flink CDC在处理MySQL和MongoDB的CDC数据时遇到了问题。具体来说,当将两个连接器(mongo-cdc和mysql-cdc)放在同一个作业中时,MySQL作业无法启动。这可能是由于这两个连接器之间的兼容性问题导致的。

为了解决这个问题,你可以尝试以下方法:

  1. 确保你的Flink版本与这两个连接器的版本兼容。你可以查看官方文档或GitHub仓库中的已知问题,以了解这两个连接器之间是否存在已知的不兼容问题。
  2. 检查你的作业配置,确保没有设置可能导致冲突的配置参数。例如,你可能需要禁用其中一个连接器,或者调整它们的优先级。
  3. 如果可能的话,尝试将这两个连接器分开运行。这样,你可以分别调试它们的问题,而不是在一个作业中同时使用它们。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/575331



问题五:Flink CDC任务总是报错这个怎么解决哇?


Flink CDC任务总是报错这个怎么解决哇?org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.

at io.debezium.pipeline.ErrorHandler.setProducerThrowable(ErrorHandler.java:55)

at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:239)

at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:61)

at io.debezium.pipeline.ChangeEventSourceCoordinator.streamEvents(ChangeEventSourceCoordinator.java:188)

at io.debezium.pipeline.ChangeEventSourceCoordinator.executeChangeEventSources(ChangeEventSourceCoordinator.java:153)

at io.debezium.pipeline.ChangeEventSourceCoordinator.lambda$start$0(ChangeEventSourceCoordinator.java:118)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:750)

Caused by: java.lang.IllegalStateException: None of log files contains offset SCN: 10611284798911, re-snapshot is required.

at io.debezium.connector.oracle.logminer.LogMinerHelper.setLogFilesForMining(LogMinerHelper.java:102)

at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.initializeRedoLogsForMining(LogMinerStreamingChangeEventSource.java:362)

at io.debezium.connector.oracle.logminer.LogMinerStreamingChangeEventSource.execute(LogMinerStreamingChangeEventSource.java:212)

... 9 more


参考回答:

这个报错表明在Flink CDC任务中使用的Debezium连接器在处理变更事件时发生了异常。

具体报错信息是java.lang.IllegalStateException: None of log files contains offset SCN: 10611284798911, re-snapshot is required.,提示没有找到指定的偏移量(SCN),需要重新进行快照数据的生成。

要解决这个问题,您可以尝试以下方法:

  1. 执行重新快照:根据报错信息建议,可以尝试对数据库进行重新快照。可以停止Flink CDC任务并清除相关的状态信息(如offset状态),然后重新启动任务以生成新的快照。
  2. 检查数据库日志文件:确保数据库的日志文件完整且可用。日志文件可能已经被删除、移动或损坏,导致无法找到指定的偏移量。请检查数据库配置和日志文件路径,确保日志文件存在且正确配置。
  3. 检查Debezium和CDC版本兼容性:确保使用的Debezium版本与您的CDC任务版本兼容,并且支持所需的功能。有时,特定的版本组合可能会导致一些问题。
  4. 调整Debezium配置:根据您的实际情况和需求,可能需要调整Debezium连接器的配置。例如,可以尝试更改redo log的配置、切换到streaming模式等来适应数据库环境的变化。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/575327

相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
28天前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
30 1
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
55 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
50 0
|
7月前
|
消息中间件 关系型数据库 MySQL
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
710 0
|
8月前
|
Java 关系型数据库 MySQL
SpringBoot 通过集成 Flink CDC 来实时追踪 MySql 数据变动
通过详细的步骤和示例代码,您可以在 SpringBoot 项目中成功集成 Flink CDC,并实时追踪 MySQL 数据库的变动。
1911 45
|
8月前
|
消息中间件 关系型数据库 MySQL
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
本教程展示如何使用Flink CDC YAML快速构建从MySQL到Kafka的流式数据集成作业,涵盖整库同步和表结构变更同步。无需编写Java/Scala代码或安装IDE,所有操作在Flink CDC CLI中完成。首先准备Flink Standalone集群和Docker环境(包括MySQL、Kafka和Zookeeper),然后通过配置YAML文件提交任务,实现数据同步。教程还介绍了路由变更、写入多个分区、输出格式设置及上游表名到下游Topic的映射等功能,并提供详细的命令和示例。最后,包含环境清理步骤以确保资源释放。
636 2
基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成
|
2月前
|
存储 分布式计算 数据处理
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
阿里云实时计算Flink团队,全球领先的流计算引擎缔造者,支撑双11万亿级数据处理,推动Apache Flink技术发展。现招募Flink执行引擎、存储引擎、数据通道、平台管控及产品经理人才,地点覆盖北京、杭州、上海。技术深度参与开源核心,打造企业级实时计算解决方案,助力全球企业实现毫秒洞察。
389 0
「48小时极速反馈」阿里云实时计算Flink广招天下英雄
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
11月前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
3310 73
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎

相关产品

  • 实时计算 Flink版
  • 推荐镜像

    更多