11 flink-sql 中基于 mysql-cdc 连接 mysql-pxc 集群无法获取增量数据问题

news2025/6/22 6:59:27

前言

问题是来自于 群友, 2024.03.29, 也是花了一些时间 来排查这个问题 

大致的问题是用 mysql-cdc 连接了一个 mysql-pxc 集群, 然后创建了一个 test_user 表 

使用 "select * from test_user" 获取数据表的数据, 可以拿到 查询时的快照, 但是 无法获取到后续对于 test_user 表的增量操作的数据, 比如 新增的数据 

正常连接一个普通的 单点 mysql 是可以正常进行数据同步的 

79229c7859414c78996c9a4a279b4565.png

flink-sql 中基于 mysql-cdc 的 select * from test_user 的具体实现 也是衍生自此问题 

然后 可以 先了解一下这个 查询的过程 

问题的排查思路

当然 这里介绍的仅仅是一个思路, 一个排查方向, 未必能够解决问题 

1. 查看 正常同步, 异常同步 的 mysql 的 bin-log 相关配置, 然后更新 异常同步 mysql 的这边的配置, 查看是否能够正常工作 

2. 日志级别的排查, 查看 taskmanager 这边的日志, 查看一下 BinaryLogClinet, BinlogReader 等等相关日志, 切换日志级别为 DEBUG, 查看 是否有具体的信息, 结合日志信息 和 代码进行一个抽象的分析 

3. 如果能够访问数据库的话, 可以本地部署一个简单的 flink-1.13.6, 然后 本地模拟, 来调试 taskmanager, 当然 在这里这个问题, 我们是不具备条件的, 别人的机器 

4. 使用 mysqlbinlog 等等工具, 向 mysql 集群这边发送请求, 获取 binlog 相关信息, 查看是否正常 

处理过程

1. 查看 正常同步, 异常同步 的 mysql 的 bin-log 相关配置, 然后更新 异常同步 mysql 的这边的配置, 查看是否能够正常工作 

22f16886c4174bc7bc2ee62517285d94.png

2. 日志级别的排查, 查看 taskmanager 这边的日志, 查看一下 BinaryLogClinet, BinlogReader 等等相关日志, 切换日志级别为 DEBUG, 查看 是否有具体的信息, 结合日志信息 和 代码进行一个抽象的分析 

1fd25d80ad05444886a54e7c0121fc4f.png

INFO 级别的日志信息如下, 可以得出的大致的现象是 "看这个情况有点像 task_manager 触发连接 mysql binlog 服务这边怎么出问题了, 然后 blc-keepalive 线程, 每隔一分钟 在重试 "


2024-04-01 09:19:32,482 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:19:32,492 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=387473470, skipping 0 events plus 0 rows
2024-04-01 09:19:32,493 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded
2024-04-01 09:19:52,622 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:19:52,635 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=382848711, skipping 0 events plus 0 rows
2024-04-01 09:19:52,636 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded
2024-04-01 09:20:32,494 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:20:32,504 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=387473470, skipping 0 events plus 0 rows
2024-04-01 09:20:32,504 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded
2024-04-01 09:20:52,636 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:20:52,647 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=382848711, skipping 0 events plus 0 rows
2024-04-01 09:20:52,647 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded
2024-04-01 09:21:32,506 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:21:32,515 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=387473470, skipping 0 events plus 0 rows
2024-04-01 09:21:32,515 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded
2024-04-01 09:21:52,648 INFO  io.debezium.util.Threads                                     [] - Creating thread debezium-mysqlconnector-mysql_binlog_source-binlog-client
2024-04-01 09:21:52,660 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000051', pos=382848711, skipping 0 events plus 0 rows
2024-04-01 09:21:52,660 INFO  io.debezium.connector.mysql.BinlogReader                     [] - Stopped reading binlog after 0 events, no new offset was recorded

48702eef3e37445e86084beb586d3c55.png

日志修改为 DEBUG 级别, 可以看到 和 mysql 这边建立了 获取 binlog 的链接之后, 马上就断开了 

22e107fd06ad4fd8841c8af30e57108a.png

日志映射到代码这边的话 

"Connected to MySQL binlog at 172.16.5.58:3306, starting at binlog file 'bin.000061', pos=161824289, skipping 0 events plus 0 rows" 是在 onConnect 中进行输出的 

"Stopped reading binlog after 0 events, no new offset was recorded" 是在 onConnect 中进行输出的 

