实时计算 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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
MySQL C连接与使用
【9月更文挑战第21天】在 MySQL 中,可以通过 C 语言连接和操作数据库。首先需安装 MySQL 服务器及 C 开发库,然后在程序中包含必要头文件,初始化连接对象,并使用实际参数建立连接。执行 SQL 语句时,需替换表名等变量,获取并遍历结果集。最后,释放资源并关闭连接。过程中应注意错误处理、内存管理和安全性,以及性能优化。此方式适用于高效数据存储和检索的应用程序。
|
4天前
|
SQL JavaScript 关系型数据库
Node服务连接Mysql数据库
本文介绍了如何在Node服务中连接MySQL数据库,并实现心跳包连接机制。
15 0
Node服务连接Mysql数据库
|
2天前
|
关系型数据库 MySQL 数据库
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
docker启动mysql多实例连接报错Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’
13 0
|
30天前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之使用CTAS同步MySQL到Hologres时出现的时区差异,该如何解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
30天前
|
SQL 存储 关系型数据库
实时计算 Flink版产品使用问题之同步MySQL多张表的过程中,内存释放依赖于什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
4天前
|
运维 数据处理 数据安全/隐私保护
阿里云实时计算Flink版测评报告
该测评报告详细介绍了阿里云实时计算Flink版在用户行为分析与标签画像中的应用实践,展示了其毫秒级的数据处理能力和高效的开发流程。报告还全面评测了该服务在稳定性、性能、开发运维及安全性方面的卓越表现,并对比自建Flink集群的优势。最后,报告评估了其成本效益,强调了其灵活扩展性和高投资回报率,适合各类实时数据处理需求。
|
2月前
|
存储 监控 大数据
阿里云实时计算Flink在多行业的应用和实践
本文整理自 Flink Forward Asia 2023 中闭门会的分享。主要分享实时计算在各行业的应用实践,对回归实时计算的重点场景进行介绍以及企业如何使用实时计算技术,并且提供一些在技术架构上的参考建议。
722 7
阿里云实时计算Flink在多行业的应用和实践
|
1月前
|
SQL 消息中间件 Kafka
实时计算 Flink版产品使用问题之如何在EMR-Flink的Flink SOL中针对source表单独设置并行度
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
存储 运维 监控
阿里云实时计算Flink版的评测
阿里云实时计算Flink版的评测
36 15
|
4天前
|
运维 分布式计算 监控
评测报告:阿里云实时计算Flink版
本评测主要针对阿里云实时计算Flink版在用户行为分析中的应用。作为一名数据分析师,我利用该服务处理了大量日志数据,包括用户点击流和登录行为。Flink的强大实时处理能力让我能够迅速洞察用户行为变化,及时调整营销策略。此外,其卓越的性能和稳定性显著降低了运维负担,提升了项目效率。产品文档详尽且易于理解,但建议增加故障排查示例。

相关产品

  • 实时计算 Flink版