8、sql变更导致canal堵塞问题排查

2023-10-27

一、场景描述

20220120 15:50左右发布(发布单), dba采用rename方式变更表结构,导致变更时刻点,表名称和topic无法匹配上,导致canal爆找不到topic的错误,然后canal陷入死循环一直投递那个时刻点的日志(此现象已经在测试环境复现).

//期望变更sql
ALTER TABLE `ms_member_pay_order` 
ADD COLUMN `recycle_amount` decimal(12,2) DEFAULT NULL COMMENT '作废的余额金额',
ADD COLUMN `recycle_rebate_amount` decimal(12,2) DEFAULT NULL COMMENT '作废的奖励金金额',
ADD COLUMN `refund_by` varchar(32) DEFAULT NULL COMMENT '退款操作人',
ADD COLUMN `refund_date` datetime DEFAULT NULL COMMENT '退款操作时间';

//实际变更方式
//dba 为了大表变更,先创建新表,然后rname的方式变更成目标表
rename /* gh-ost */ table `membership`.`ms_member_pay_order` to `membership`.`_ms_member_pay_order_del`, `membership`.`_ms_member_pay_order_gho` to `membership`.`ms_member_pay_order`

在这里插入图片描述
在这里插入图片描述

二、原因分析

2.1、canal表与rocketMq topic投递规则

目前canal表和rocketMq topic投递规则是,一个topic对应一类表.如果新增表不在匹配规则范围内,canal是无法发现新增表的.

2.2、dba变更表导致新表无法匹配到topic

下面变更表的方式导致,变更新表的消息无法匹配到topic,然后canal会报找不到topic的错误.

//dba 为了大表变更,先创建新表,然后rname的方式变更成目标表
rename /* gh-ost */ table `membership`.`ms_member_pay_order` to `membership`.`_ms_member_pay_order_del`, `membership`.`_ms_member_pay_order_gho` to `membership`.`ms_member_pay_order`

2.3、在2.2的基础上如果在有新的binlog日志canal将陷入死循环

此时canal爆找不到topic的错误,如果此时在有表insert、update等,canal陷入死循环,一直投递这些重复的消息.
上图测试环境rocketMq 1分钟左右,投递了500页消息.

三、如何解决

3.1、创建默认的topic

在rocketMq上创建默认的topic,出现找不到topic的时候投递到默认topic.这样就不会触发找不到topic的异常.

rocketmq.producer.group = canal_binlog

3.2、这样做的风险

程序如果配置配置错误,会导致消息都透底到默认topic上面. 不过发布后检查下配置及默认topci,这个问题就可以避免.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8、sql变更导致canal堵塞问题排查 的相关文章

  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • PooledRedisClientManager 未释放连接

    我将 json 数据列表存储在 redis 中并使用 ServiceStack c 客户端访问它 我本质上是在管理自己的外键 我在其中存储zrangeid 我使用应用程序内部的接口从zrange然后从 Redis 获取底层 json 对象并
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 如何统计 Redis 流中未读或已确认的消息?

    使用 Redis 5 0 3 假设我们创建一个名为streamy和一个消费群体consumers XGROUP CREATE streamy consumers MKSTREAM 然后向其中添加一些消息 XADD streamy messa
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 如何将node.js管道传输到redis?

    我有很多数据要插入 SET INCR 到redis DB 所以我正在寻找pipeline http redis io topics pipelining 质量插入 http redis io topics mass insert通过node
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 无法启动redis.service:单元redis-server.service被屏蔽

    我在 ubuntu 16 04 上安装了 Redis 服务器 但是当我尝试使用启动redis服务时 sudo systemctl start redis 我收到消息 Failed to start redis service Unit re
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • 有没有办法在 ruby​​ 中重新定义 []=+

    我正在尝试编写一个简单的 DSL 针对 Redis 并且我想自己定义 I have def key val redis zadd name val key end 我想定义 def key val redis zincrby name va
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • redis dump.rdb / 保存小文件

    Context 我正在使用redis 数据库小于 100 MB 但是 我想进行每日备份 我也在 Ubuntu Server 12 04 上运行 当输入 redis cli save 我不知道 dump rdb 保存到哪里 因为 redis
  • Spring Redis删除不删除key

    我正在尝试删除一个 Redis 键 但由于某种原因它没有删除 但也没有抛出异常 这是我要删除的代码 import com example service CustomerService import com example model Cu
  • Laravel 异常队列最大尝试次数超出

    我创建了一个应用程序来向多个用户发送电子邮件 但在处理大量收件人时遇到问题 该错误出现在failed jobs table Illuminate Queue MaxAttemptsExceededException App Jobs ESe
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • 由于配置文件错误,无法启动 Redis 服务器

    我刚刚按照此处的说明安装了 Redis http redis io download http redis io download 当我运行 redis server redis conf 时出现以下错误 FATAL CONFIG FILE
  • 将文件传递给活动作业/后台作业

    我通过标准文件输入接收请求参数中的文件 def create file params file upload Upload create file file filename img png end 但是 对于大型上传 我想在后台作业中执行

