找回密码
 立即注册
搜索
查看: 16|回复: 0

Jync v1.8.2 · 日志 CDC 覆盖信创数据库,并发与审计更稳

[复制链接]

主题

0

回帖

0

积分

积分
0
发表于 昨天 13:30 | 显示全部楼层 |阅读模式
•
日志 CDC 从 MySQL / Oracle / PostgreSQL / SQL Server 扩到更多国产与兼容数据库:崖山 YStream、达梦 DM8 LogMiner、openGauss 等 PG 方言家族、MySQL 兼容家族按能力探测放行。同步侧新增行数审计的定点修补与删除比对分块;同一连接配置上的多个任务改为按活跃任务数分配并行度,池满时排队退让而不是判失败。



本版本曾同版本覆盖重发(安装包精简,版本号不变),以下为最终内容。
新增
崖山 YashanDB YStream 实时日志采集

•
新增 YSTREAM_CDC 采集策略,走崖山自带的逻辑日志(DBMS_YSTREAM_ADM),不建触发器、不改表结构。

•
策略门禁与探测逐表检查归档模式、主库角色、权限与列补充日志,缺项给出可直接复制的 ALTER 语句。

•
源侧服务按项目生命周期管理(创建 / 加表 / 启动 / 巡检 / 停止并删除),位点是提交 SCN、实例、组 LSN、组偏移与行号的五元组,落库为定宽字符串。

•
消费循环按整事务应用,支持保存点回滚;DDL 跳过并计数;上游 APPLIED_POSITION 在每次提交后回执,源端可回收 redo。

•
修复了真库联调中暴露的五处问题:元数据事件的位点读取、轮询超时单位、检查点心跳导致的频繁重连、UPDATE 新镜像只带被改列(改为旧镜像 ∪ 新镜像合并写入)、回执从未调用。

•
修复基线落入 MySQL binlog 判定分支的问题;保存点快照计入事务内存预算,不会把堆打爆后反复重放。

•
实测崖山 23.4.7.100 没有 DBMS_LOGMNR,日志挖掘不可用;崖山源请选 YStream。


达梦 DM8 LogMiner 日志采集

•
LOGMINER_CDC 改按方言家族放行,与 binlog、PG 逻辑 CDC 口径一致;连上后由能力探测决定能否挖掘。

•
新增达梦探测分支:源库版本、ARCH_MODE=Y、RLOG_APPEND_LOGIC=2、归档范围与新鲜度、V$ARCHIVED_LOG / DBMS_LOGMNR 权限;Oracle 专属检查在达梦上不再出现。

•
基线起点改由方言提供:Oracle 用 CURRENT_SCN,达梦用最新归档的 NEXT_CHANGE#;没有归档时给出切换日志的命令而不是反复重试。

•
抽取 LogMiner 方言缝(ADD_LOGFILE / START_LOGMNR 的 CALL 形式、按 CSCN 续跑、达梦的 ANSI 日期与十六进制字面量),Oracle 路径行为不变。


PostgreSQL 方言家族与 openGauss 逻辑复制

•
新增 PG 方言枚举,openGauss 与原生 PostgreSQL 分开取变更流与推进 SQL(pg_current_wal_lsn 系列与 pg_current_xlog_location 等按能力选择)。

•
门禁与探测按方言家族放行;探测期真跑消费链路语句并逐表校验,建槽探测仍是唯一权威。

•
修复 openGauss 侧的三处方言差异:按 SELECT version() 识别、CSN 后缀不再被解析成空事务号、参数强转补齐。


MySQL 兼容家族 binlog

•
binlog CDC 从「仅 MySQL / MariaDB」改为 MySQL 家族 + 能力探测,GBase、OceanBase、TiDB、GoldenDB、TDSQL、PolarDB 等按实际能力放行,探测不过时明确说明缺哪一项。


行数审计定点修补

•
行数审计发现缺口后,按主键把区间切段、只对比计数偏短的段,再只回源取缺失的行幂等写入,游标保持不动——不再为几行补数据付出整表重载。

•
缺口超过 sync.row-count-repair-max-rows(默认 1000,0 关闭)、无主键或游标列无法在目标侧比较时,照旧退回清空游标整表重载。

•
主键跨驱动规范化(Timestamp / LocalDateTime / Instant / java.sql.Date 等)按「秒 + 纳秒」比较;一次修补只记一条变更日志,不再与重载日志成对出现。


删除比对分块

•
超过内存上限的删除比对改为按主键键序分页(WHERE pk > 上页末键 + 行数上限),每页主键等值回源库确认,内存从「整表所有键」降到「一页键」。

•
键序游标而非 OFFSET,一边翻页一边删除不会跳行;用等值而非范围,避免两库排序规则、CHAR 补位和数字序差异造成误判。sync.delete-compare-max-rows 设上限即可启用,默认 0(关闭)。


看板与任务列表

•
看板改为实时化:概览数据并入统计轮询,会话数、连接健康状态与最近活动随轮询刷新;活动流改为跑马灯,不再因停靠而截断。

•
连接健康状态在连接列表可见,深色主题下配色可读。