然后 requestBinaryLogStream 是向 mysql 这边发送 dump binlog 命令 

然后正常的话这个线程 会阻塞在 listenForEventPackets, 进而 处理 mysql 服务器这边传递过来的各个 binlog 事件, 进而反馈给 flink sql-client, 实现了 数据的实时同步更新 

那么问题可能就在 是向 mysql 这边发送 dump binlog 命令 哪里出现问题了 

因此, 我们使用 mysqlbinlog 工具来进行模拟一下 

3a0db30b1bcd426b9be7d9ef39c1f849.png

3. 使用 mysqlbinlog 等等工具, 向 mysql 集群这边发送请求, 获取 binlog 相关信息, 查看是否正常

可以看到的是 flink 所在的机器, 去访问 mysql-pxc 集群 确实是出现了问题 

至于 具体的问题, 就得拿到具体的环境才能够进行排查了, 这里就不在深究下去了 

456b93c8d8a649cdbc4aa58646887c87.png

然后 问题是可以第一次通过查询全量拿到 test_user 的所有数据

我们再 flink 所在的机器使用 mysql 客户端进行访问试试, 是可以正常登录, 正常执行查询的 

f79b52092e224f0891633bbf5a7dbf22.png

问问 通义千问 

d8c7c732e1a145198e76c7d76fa8783a.png

-- 新增于 2024.04.09

后面运维人员开了一个 mysql-pxc 集群的端口映射出来, 新端口 3307 映射到 mysql-pxc 集群 

但是 mysql-pxc 集群的 binlog 配置貌似存在问题, 然后 pxc0, pxc1, pxc2 机器的 binlog 信息不同步 

最终问题顺利解决 

完 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用QT 开发不规则窗体

使用QT 开发不规则窗体 不规则窗体贴图法的不规则窗体创建UI模板创建一个父类创建业务窗体main函数直接调用user_dialog创建QSS文件 完整的QT工程 不规则窗体 QT中开发不规则窗体有两种方法:(1)第一种方法,使用QWidget::setMask函…

CSS伪元素::after清除浮动样式

一.代码 1.清除前 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </h…

Vue3学习01 Vue3核心语法

Vue3学习 1. Vue3新的特性 2. 创建Vue3工程2.1 基于 vue-cli 创建项目文件说明 2.2 基于 vite 创建具体操作项目文件说明 2.3 简单案例(vite) 3. Vue3核心语法3.1 OptionsAPI 与 CompositionAPIOptions API 弊端Composition API 优势 ⭐3.2 setup小案例setup返回值setup 与 Opt…

[计算机效率] 看图工具:Honeyview

3.23 看图工具&#xff1a;Honeyview Honeyview是一款轻量级、快速且功能强大的图片浏览器&#xff0c;具有多种强大的功能和特点。 多种图像格式支持&#xff1a;Honeyview支持几乎所有常见的图像格式&#xff0c;包括JPG、PNG、BMP、GIF等&#xff0c;甚至包括一些不常见的格…

搭建NFS服务器,部署k8s集群,并在k8s中使用NFS作为持久化储存

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、k8s概述 2、NFS简介 二、NFS服务器…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day8

Day 8 classification &#xff1a;Probabilistic Generative Model 今天上了一整天的课&#xff0c; 本来实在是更新不动了&#xff0c;但是看到《剑来》更新了&#xff0c;想一想这本书里面一直强调的成功的feature – 心性&#xff0c;嗯心性坚毅就好&#xff01;主人公陈平…

日程安排组件DHTMLX Scheduler v7.0新版亮点 - 拥有多种全新的主题

DHTMLX Scheduler是一个类似于Google日历的JavaScript日程安排控件&#xff0c;日历事件通过Ajax动态加载&#xff0c;支持通过拖放功能调整事件日期和时间&#xff0c;事件可以按天、周、月三个种视图显示。 备受关注的DHTMLX Scheduler 7.0版本日前正式发布了&#xff0c;如…

使用ROCm的HIP API向量加法程序

一、向量加法程序 Radeon Open Compute (ROCm) 是一个开源平台&#xff0c;用于加速高性能计算 (HPC) 和机器学习应用程序。它支持包括GPUs在内的多种硬件&#xff0c;并提供HIP (Heterogeneous-compute Interface for Portability) 作为CUDA代码的便捷转换工具。为了提供一个…

BPMN.JS中文教程学习