随机推荐

  • unity 利用PlayerPrefs实现关卡解锁功能

    关卡结构 在关卡中确认过关的地方 添加 public int jiesuo jiesuo SceneManager GetActiveScene buildIndex PlayerPrefs SetInt jiesuo jiesuo 然后在
  • Centos8 配置静态IP

    安装centos 8之后 重启启动网络时 会出现以下报错 报错信息如下 Failed to start network service Unit network service not found 意思为无法重启网络服务 原因是无法找到ne
  • Pig基本语法项目实战

    Apache Pig是一个高级过程语言 适合使用Hadoop和Mapreduce平台来查询大型半结构化数据 当Pig处理数据时 Pig本身 会在后台生成一系列得MapReduce操作来执行任务 这个过程对用户来说是透明的 用于执行Pig L
  • mysql连接符_【MySQL】字符串连接

    CONCAT 函数 可以连接一或者多个字符串 不过其中如果有 Null 就直接返回 Null mysql gt select concat 11 22 33 44 concat 11 22 33 44 11223344 1 row in s
  • 2022年泰迪杯数据分析_B题:银行客户忠诚度分析赛题数据_任务五

    银行客户长期忠诚度预测建模 此处忠诚度的指标选取为客户的流失情况 该指标分为两类 长期客户忠诚用1表示 不忠诚则用0表示 对此预测建模中 使用到机器学习分类中的随机森林分类 import pandas as pd long data26 p
  • 华为OD机试真题- 阿里巴巴找黄金宝箱(V)-2023年OD统一考试(B卷)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 阿里巴巴念出一个咒语数字k k
  • excel文件隔行删除数据并保存

    现阶段用代码实现 隔四行删除数据 import pandas as pd 读取 Excel 文件 excel file xxxx xlsx df pd read excel excel file rows to keep 要删除的行数 sk
  • 超详细!!服务器搭jupyter notebook及挂起和关闭进程

    再次警告 没有在小小demo上试验成功的代码不要放到服务器上造垃圾 一 服务器上配置jupyter 1 1 ssh连接到服务器 cd到你想建立jupyer的服务器目录下执行 jupyter notebook generate config
  • 【今日CV 计算机视觉论文速览 第98期】Wed, 10 Apr 2019

    今日CS CV 计算机视觉论文速览 Wed 10 Apr 2019 Totally 67 papers 上期速览 更多精彩请移步主页 Interesting 通用物体检测框架 在不需要先验知识的强化下实现了横跨多个域的目标检测 这要通过引入
  • 浅谈get和post的区别

    一 不完全正确的网红答案 GET的URL会有长度上的限制 则POST的数据则可以非常大 POST比GET安全 ET请求的数据会附在URL之后 POST把提交的数据则放置在是HTTP包的包体中 二 为什么是不完全正确的答案 HTTP协议对GE
  • python命令行执行函数的方法

    方法一 直接调用函数运行 这种是最简单且直观的方法 def task print running task task 如果是在类中 也是如此 class Task def task self print running task Task
  • python 为什么so库import失败?

    为什么so库import失败 查看支持的so后缀名 修改对应so文件名称 import importlib machinery print importlib machinery all suffixes 例如python3 6升级3 8后
  • log日志使用教程(slf4j log4j logback)

    目录 一 前言 二 常用日志框架 框架对比 2 1 slf4j 框架 2 2 logback 框架 配置 Appender 日志级别过滤filter 2 3 log4j2框架 三 log4j vs logback 推荐logback 一 前
  • 第三大的数

    给定一个非空数组 返回此数组中第三大的数 如果不存在 则返回数组中最大的数 要求算法时间复杂度必须是O n 该题来自力扣题库 示例 示例 1 输入 3 2 1 输出 1 第三大的数是 1 示例 2 输入 1 2 输出 2 第三大的数不存在
  • python中的tkinter包的使用-Scale尺度

    下面这个例子定义了一个尺度 从5到11 拖动滚动条 在label上显示当前尺度 窗口界面 拖动滚动条 代码 import tkinter as tk window tk Tk window title my window window ge
  • 重中之重-K8S的初识

    重中之重 K8S的初识 一 kubernetes概述 1 K8S的含义 2 K8S的优点 3 K8S的特性 4 Kubernetes 集群架构与组件 二 kubernetes架构核心组件 1 Master组件 2 配置存储中心 3 Node
  • JS 基础面试题

    前端全部面试题 https blog csdn net qq 40055200 article details 104637574 1 基本数据类型有哪几种 高频 了解包装对象吗 undefined null boolean string
  • 考试系统web服务器

    servlet jsp js css 基础知识 jqueary 框架的使用 环境tomcat eclipse mysql workbench 项目地址 https github com cuizehui ExamSystem 考试系统的敏捷
  • ESP8266 使用TCP通信协议

    TCP服务器示例 include
  • 8、sql变更导致canal堵塞问题排查

    一 场景描述 20220120 15 50左右发布 发布单 dba采用rename方式变更表结构 导致变更时刻点 表名称和topic无法匹配上 导致canal爆找不到topic的错误 然后canal陷入死循环一直投递那个时刻点的日志 此现象