•
任务列表适配移动端,窄屏下任务卡片与分页条不再互相挤压。


优化

•
同一连接配置上的并发调度:按连接配置记录活跃任务占用的席位(同库两端算两席),新任务按 (池大小 − 已占) / 已占 折算并行度,取源/目标较小值;准入上限为池的一半,另一半留给全量 worker。单任务时并行度与原来一致。

•
池满改为排队退让:同一配置上的第二个任务不再等 Hikari 十五秒超时后整轮失败、写 ERROR 并累计失败次数,而是按 sync.pool-wait-ms(默认 10 秒)每 200 毫秒探一次池计数,仍拿不到位置则本轮退让,下个调度周期自动重试;数据库真连不上仍按失败处理。

•
手动同步不再谎称完成:退让轮的手动同步改为黄色提示「连接池被其他任务占满,本轮已让出」,不再显示摘要与错误明细。

•
并行度上限可见:任务详情显示并行度的生效上限及它受连接池约束的原因,不用再猜为什么设了 8 实际只跑 4。

•
变更日志详情列按界面语言渲染:详情列在展示层按当前语言渲染,存储与去重键不变。

•
看板计数与趋势统一窗口:变更数卡片与趋势图使用同一个 24 小时窗口。

•
启动更快:外部认证未启用时不再读取 SSO 配置,SSO 已存在会话时先查已有 principal。

•
安装包精简 4.3 MB:移除四个代码从未用到的传递依赖(Bean Validation 校验器、AspectJ weaver、Quartz 的 c3p0 支持、Tomcat WebSocket),安装包从 84.0 MB 降到 79.6 MB,功能不变。日志 CDC 需要的 zstd 解压、全部数据库驱动与 Oracle 中文字符集/XMLTYPE 支持均保留。


修复

•
只有删除的轮次「上次同步」不前进:删除数只并进了项目级汇总,未写进每表结果,只有删除的周期时间戳一直不动。

•
大字段溢出上限按 UTF-8 字节计算:原先按每字符 3 字节保守估算,纯 ASCII 的值到三分之一配额就误报超限;现在按实际写盘字节计数。

•
Oracle/DM LogMiner 写 PG 族目标首条 DML 失败:重做文本里的数值被当字符串绑定,PostgreSQL 拒绝隐式转换;现在数值目标列解析为 BigDecimal 再绑定,文本目标列不受影响。

•
LogMiner 会话泄漏:START_LOGMNR 成功后建游标失败时没有 END_LOGMNR,连接带着挖掘上下文回到池里,下一个借用者会继承;现在异常路径也结束会话。

•
Oracle LogMiner 半读事务被冲刷:批大小或停止请求落在 CSCN 窗口中间时会先冲刷半读事务再推进水位,未读的行永久丢失;现在只冲刷完整读完的游标。

•
PG 逻辑解码 NULL 覆盖目标值:流式行缺少基线后新增的列时,原实现绑定 NULL 覆盖目标值;现在跳过并计数,每表告警一次。

•
SQL Server 大字段删除写错溢出文件:删除事件的溢出文件无读者,批量删除大行会填满溢出目录;现在只溢出插入与更新镜像。

•
SQL Server 源端水位倒退无限重试:源库还原或改指向更早的库时,倒置区间每轮都被拒绝却不 park;现在判定为 PURGED 并提示从新快照重基线,无法识别的形态仍交给 SQL Server 显式报错。

•
PG 事务里的删除落在刷新前的绑定上:事务内删除后重插同键,期间元数据刷新会产生新绑定,删除与插入落在两个桶,先写后删导致静默丢行;现在刷新时把缓冲的删除移到新绑定。

•
test_decoding 的引号标识符被截断:表名带冒号、列名带方括号时事件落错表或列;现在引号内的分隔符不参与切分。

•
PG 基线期间槽滞留无感知:基线可能跑数小时,采样一次也执行不到,源库 WAL 会静默堆积到写满磁盘;现在基线期间每 30 秒采样一次,超过 sync.cdc.pg.wal-retention-warn-bytes(默认 4 GiB)在面板标红并写 WARN。openGauss 无 pg_lsn 时不显示、也不发注定失败的查询。

•
复制槽丢失后静默建新槽续跑:已提交位点存在但槽不见时现判定为 PURGED 并停在错误上,不再继续推进。释放槽的日志区分「本就不存在」与「仍被消费者占用」,删除任务、切换策略、更换源库三条路径都尽力释放。

•
LogMiner 失败周期重放已提交事务:失败后退避期间从位点库回读已提交 SCN 作为下一轮锚点,不再逐条打「refusing to rewind」。

•
SQL Server 捕获实例消失无告警、计数虚增:捕获实例被删除时静默停止采集,现在明确告警并说明恢复方式;没有捕获实例的等待状态不再每轮累加「已跳过」计数。

•
SQL Server 2012/2014 删视图和例程语法不兼容:按这两个版本能理解的语法生成删除语句。

•
目标表重名检测受区域设置影响:表名折叠改为 Locale.ROOT,土耳其语等区域下不再误判重名或漏判。

•
目标列校验被无列名行打断:元数据里没有 COLUMN_NAME 的列行直接跳过,整次校验不再因此失败。

