开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC数据已经同步,但flink 作业还有异常?

Flink CDC从 mysql 8 到 flink 1.16.2 的 flink-sql 里,数据已经同步,但flink 作业还有异常。java.lang.RuntimeException: One or more fetchers have encountered exception
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcherManager.checkErrors(SplitFetcherManager.java:225)
at org.apache.flink.connector.base.source.reader.SourceReaderBase.getNextFetch(SourceReaderBase.java:169)
at org.apache.flink.connector.base.source.reader.SourceReaderBase.pollNext(SourceReaderBase.java:130)
at org.apache.flink.streaming.api.operators.SourceOperator.emitNext(SourceOperator.java:385)
at org.apache.flink.streaming.runtime.io.StreamTaskSourceInput.emitNext(StreamTaskSourceInput.java:68)
at org.apache.flink.streaming.runtime.io.StreamOneInputProcessor.processInput(StreamOneInputProcessor.java:65)
at org.apache.flink.streaming.runtime.tasks.StreamTask.processInput(StreamTask.java:545)
at org.apache.flink.streaming.runtime.tasks.mailbox.MailboxProcessor.runMailboxLoop(MailboxProcessor.java:231)
at org.apache.flink.streaming.runtime.tasks.StreamTask.runMailboxLoop(StreamTask.java:836)
at org.apache.flink.streaming.runtime.tasks.StreamTask.invoke(StreamTask.java:785)
at org.apache.flink.runtime.taskmanager.Task.runWithSystemExitMonitoring(Task.java:935)
at org.apache.flink.runtime.taskmanager.Task.restoreAndInvoke(Task.java:914)
at org.apache.flink.runtime.taskmanager.Task.doRun(Task.java:728)
at org.apache.flink.runtime.taskmanager.Task.run(Task.java:550)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received unexpected exception while polling the records
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:150)
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:105)
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)
... 1 more
Caused by: org.apache.flink.util.FlinkRuntimeException: Read split MySqlSnapshotSplit{tableId=test.orders, splitId='test.orders:0', splitKeyType=[order_id INT NOT NULL], splitStart=null, splitEnd=null, highWatermark=null} error due to org.apache.flink.util.FlinkRuntimeException: Cannot read the binlog filename and position via 'SHOW MASTER STATUS'. Make sure your server is correctly configured.
at com.ververica.cdc.connectors.mysql.debezium.reader.SnapshotSplitReader.checkReadException(SnapshotSplitReader.java:306)
at com.ververica.cdc.connectors.mysql.debezium.reader.SnapshotSplitReader.pollSplitRecords(SnapshotSplitReader.java:253)
at com.ververica.cdc.connectors.mysql.source.reader.MySqlSplitReader.fetch(MySqlSplitReader.java:76)
at org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:58)
at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:142)
... 6 more
Caused by: io.debezium.DebeziumException: org.apache.flink.util.FlinkRuntimeException: Cannot read the binlog filename and position via 'SHOW MASTER STATUS'. Make sure your server is correctly configured
at com.ververica.cdc.connectors.mysql.debezium.task.MySqlSnapshotSplitReadTask.execute(MySqlSnapshotSplitReadTask.java:120)
at com.ververica.cdc.connectors.mysql.debezium.reader.SnapshotSplitReader.lambda$submitSplit$0(SnapshotSplitReader.java:130)
... 5 more
Caused by: org.apache.flink.util.FlinkRuntimeException: Cannot read the binlog filename and position via 'SHOW MASTER STATUS'. Make sure your server is correctly configured
at com.ververica.cdc.connectors.mysql.debezium.DebeziumUtils.currentBinlogOffset(DebeziumUtils.java:130)
at com.ververica.cdc.connectors.mysql.debezium.task.MySqlSnapshotSplitReadTask.doExecute(MySqlSnapshotSplitReadTask.java:143)
at com.ververica.cdc.connectors.mysql.debezium.task.MySqlSnapshotSplitReadTask.execute(MySqlSnapshotSplitReadTask.java:115)
... 6 more?

