实时计算 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学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
相关文章
|
1月前
|
存储 分布式计算 流计算
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
本文介绍了阿里云开源大数据团队在实时计算领域的最新成果——向量化流计算引擎Flash。文章主要内容包括:Apache Flink 成为业界流计算标准、Flash 核心技术解读、性能测试数据以及在阿里巴巴集团的落地效果。Flash 是一款完全兼容 Apache Flink 的新一代流计算引擎,通过向量化技术和 C++ 实现,大幅提升了性能和成本效益。
1163 73
实时计算 Flash – 兼容 Flink 的新一代向量化流计算引擎
|
2月前
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
147 0
|
2月前
|
消息中间件 关系型数据库 MySQL
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
大数据-117 - Flink DataStream Sink 案例:写出到MySQL、写出到Kafka
185 0
zdl
|
1月前
|
消息中间件 运维 大数据
大数据实时计算产品的对比测评:实时计算Flink版 VS 自建Flink集群
本文介绍了实时计算Flink版与自建Flink集群的对比,涵盖部署成本、性能表现、易用性和企业级能力等方面。实时计算Flink版作为全托管服务,显著降低了运维成本,提供了强大的集成能力和弹性扩展,特别适合中小型团队和业务波动大的场景。文中还提出了改进建议,并探讨了与其他产品的联动可能性。总结指出,实时计算Flink版在简化运维、降低成本和提升易用性方面表现出色,是大数据实时计算的优选方案。
zdl
155 56
|
22天前
|
关系型数据库 MySQL 网络安全
DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)
“Access denied for user ''@'ip' (using password: YES)”错误通常与MySQL用户权限配置或网络设置有关。通过检查并正确配置用户名和密码、用户权限、MySQL配置文件及防火墙设置,可以有效解决此问题。希望本文能帮助您成功连接MySQL数据库。
34 4
|
1月前
|
SQL 运维 数据可视化
阿里云实时计算Flink版产品体验测评
阿里云实时计算Flink基于Apache Flink构建,提供一站式实时大数据分析平台,支持端到端亚秒级实时数据分析,适用于实时大屏、实时报表、实时ETL和风控监测等场景,具备高性价比、开发效率、运维管理和企业安全等优势。
|
1月前
|
安全 关系型数据库 MySQL
【赵渝强老师】MySQL的连接方式
本文介绍了MySQL数据库服务器启动后的三种连接方式:本地连接、远程连接和安全连接。详细步骤包括使用root用户登录、修改密码、创建新用户、授权及配置SSL等。并附有视频讲解,帮助读者更好地理解和操作。
121 1
|
2月前
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
152 6
|
2月前
|
SQL JavaScript 关系型数据库
node博客小项目:接口开发、连接mysql数据库
【10月更文挑战第14天】node博客小项目:接口开发、连接mysql数据库
|
2月前
|
运维 搜索推荐 数据安全/隐私保护
阿里云实时计算Flink版测评报告
阿里云实时计算Flink版在用户行为分析与标签画像场景中表现出色,通过实时处理电商平台用户行为数据,生成用户兴趣偏好和标签,提升推荐系统效率。该服务具备高稳定性、低延迟、高吞吐量,支持按需计费,显著降低运维成本,提高开发效率。
82 1

相关产品

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

    更多
    下一篇
    DataWorks