•
预检拒绝被读成源端删除:目标名过长的表被预检剔除后,变更检测曾把它当成源端已删除并执行 DROP TABLE;现在记录为「本轮未处理」,不再删除目标表与快照。

•
无法解析的列清洗规则让整表停住:替换串在首次匹配时才解析,非法规则会抛出异常;现在编译规则时就校验并跳过,与非法正则同样处理。

•
DATE/TIME 主键两侧渲染不一致:删除同步与审计修补要求同一逻辑键在两侧渲染一致,LocalDate/LocalTime 曾分别按 epoch day / nano-of-day 与毫秒比较,驱动返回类型不同时会误判整表被删并清空目标;现在统一为毫秒,与 LocalDateTime/Timestamp 同一空间。

•
模拟 upsert 目标重复记录更新:安全余量重发的相同行照样报「1 行影响」,变更日志反复记录同一次修改;现在 UPDATE 带「任一列真的不同」守卫,重放空操作不再计数,目标含大字段等不可比类型时整表退回原行为。

•
项目删除被自己的租约释放阻塞:删除流程不再等待自身租约释放,删除立即返回。

•
并发升级请求重复启动 helper:一键升级的并发重启请求只放行一个。

•
升级探测地址错误:探测重启进程实际绑定的地址,而不是发起进程的地址;回滚脚本记录新的 java 进程号,便于终止。

•
AI 回复在 SSE 特殊行后丢失:流里出现 id: / retry: 或空行时保留已收到的回复;草稿缓存键改用 provider 端点而不只是 id。

•
Oracle 11 生成的标识名超长:identity 名称控制在 30 字节以内。

•
Oracle 分区表注释读不到:把分区表纳入注释查询的类型列表。

•
SQL*Plus 终止符误删:只剥离独立成行的 /,不再误伤语句中间或字符串里的斜杠。

•
审查页重定向对象名未编码:对象名经百分号编码后再拼进重定向地址。

•
错误页多出一条英文弹窗:不再把框架的英文原因短语渲染成第二条错误信息。

•
非中文界面显示中文更新说明:说明含中文且界面语言不是中文时,只留一句提示与发布页链接。

•
「连接已失效」显示哨兵键:连接健康检查的 error.db.health.invalid 换成人话,不再把键名挂到标题上。

•
核对行数弹窗提示不全:只列已有同步记录的表,不再提示不存在的条目。

•
详情页采集卡片与批量创建判定不一致:两处共用同一套 supportedFor 规则;崖山项目不再渲染必然探测失败的卡片。

•
批量创建的采集方式不随源库收窄:切换源连接即时收窄可选采集方式,无脚本时服务端同样收窄。

•
基线异常路径可能误删位点:租约已丢失时不再删除位点行、不再摘错误标记;键集分块的亚毫秒时间边界保精度,NULL 字面量断点解为「无边界」。

•
Gitee 更新检查因单条记录解析失败整页作废:created_at 解析失败只跳过该条,不再作废整个 release 列表。

•
窄屏与手机宽度下的三处溢出:品牌名不再截成「Jy…」,任务列表分页条自动折行,英文界面在 390px 下不再吞掉左侧的「共 N 条」。

•
中英文案不同步:中文提示与英文同进同退,句末标点对齐;异常任务按数量分支显示,空状态不再重复提示。

•
CDC 探测结果深色主题不可读:补深色主题配色,对比度不再低到 2.9:1。

•
容器镜像不含本版本更新说明:设置页「本版本更新内容」不再为空;新增测试确保 POM、Dockerfile 与 .dockerignore 三者一致。

•
脚本与消息映射漏项:页面脚本统一带版本参数;自定义脚本不再自抄采集方式与文案映射,新增采集方式不会被前端当成无标签丢弃;CDC 检查消息补齐浏览器消息映射。


兼容性说明

•
默认行为不变:不启用的采集策略不会被探测;已有同步任务、调度与连接池默认值不变。

•
新增可选配置项:sync.pool-wait-ms(默认 10000,池满排队退让的等待上限)、sync.row-count-repair-max-rows(默认 1000,0 关闭定点修补)、sync.delete-compare-max-rows(默认 0 关闭分块删除比对)、sync.cdc.pg.wal-retention-warn-bytes(默认 4 GiB,0 关闭 WAL 滞留告警)。

•
无数据库结构变更。替换 jync.jar 重启即可;容器部署将镜像 tag 更新为 jync:1.8.2。升级前备份 ./data 与 application.yml。


测试与升级

•
3253 个测试:3252 通过,0 失败;1 个仅限 Linux 的密钥文件权限用例在 macOS 上按环境跳过(*IT 需 Docker 另跑)。

•
替换 jync.jar 重启即可;容器部署将镜像 tag 更新为 jync:1.8.2。



GITHUB: https://github.com/vfaner/jync/releases/download/v1.8.2/jync.jar

Gitee: https://gitee.com/super_rgh/jync/releases/download/v1.8.2/jync.jar

原文链接

打赏作者

当前余额:0 Token,打赏后立即到账
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

{ template common/footer}