[Flink] Flink CDC Connactors FAQ

news/2024/9/18 8:56:17/文章来源:https://www.cnblogs.com/johnnyzen/p/18376029

Flink CDC Connactors FAQ

近期遇到 Flink CDC 的问题较多,故基于第1篇参考文献的FAQ文档基础之上,对这些问题做个系统的总结。

MYSQL CDC

Q:作业报错 ConnectException: A slave with the same server_uuid/server_id as this slave has connected to the master,怎么办呢?

  • 出现这种错误是 作业里使用的 server id 和其他作业或其他同步工具使用的server id 冲突了,server id 需要全局唯一,server id 是一个int类型整数。
  • 在 CDC 2.x 版本中,source 的每个并发都需要一个server id,建议合理规划好server id,比如作业的 source 设置成了四个并发,可以配置 'serverid' = '5001-5004', 这样每个 source task 就不会冲突了。

推荐文献

  • A slave with the same server_uuid as this slave has connected to the master - CSDN

  • 在使用flinkcdc同步多个表时遇到报错:A slave with the same server_uuid/server_id as this slave has connected to the - 51CTO 【推荐】

  • flink version:flink-1.13.5 ; cdc version:2.1.1
  • 关键错误日志
org.apache.flink.runtime.JobException: Recovery is suppressed by FixedDelayRestartBackoffTimeStrategy(maxNumberRestartAttempts=3, backoffTimeMS=10000)Caused by: com.ververica.cdc.connectors.shaded.org.apache.kafka.connect.errors.ConnectException: An exception occurred in the change event producer. This connector will be stopped.Caused by: io.debezium.DebeziumException: A slave with the same server_uuid/server_id as this slave has connected to the master; the first event '' at 4, the last event read from '/data/mysql/storage/logs/bin_log/bin.001086' at 426321679, the last byte read from '/data/mysql/storage/logs/bin_log/bin.001086' at 426321679. Error code: 1236; SQLSTATE: HY000.Caused by: com.github.shyiko.mysql.binlog.network.ServerException: A slave with the same server_uuid/server_id as this slave has connected to the master; the first event '' at 4, the last event read from '/data/mysql/storage/logs/bin_log/bin.001086' at 426321679, the last byte read from '/data/mysql/storage/logs/bin_log/bin.001086' at 426321679
  • 原因分析
flink cdc是基于debezium实现的mysql实时同步,debezium是以slave server的方式去读取mysql的binlog日志。
默认情况下,系统会自动生成一个介于 5400 和 6400 之间的随机数,作为debezium这个客户端的server-id,
而这个id在mysql cluster中必须是唯一的,报这个错说明是有重复的server-id了,
建议你显示的配上这个参数“server-id”,可以配置成一个数字或者一个范围。另外当 scan.incremental.snapshot.enabled 设置为true时(默认为true),则建议设置为范围,因为增量读取快照时,source是可以并行执行的,
这些并行的客户端也必须有着唯一的server-id,增量读取快照的并行度由参数“parallelism.default”控制,而且server-id设置的范围必须要大于并行度。详情参考:
https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc.html#connector-options
配置页里关于 server-id 和 scan.incremental.snapshot.enabled 的解释
  • 数据集成实时同步常见问题 # MySql serverid 冲突 - 腾讯云
  • 关键日志
com.github.shyiko.mysql.binlog.network.ServerException: A slave with the same server_uuid/server_id as this slave has connected to the master。
  • 解决办法:

目前已经优化增加随机生成 serverid,之前的任务中如果在 mysql 高级参数中显示指定了 server-id 建议删除,因为可能多个任务使用了相同的数据源,并且 server-id 设置的相同导致冲突。

  • [数据库] 浅谈mysql的serverId/serverUuid - 博客园/千千寰宇 【推荐】
  • mysql主从复制错误:A slave with the same server_uuid/server_id as this slave has connected to the master; - 博客园
  • 报错:A slave with the same server_uuid/server_id as this slave has connected to the master - 阿里云

Q:作业报错 The connector is trying to read binlog starting at GTIDs xxx and binlog file 'binlog.000064', pos=89887992, skipping 4 events plus 1 rows, but this is no longer available on the server. Reconfigure the connector to use a snapshot when needed,怎么办呢?

出现这种错误是:

  • 情况1:作业正在读取的binlog文件在 MySQL 服务器已经被清理掉,这种情况一般是 MySQL 服务器上保留的 binlog 文件过期时间太短,可
    以将该值设置大一点,比如7天。
mysql> show variables like 'expire_logs_days';
mysql> set global expire_logs_days=7;
  • 情况2: flink cdc 作业消费binlog 太慢,这种一般分配足够的资源即可。

推荐文献

  • 数据集成实时同步常见问题 # binlog 文件找不到 - 腾讯云
  • 关键日志
Caused by: org.apache.kafka.connect.errors.ConnectException: The connector is trying to read binlog starting at GTIDs xxx and binlog file 'binlog.xxx', pos=xxx, skipping 4 events plus 1 rows, but this is no longer available on the server. 
Reconfigure the connector to use a snapshot when needed。
  • 错误原因:

作业正在读取的 binlog 文件在 MySQL 服务器已经被清理时,会产生报错。导致 Binlog 清理的原因较多,可能是 Binlog 保留时间设置的过短;或者作业处理的速度追不上 Binlog 产生的速度,超过了 MySQL Binlog 文件的最大保留时间,MySQL 服务器上的 Binlog 文件被清理,导致正在读的 Binlog 位点变得无效。

  • 解决办法:

