Flink CDC里使用 'scan.startup.mode' = 'earliest-offset'
每次重启都会失败报错:One or more fetchers have encountered exception
SplitFetcher thread 0 received unexpected exception while polling the records
The connector is trying to read binlog starting at Struct{version=1.6.4.Final,connector=mysql,name=mysql_binlog_source这是什么原因?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的错误信息和配置参数 'scan.startup.mode' = 'earliest-offset'
,可以判断问题与 Flink CDC 在读取 MySQL Binlog 数据时的启动模式有关。具体来说,Flink CDC 在使用 earliest-offset
模式时,会尝试从最早的 Binlog 位点开始读取数据。然而,如果在作业重启时,Binlog 的最早位点已经过期或不可用(例如,MySQL 的 Binlog 文件被清理),就会导致读取失败并抛出类似以下错误:
One or more fetchers have encountered exception
SplitFetcher thread 0 received unexpected exception while polling the records
The connector is trying to read binlog starting at Struct{version=1.6.4.Final,connector=mysql,name=mysql_binlog_source
这种问题通常与以下几个因素相关:
MySQL 的 Binlog 文件默认会在一定时间后被清理。为了确保 Flink CDC 能够从最早的 Binlog 位点读取数据,需要调整 MySQL 的 Binlog 配置,延长 Binlog 文件的保留时间。
my.cnf
)中的以下参数:
expire_logs_days = 7 # 设置 Binlog 文件保留天数为 7 天
max_binlog_size = 100M # 设置单个 Binlog 文件的最大大小
通过延长 Binlog 文件的保留时间,可以避免因 Binlog 文件被清理而导致的读取失败。
在使用 earliest-offset
、specific-offset
或 timestamp
启动模式时,如果在指定的 Binlog 位点到作业启动的时间之间,表结构发生了变更(如新增列、删除列或修改列类型),Flink CDC 会因为无法解析 Binlog 数据而报错。
initial
启动模式进行全量同步后再切换到增量模式。如果 earliest-offset
模式不适合您的场景,可以考虑使用其他启动模式来避免类似问题:
latest-offset
:从最新的 Binlog 位点开始读取,适用于只需要消费最新数据的场景。specific-offset
:从指定的 Binlog 位点开始读取,适用于需要从特定位置恢复的场景。timestamp
:从指定的时间戳开始读取,适用于需要从某个时间点恢复的场景。示例配置:
CREATE TABLE mysql_source (
...
) WITH (
'connector' = 'mysql-cdc',
'scan.startup.mode' = 'latest-offset' -- 从最新的 Binlog 位点开始读取
);
如果作业是从 Checkpoint 或 Savepoint 恢复的,需要确保存储的位点仍然有效。如果存储的位点已经过期或不可用,可以通过以下方式解决:
scan.startup.mode
和相关参数(如 scan.startup.specific-offset.file
和 scan.startup.specific-offset.pos
)。在某些情况下,Flink CDC 的资源分配可能不足以处理大量的 Binlog 数据。可以通过开启自动调优功能来动态调整资源分配,提高作业的稳定性。
Active
模式。上述问题的根本原因可能是 Binlog 文件被清理、表结构变更或 Checkpoint/Savepoint 中存储的位点无效。针对这些问题,您可以采取以下措施:
latest-offset
或 specific-offset
)。通过以上步骤,您可以有效解决 Flink CDC 在使用 earliest-offset
模式时的重启失败问题。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。