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

本文涉及的产品
实时计算 Flink 版,5000CU*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轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
7天前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
|
21天前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
|
25天前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
129 1
|
1月前
|
SQL JavaScript 关系型数据库
Node.js 连接 MySQL
10月更文挑战第9天
19 0
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
22 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
77 1
|
17天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
59 2

相关产品

  • 实时计算 Flink版