如果作业处理速度无法追上 Binlog 产生速度,可以考虑增加 Binlog 的保留时间也可以优化作业减轻反压来加速 source 消费。如果作业状态没有异常,可能是数据库发生了其他操作导致 Binlog 被清理,从而无法访问,需要结合 MySQL 数据库侧的信息来确定Binlog被清理的原因。

Q:作业报错 The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires. 怎么办呢 ?

  • Flink CDC 官方FAQ:
    出现这个问题的原因是的作业全量阶段读取太慢,在全量阶段读完后,之前记录的全量阶段开始时的 gtid 位点已经被 mysql 清理掉了。这种可以增大 mysql 服务器上 binlog 文件的保存时间,也可以调大 source 的并发,让全量阶段读取更快。

Q: mysql cdc支持监听从库吗?从库需要如何配置?

  • 支持的,从库需要配置 log-slave-updates = 1 使从实例也能将从主实例同步的数据写入从库的 binlog 文件中,如果主库开启了gtid mode,从库也需要开启。
log-slave-updates = 1
gtid_mode = on
enforce_gtid_consistency = on

Q:作业报错 ConnectException: Received DML ‘…’ for processing, binlog probably contains events generated with statement or mixed based replication format,怎么办呢?

出现这种错误是 MySQL 服务器配置不对,需要检查下 binlog_format 是不是 ROW? 可以通过下面的命令查看

mysql> show variables like '%binlog_format%';

X 参考文献

  • Flink Cdc Connectors FAQ - Flink CDC 【推荐】
  • https://nightlies.apache.org/flink/flink-cdc-docs-release-3.1/docs/faq/faq/ 【推荐】TODO
  • flink的常见通用FAQ - 51CTO
  • Flink CDC 官网
  • https://ververica.github.io/flink-cdc-connectors 【旧版官网,已废除】
  • https://github.com/apache/flink-cdc/ 【最新版官网】
  • https://nightlies.apache.org/flink/flink-cdc-docs-stable/
  • 数据集成实时同步常见问题 - 腾讯云 【推荐】TODO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/786102.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

少儿编程概述

少儿编程少儿编程 技术参考少儿编程的核心理念是培养孩子思维模式,解决问题逻辑等综合能力,与传统意义上的编程有很大区别。前者培养能力,后者专注技术。国外少儿编程较国内更早开始发展,主要代表有开源平台Scratch以及拥有成熟体系的Tynker。Scratch语言 与 编程猫的Kitte…

《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(一)

《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质…

【HW系列+技战法】搞定通信加密,力防数据泄露

一、 通信加密流程二、密钥协商算法三、密钥生成四、 密钥交换五、密钥存储原创 菜鸟学信安移动互联网主流的网络通信方式面临诸多风险: 算法破解、协议破解、中间人攻击…… 攻击者利用多种攻击方式,不断对移动应用发起攻击。 在移动应用未做有效保护措施的情况下,如果加密…

基础组件:表单

实际业务中,在正式向服务器提交数据前,都会对各个输入框数据进行合法性校验,但是对每一个TextField都分别进行校验将会是一件很麻烦的事。还有,如果用户想清除一组TextField的内容,除了一个一个清除有没有什么更好的办法呢?为此,Flutter提供了一个Form 组件,它可以对输…

ctfhub-rce-部分做题记录

命令注入 检查网页显示内容,可以直接看到源代码。大致意思是:检查用户输入的 GET 请求,判断用户是否输入了 ip 信息。如果输入了 ip 信息,则使用用户输入的这个 ip 数据执行一个 shell 命令 "ping -c 4" 。 输入 127.0.0.1;cat 104211044913917.php 没回显,查看…

linux 安装nginx

1.nginx 官网下载nginx 包 (选择稳定版) https://nginx.org/en/download.html 2.上传到linux服务器,解压 tar -zxvf nginx-1.26.2.tar.gz 3.cd到 nginx-1.26.2 , 执行 ./configure 4. 执行 make 5 .执行 make install 7.搜索 nginx 所安装的目录 , whereis …

Android Qcom USB Driver学习(八)

因为要看usb charging的问题,所以需要补充一下battery的相关知识,算是入门吧 BAT SCH(1)VBATT_VSNS_P (2)BAT_THERM (3)I2C_SDA (4)I2C_SCL (5)VBATT_VSNS_M sbl1_hw_pre_ddr_init: (1)pm_device_init (2)pm_driver_init (3) pm_sbl_chg_init (1) pm_device_init没有研究过,…

JuiceFS 在多云架构中加速大模型推理

在大模型的开发与应用中,数据预处理、模型开发、训练和推理构成四个关键环节。本文将重点探讨推理环节。在之前的博客中,社区用户 BentoML 和贝壳的案例提到了使用 JuiceFS 社区版来提高模型加载的效率。本文将结合我们的实际经验,详细介绍企业版在此场景下的优势。 下图是一…

基础组件:ICON

Flutter 中,可以像 Web 开发一样使用 iconfont,iconfont 即“字体图标”,它是将图标做成字体文件,然后通过指定不同的字符而显示不同的图片。在字体文件中,每一个字符都对应一个位码,而每一个位码对应一个显示字形,不同的字体就是指字形不同,即字符对应的字形是不同的。…

Docker部署Nginx,无法访问的解决办法

最近用阿里云的服务器部署了一下Nginx,发现无法通过外网访问,排除掉防火墙和端口映射的问题,最终在阿里云官方发现解决办法,docker0网桥的网段与内网eth0网段冲突,可能导致Nginx无法访问,修改Docker的网段后正常访问. 1.运行以下命令,查看docker0和eth0网段是否冲突 route …

一起单测引起的项目加载失败惨案

一、前言最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对Javaassist包进行排包或者升版本处理。通过排包解决掉单测报错,在部署项目时发现频繁报bean注入失败问题…