基础篇 vue bpmn.js 建模BpmnModeler将数据转图形bpmnModeler.importXML // basic.vue<script>// 引入相关的依赖import BpmnModeler from bpmn-js/lib/Modelerimport {xmlStr} from ../mock/xmlStr // 这里是直接引用了xml字符串export default {name: ,components: {…

使用 Docker 部署 Open-Resume 在线简历平台

1&#xff09;Open-Resume 介绍 GitHub&#xff1a; https://github.com/xitanggg/open-resume Open-Resume 是一款功能强大的开源 简历生成器 和 简历解析器 。可以帮助我们快速的生成个人简历&#xff0c;并定制化不同的主题和布局风格。该项目的目标是为每个人提供免费的现…

Qt5 编译 Qt Creator 源码中的 linguist 模块

文章目录 下载 Qt Creator 源码手动翻译多语言自动翻译多语言 下载 Qt Creator 源码 Github: https://github.com/qt/qttools 笔记打算用 Qt 5.12.12 来编译 qt creator-linguist 所以笔者下载的是 tag - 5.12.12 &#xff0c;解压后如下&#xff0c;先删除多余的文件&#xf…

视觉SLAM学习打卡【10】-后端·滑动窗口法位姿图

本节是对上一节BA的进一步简化&#xff0c;旨在提高优化实时性.难点在于位姿图部分的雅可比矩阵求解&#xff08;涉及李代数扰动模型求导&#xff09;&#xff0c;书中的相关推导存在跳步&#xff08;可能数学功底强的人认为过渡的理所当然&#xff09;&#xff0c;笔者参考了知…

B站广告推广操作教程及费用?

哔哩哔哩&#xff08;B站&#xff09;作为国内极具影响力的年轻人文化社区&#xff0c;已成为众多品牌与企业触达目标受众、提升品牌影响力的重要阵地。然而&#xff0c;面对B站复杂的广告系统与精细化运营需求&#xff0c;许多广告主可能对如何高效开展B站广告推广感到困惑。云…

2024年同城网总流量全新生态,个人工作室落地式游戏玩法,单账户月入3万

我要为大家解读的是本地生活新项目&#xff0c;这个业务模式中&#xff0c;即使是低收入的玩法&#xff0c;一个月赚取万儿八千也是完全可行的。而高收入的玩法&#xff0c;一单的收入甚至能超过一万。目前&#xff0c;你的圈子里已经有一些同行业的人开始以个人工作室的形式去…

stm32开发之threadx+netxduo(结合 modbus 编写tcp接口程序)

前言 本篇结合freemodbus源码程序进行移植,驱动实现的接口为modbus tcp需要知道threadx的 事件标志组、信号量、线程相关的知识需要知道netxduo tcp方面的api和创建流程方面的知识 freemodbus程序源码 本次使用的源码来自于rt-thread软件包里面的&#xff0c;可以参考之前的…

linux查看网络连接数

目录 netstat top netstat 1.netstat查看当前主机上网络连接信息&#xff0c;端口号&#xff0c;pid,程序名等等 #直接查看 netstat -anp #一般使用的时候&#xff0c;可能要筛选 #比如8080端口是否被占用 netstat -anp | grep 8080 #minio服务占用了那些端口 netstat -anp …

掌握判断IPv4地址是否正确的方法

在数字通信和互联网领域中&#xff0c;IPv4地址作为标识网络设备的核心元素&#xff0c;其正确性至关重要。一个有效的IPv4地址能够确保设备在网络中的正常通信和交互&#xff0c;而错误的IPv4地址则可能导致连接失败、通信中断甚至网络安全问题。因此&#xff0c;掌握判断IPv4…

【docker】之linux写shell脚本备份线上数据库(备份为dump文件)

目录 1. SH文件1.1 SH文件示例1.2 文件解释1.3 .sh文件执行 2. 备份线上数据库的.sh文件2.1 文件命令解析 3. 命令执行4. 线下dump文件的恢复与备份 环境&#xff1a;linux容器&#xff1a;docker 1. SH文件 SH文件通常指的是 Shell 脚本文件&#xff0c;文件后缀名为.sh&…

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求&#xff08;doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口&#xff0c;通常会安排几个…

【C++学习】C++11新特性(第一节)

文章目录 ♫一.文章前言♫二.C11新特性♫一.统一的列表初始化♫二.std::initializer_list♫三.声明♫四.decltype关键字♫五.nullptr♫六.新增加容器---静态数组array、forward_list以及unordered系列♫6.1unordered_map与unoredered_set♫6.2array♫6.3 forward_list&#xff…