展开
收起
真的很搞笑 2023-11-15 09:15:48 237 0
4 条回答
写回答
取消 提交回答
  • 这个异常是由于Flink无法通过'SHOW MASTER STATUS'读取binlog文件名和位置。请确保您的MySQL服务器已正确配置。您可以尝试以下方法来解决这个问题:

    1. 确保MySQL服务器已启用二进制日志(binlog)。可以通过以下命令检查:
    SHOW VARIABLES LIKE 'log_bin';
    

    如果结果为OFF,请尝试将其设置为ON:

    SET GLOBAL log_bin = ON;
    
    1. 确保MySQL用户具有足够的权限来访问二进制日志。可以通过以下命令授权:
    GRANT REPLICATION SLAVE ON *.* TO 'your_mysql_user'@'your_mysql_host';
    
    1. 在Flink SQL中,确保使用正确的用户名、密码和主机名连接到MySQL源。例如:
    CREATE TABLE your_table (
        ...
    ) WITH (
        'connector' = 'mysql-cdc',
        'hostname' = 'your_mysql_host',
        'port' = 'your_mysql_port',
        'username' = 'your_mysql_user',
        'password' = 'your_mysql_password',
        ...
    );
    
    1. 如果问题仍然存在,请检查MySQL服务器的配置文件(如my.cnf或my.ini),确保log_bin设置正确,并重启MySQL服务器。
    2023-11-15 14:36:21
    赞同 1 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这是一个 Flink CDC MySQL Source 插件的问题,说明 MySQL 数据库未能正常连接到 binlog,建议您可以尝试以下操作:
    检查 MySQL Server 是否正确配置为 binlog 形式并允许用户执行 SHOW MASTER STATUS 命令。

    2023-11-15 14:26:26
    赞同 展开评论 打赏
  • 这段异常堆栈显示,Flink CDC未能正确地从MySQL 8 中读取binlog记录,并且抛出了一个异常。异常的原因可能是Flink CDC在尝试执行“SHOW MASTER STATUS”命令时遇到了错误,该命令用于获取当前binlog的位置信息。请确保您的MySQL服务器已正确配置,并且具有足够的权限来执行该命令。可以尝试以下方法尝试解决这个问题:

    1. 检查MySQL服务器的用户帐户是否具有读取binlog的权限。如果没有,需要为该用户添加相应的权限。
    2. 检查MySQL服务器的配置文件,确保“server-id”配置项已正确设置。如果未设置,可能导致Flink CDC无法识别正确的binlog文件。
    3. 如果您的MySQL服务器运行在一个容器中,确保该容器能够访问主机的网络,并且可以从主机网络访问MySQL服务器。
    4. 在Flink SQL作业中,确保使用了正确的MySQL连接URL,并且指定了正确的端口号和用户名/密码。
    2023-11-15 10:17:59
    赞同 展开评论 打赏
  • 从MySQL到Flink 1.16.2 Flink-SQL的数据同步工作出现了一个异常。下面是异常的具体描述:

    Caused by: java.lang.RuntimeException: SplitFetcher thread 0 received unexpected exception while polling the records.
    

    这个异常意味着一个Fetcher线程在获取记录的过程中收到了一个意外的异常。Fetcher是用于读取并传输数据的一个组件,它由多个线程组成,每个线程负责读取一部分数据并将其传输给上游节点。
    这个异常的具体原因可能是因为数据源的问题或者读取器的问题。我们可以先检查数据源是否健康,比如查看MySQL服务器的状态以及相应的表状态,确认没有任何异常的情况。
    如果数据源没问题,我们再检查读取器的相关配置,如fetchSizemaxConcurrentRequests等,是否设置得合适。还可以考虑添加setRuntimeMetricEnabled(true)来开启实时统计信息,观察数据的读取速度以及耗时情况,确认是否有异常情况。

    2023-11-15 09:58:00
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载