自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SlothLu的博客

面向对象,面向未来

  • 博客(148)
  • 收藏
  • 关注

原创 Debezium核心组件协同工作详解

Debezium核心组件协同工作机制详解:通过连接器捕获数据库变更事件,经TableSchemaBuilder构建表结构,转换数据后发送至Kafka。系统包含表结构管理(Tables/Table)、Schema映射(TableSchemaBuilder)、Kafka连接器及消费者组件,形成完整变更数据捕获(CDC)流程。典型如用户表变更场景,组件依次完成表结构解析、Schema注册、数据转换和消息传递的协同工作。

2025-11-02 09:46:12 673

原创 EmbeddedEngine架构分析

EmbeddedEngine是Debezium的核心嵌入式引擎,负责管理连接器生命周期、处理配置和协调数据变更事件处理。其架构包含Configuration、SourceConnector、ChangeEventSourceCoordinator等核心组件,支持快照和流式两种数据处理模式。引擎通过状态机管理运行流程,提供完善的错误处理和监控机制。配置灵活,可适配MySQL等多种数据源,并通过偏移量管理确保数据一致性。最佳实践建议关注内存配置、错误处理和性能优化,同时监控关键指标保障稳定运行。该引擎设计清晰、

2025-11-02 09:45:20 691

原创 RelationalSnapshotChangeEventSource详解

Debezium的RelationalSnapshotChangeEventSource是关系数据库快照的核心抽象类,负责数据全量快照、模式捕获、事务管理和事件分发。采用模板方法模式定义快照流程(准备→执行→清理),子类实现具体数据库操作。通过策略模式支持不同快照策略(如仅模式或模式+数据),观察者模式监听快照进度。实际应用中,MySQL和PostgreSQL等数据库通过继承该类实现特定逻辑,如获取binlog位置或表锁机制。该设计提供了灵活可扩展的快照框架,确保数据一致性并高效转换为变更事件。 (149字

2025-11-02 09:25:01 859

原创 Schema创建Struct

让我们通过具体例子来说明这个过程。定义Schema:使用SchemaBuilder定义数据结构创建Struct:使用创建实例填充数据:使用put()方法填充数据访问数据:使用类型特定的getter方法访问数据Struct必须严格按照Schema定义填充数据可选字段可以不填充,将默认为null嵌套Struct需要先创建内部Struct再赋值给外层Struct数组和Map字段需要先创建对应的Java集合再赋值。

2025-11-02 09:23:34 383

原创 Document和Schema的区别

摘要: Schema是数据的结构定义,类似于类定义或表结构,而Document是实际数据实例。Schema用于定义数据格式和类型,Document用于存储具体内容。持久化元数据使用Document而非Schema,因为需要保存实际数据而非结构,Document更灵活且便于序列化。Document可以理解为层次化的数据节点,支持嵌套结构和路径访问。网络传输或文件存储必须序列化对象,Document设计时就考虑了序列化需求,适合存储配置、状态信息和历史记录。Schema提供类型安全,Document提供数据存储

2025-11-02 09:22:52 677

原创 Table-TableSchema-Struct 三者关系

数据库表结构转换流程:Table定义原始表结构(如用户表users),TableSchema作为"翻译官"将其转换为Kafka Connect能理解的Schema(包括Key Schema和Value Schema),最终通过Struct生成具体数据格式。例如用户记录会被转换为包含id、name等字段的结构化数据。整个过程将数据库专业术语转换为Kafka标准格式,实现数据无缝传输。

2025-10-26 21:15:04 390

原创 Schema-数据的蓝图

Kafka Connect 的 Schema 系统详解:本文通过代码示例展示了 Kafka Connect 中 Schema 的核心概念和使用方法。首先介绍了基本类型 Schema(STRING、INT32、BOOLEAN),然后详细讲解了 STRUCT 类型的定义、字段属性(可选性、默认值)以及嵌套结构的使用。通过 Person 和 Employee 等示例,演示了如何创建复杂数据对象,并展示了数组类型 Schema 的定义和使用方式。这些示例帮助开发者理解 Schema 作为"数据蓝图&quo

2025-10-26 21:01:30 153

原创 Oracle附加日志权限

Oracle附加日志(Supplemental Logging)是在重做日志中记录额外信息的机制,主要用于支持外部工具(如Debezium)解析数据变更。主要类型包括:1)数据库级别的最小附加日志(记录主键)和所有列附加日志;2)表级别的主键、唯一索引、外键和所有列附加日志。还可自定义列组记录特定字段。不同日志级别会影响Debezium获取的数据量,如最小附加日志仅返回主键信息,而所有列附加日志可获取完整行数据。

2025-10-26 18:14:50 632

原创 Oracle分区详解

Oracle分区技术将大表分割为更小、更易管理的部分,提供查询性能提升、可用性增强等优势。文章详细介绍了四种分区类型(范围、列表、哈希、复合),分区键选择原则,以及添加/删除/合并等维护操作。特别讲解了分区剪裁技术对查询性能的优化,以及本地/全局分区索引的区别。针对Debezium环境,分析了分区表的透明处理机制和维护操作的影响。最后给出分区设计、维护和性能优化的最佳实践,强调合理选择分区键、控制分区数量和定期监控的重要性。

2025-10-26 18:03:53 961

原创 Oracle-LOB类型详解

Oracle LogMiner中的LOB操作类型包括:SELECT_LOB_LOCATOR(获取LOB定位器指针)、LOB_WRITE(写入LOB数据)和LOB_ERASE(擦除部分LOB数据)。这些操作分别对应CLOB/BLOB等大对象数据的读取、修改和删除场景。在Debezium中,这些操作被映射为特定事件类型(9-11),处理流程通常先获取定位器,再执行数据操作。LOB操作因数据量大带来性能挑战,需通过配置参数控制处理方式。

2025-10-26 17:59:38 529

原创 debezium的回调模式

Debezium中的回调模式通过延迟执行事件创建来优化资源使用。与直接执行模式相比,回调模式在dispatcher确定需要处理事件时才创建对象,避免不必要的资源消耗。关键区别包括:回调模式延迟执行、统一异常处理、更优资源管理,但代码复杂度较高。主要优势体现在:1)延迟执行减少无效对象创建;2)降低内存和GC压力;3)统一异常处理机制;4)支持灵活的事件创建策略。这种模式特别适合处理大量可能被过滤的事件场景,在性能敏感的数据管道中优势明显。

2025-10-26 17:51:03 681

原创 OracleEventMetadataProvider 类的主要功能和使用场景

OracleEventMetadataProvider是Debezium框架中为Oracle数据库变更事件提供元数据的类。主要功能包括为每个变更事件添加标准元数据字段,如连接器信息、时间戳、数据库/表信息、事务ID和系统变更号(SCN)等。典型使用场景包括:1)变更事件生成时添加统一元数据;2)基于元数据进行事件路由和过滤;3)监控调试时追踪事件来源;4)满足审计合规要求。该类会为事件payload添加source字段,包含连接器类型、数据库名称、表名、SCN等关键信息,便于下游系统处理和分析。

2025-10-26 17:36:58 281

原创 Debezium过滤器功能的实现机制

Debezium的过滤器功能主要通过表过滤和列过滤两种方式实现。表过滤支持包含列表、排除列表和正则表达式匹配,可以灵活筛选需要处理的表。列过滤则支持对指定列进行包含或排除操作,以及基于正则表达式的过滤。实现上,表过滤器通过TableFilter接口和Selectors工具类构建,而列过滤器则通过ColumnFilterMode和ColumnNameFilter等机制完成。这两种过滤器可以单独使用,也能组合应用,为数据变更捕获提供了精细化的控制能力。

2025-10-26 17:29:20 980

原创 Debezium中元数据的序列化和反序列化方式

Debezium元数据序列化与反序列化机制主要用于处理数据库历史记录和偏移量管理。核心组件包括Database History(持久化表结构变更)和Document(结构化数据表示)。Document类提供类似JSON对象的功能,支持嵌套结构和JSON序列化。实际应用中,HistoryRecord通过DocumentWriter序列化为JSON格式,包含源信息、位置信息、DDL语句和表结构变更等关键数据,并可通过反序列化还原。该机制确保了Debezium连接器状态的可持久化和恢复能力。

2025-10-26 16:51:36 463

原创 OracleValueConverters和OracleDefaultValueConverter区别

摘要:Debezium的Oracle连接器中,OracleValueConverters和OracleDefaultValueConverter功能不同。OracleValueConverters主要负责构建Kafka Connect Schema、创建值转换器及处理实际数据的类型转换。而OracleDefaultValueConverter专注于解析和转换数据库列的默认值,处理DDL中的默认值表达式,并将其转换为Kafka Connect兼容格式。两者使用场景不同:前者处理数据捕获时的值转换,后者处理表结

2025-10-26 16:38:06 256

原创 数据库类型和JDBC类型的概念

数据库类型与JDBC类型的区别 数据库类型是各类数据库管理系统(如MySQL、Oracle等)特有的数据类型,如MySQL的TINYINT、Oracle的VARCHAR2等。而JDBC类型是Java数据库连接API定义的标准类型,如Types.VARCHAR、Types.INTEGER等,用于统一不同数据库间的类型映射。 JDBC类型作为中间层,将各种数据库特有类型映射为标准类型,使Java应用能以统一方式处理不同数据库。例如,MySQL的VARCHAR、Oracle的VARCHAR2都会被映射为JDBC的

2025-10-26 12:14:53 876

原创 SchemaBuilder与OracleValueConverters关系

SchemaBuilder位于OracleValueConverters类中,主要实现数据库列类型到Kafka Connect Schema的映射。这种设计确保了类型转换的一致性:1) SchemaBuilder和converter处理相同类型映射规则;2) Schema类型与值转换逻辑紧密耦合;3) 可共享连接器配置;4) 便于扩展Oracle特有类型处理。通过Column对象提供的元数据(如类型、长度、精度),OracleValueConverters生成对应的SchemaBuilder,最终构建出与数

2025-10-26 12:13:07 420

原创 Table与Schema的区别

数据库表结构(Table/Column)描述的是物理存储结构,而Kafka Connect Schema则提供了数据在消息系统中的逻辑表示。示例展示了如何从数据库表结构(包含id、name等字段)转换为Kafka Schema,并比较了两种数据表示形式:数据库用Object数组存储原始数据,而Schema为数据添加了类型和结构信息,使消息系统能正确解析数据。Kafka Schema的优势在于跨系统数据一致性,确保数据在传输过程中保持明确的语义和类型信息。

2025-10-26 11:33:52 407

原创 如何理解Schema

Kafka Connect中的Schema系统定义了数据的结构、类型和约束,相当于"数据的蓝图"。文章通过Java代码示例展示了:1)基本类型Schema(如STRING、INT32);2)复杂STRUCT类型(含字段定义、可选字段和默认值);3)嵌套Schema实现数据关联;4)数组类型Schema的创建。这些示例演示了如何从简单到复杂构建Schema,并将其应用于实际数据结构,帮助开发者理解Schema在数据序列化中的核心作用。

2025-10-26 11:23:39 361

原创 ValueConverter功能

摘要:Debezium中ValueConverter的生成机制分析表明,转换器是在TableSchema构建阶段一次性生成的,而非每次转换时创建。通过TableSchemaBuilder.createValueGenerator方法为每个列创建转换器并缓存,后续数据转换时直接复用。示例代码展示了从表结构定义到ValueConverter生成的全过程,包括表定义创建、Schema构建以及多次数据转换时的复用情况,验证了转换器生成的高效性和复用机制。

2025-10-26 11:09:45 303

原创 MySqlStreamingChangeEventSourceMetrics 分析

本文介绍了MySqlStreamingChangeEventSourceMetrics类,它用于监控Debezium连接MySQL时的流式变更事件指标。该类继承DefaultStreamingChangeEventSourceMetrics并实现JMX接口,通过二进制日志客户端统计事件数、事务状态、延迟时间等关键指标。提供了获取binlog文件名/位置、GTID状态、事务计数等20余项监控方法。

2025-07-20 10:17:41 49

原创 OracleStreamingChangeEventSourceMetrics分析

OracleStreamingChangeEventSourceMetrics 是 Debezium Oracle 连接器中用于监控流式变更事件源的重要类。它继承自 DefaultStreamingChangeEventSourceMetrics<OraclePartition> 并实现了 OracleStreamingChangeEventSourceMetricsMXBean 接口,通过 JMX 暴露了多个指标,用于监控和管理 Oracle 数据库连接器在实时捕获数据变更过程中的性能和状态。

2025-07-20 10:12:21 885

原创 ALTER TABLE DDL详细流程

摘要:Debezium通过MySqlAntlrDdlParser解析ALTERTABLE语句,使用AlterTableParserListener处理表结构变更。典型流程包括:解析表名(inventory.customers)、创建列定义(phone VARCHAR(255))、更新表结构,最终通过EventDispatcher发送schema变更事件到Kafka。关键类分工明确,Parser解析SQL语法,Listener处理具体变更类型,TableEditor维护表结构。

2025-06-02 16:55:41 98

原创 CREATE TABLE DDL详细流程

Debezium解析MySQL DDL语句的流程详解:通过ANTLR将CREATE TABLE语句解析为语法树,利用ParseTreeWalker遍历触发各监听器回调(CreateTableParserListener初始化表结构,ColumnDefinitionParserListener解析列定义,AlterTableParserListener设置主键)。最终TableEditor构建完整表结构,由EventDispatcher将schema变更事件以JSON格式发送至KafkaConnect。

2025-06-02 16:41:11 367

原创 CreateTable DDL解析核心流程梳理

Debezium解析CREATETABLE流程

2025-06-02 13:01:01 94

原创 MySQL DDL语句的解析原理

Debezium解析MySQL DDL语句的流程:通过ANTLR语法树分析SQL语句,使用特定监听器处理不同类型的DDL操作(如创建/修改表、删除表等),最终将表结构变化同步到Kafka Connect Schema Registry。核心组件包括解析器、监听器和表编辑器,支持从创建表到修改字符集等多种DDL操作,每种操作对应特定的Kafka事件类型。系统通过事件驱动方式实现实时数据库结构变更捕获,并允许通过继承监听器类来自定义解析逻辑。该机制为MySQL数据库结构变更提供了完整的捕获和同步解决方案。

2025-06-02 12:41:06 159

原创 MySqlStreamingChangeEventSource类分析

本文梳理了MySQL CDC工具Debezium中MySqlStreamingChangeEventSource类处理INSERT、UPDATE和DELETE操作的完整流程。对于每种操作,均从MySQL binlog生成事件开始,经过BinaryLogClient接收分发,通过handleEvent判断类型并调用对应处理器,最终生成KafkaConnect事件并更新偏移量。INSERT操作输出新增数据,UPDATE包含前后值对比,DELETE仅保留删除前数据。

2025-06-02 12:12:54 309

原创 Java 系统卡顿 / 卡住 / CPU 飙高:完整分析方式 + 实战案例解析

本文针对Java系统常见的卡顿、死锁和CPU飙高问题,提供了一套完整的分析方法和实战案例。主要分析工具包括jstack、jstat、jmap和MAT,通过逐步排查GC情况、线程状态和内存使用来定位问题根源。 实战案例模拟了CPU飙高场景,通过4个线程的无限循环计算触发问题,并使用top、jstat、jstack和VisualVM等工具逐步分析。最终确定是计算密集型任务导致CPU占用过高,并提出了优化建议。 文章还汇总了6类常见性能问题的表现和分析方法,包括计算密集型任

2025-06-02 11:39:00 1084

原创 系统性地梳理Java GC日志

Java GC日志分析与内存泄漏排查指南 GC日志记录了JVM垃圾回收的关键信息,包括回收时间、内存变化、收集器类型等,是排查内存问题的重要工具。JDK8及之前版本可通过-XX:+PrintGCDetails开启日志,JDK9+则采用Xlog参数。日志分析需关注GC频率、停顿时间、内存回收效果等指标,特别是Full GC频繁、老年代持续增长、内存回收不彻底等现象,往往暗示内存泄漏。通过实际案例演示,可观察到从初期正常回收,到中期对象晋升老年代,最终Full GC频繁但内存居高不下的典型泄漏特征。结合GCVi

2025-06-02 11:25:47 929

原创 ThreadLocal原理

摘要: ThreadLocal是Java提供的线程本地存储机制,每个线程拥有独立的变量副本,避免线程间共享问题。其核心原理是每个线程维护一个ThreadLocalMap,以ThreadLocal实例为弱引用Key存储值。关键方法包括set()、get()和remove(),其中remove()用于防止内存泄漏。完整示例展示了多线程环境下ThreadLocal的隔离特性:主线程初始值为0,线程A和B分别设置值100和200,最终各线程独立读写且清理资源。通过ThreadLocal.withInitial()设

2025-06-02 11:17:44 1220

原创 ThreadPoolExecutor.shutdown()方法的流程逻辑

线程池 shutdown() 方法详解 ThreadPoolExecutor.shutdown() 方法用于有序关闭线程池: 1️⃣ 状态转换:将线程池状态从 RUNNING 改为 SHUTDOWN,不再接收新任务 2️⃣ 中断空闲线程:通过 interruptIdleWorkers() 中断等待任务的线程 3️⃣ 后续处理:调用 tryTerminate() 检查是否所有任务/线程已完成,最终进入 TERMINATED 状态 关键区别 📌 ▪ shutdown():继续执行队列任务,不中断运行中线程 ▪

2025-06-02 10:54:43 944

原创 ThreadPoolExecutor.execute(Runnable command) 方法的完整执行流程

本文详细解析了 ThreadPoolExecutor.execute(Runnable command) 方法的完整执行流程。该方法通过 ctl 状态变量判断线程池运行情况,按照核心线程数→任务队列→非核心线程的顺序处理任务提交。当核心线程未满时直接创建线程执行任务;否则尝试入队,并在队列满后尝试创建非核心线程。若所有途径均失败,则触发拒绝策略。源码分析展示了状态检查、线程创建、队列管理和拒绝处理的关键逻辑,并附流程图说明整体控制流程。该方法体现了线程池"核心线程优先→队列缓冲→弹性扩容→拒绝保护

2025-06-02 10:45:06 1073

原创 基于对象大小的队列

摘要:本文提出一种基于对象字节大小的阻塞队列(SizeBasedBlockingQueue),用于解决传统队列按元素个数控制内存的不足。该方案通过装饰器模式封装原生队列,使用jol-core工具动态计算对象内存占用,在put/take操作时维护原子计数器,当超过最大字节阈值时自动阻塞生产者线程。设计包含完整类结构、流程图和代码实现,支持自定义对象大小估算策略,适用于数据库迁移等需要精确控制内存缓存的场景。(149字)

2025-06-01 22:55:57 876

原创 Java 内存控制框架设计与实现方案

《Java 内存监控框架设计与实现》 摘要:本文介绍了一个低侵入式的Java内存监控框架MemoryMonitor,主要功能包括:1)实时监控JVM堆内存使用情况;2)跟踪集合类(Map/List/Set)的大小和内存占用;3)检测大对象并报警;4)支持Prometheus监控和Web UI展示。该框架采用模块化设计,包含内存采样模块(MemorySampler)、集合监控中心(CollectionMonitor)、对象大小估算工具(ObjectSizeUtil)和报警系统(MemoryAlertSyste

2025-06-01 22:40:35 864

原创 基于生产者-消费者模式的框架,用于顺序读取 MySQL Binlog文件

本文介绍了一个基于生产者-消费者模型的binlog处理系统架构设计。系统由三个核心模块组成:BinlogReader作为生产者顺序读取binlog文件并解析事件;BlockingQueue作为缓冲队列实现模块解耦;BinlogProcessor作为消费者多线程处理事件。架构具备顺序读取、多线程消费、扩展性强等特点,支持未来接入Kafka等消息中间件。文中还提供了详细的流程图和Java代码实现,包括事件封装类、生产者、消费者以及主程序的完整代码结构,展示了binlog从读取到处理的完整流程。

2025-06-01 22:23:38 788

原创 socketTimeout(即 readTimeout)详解

摘要: 本文详细解析了数据库访问中的 socketTimeout(即 readTimeout)概念,它是客户端等待数据库返回数据的最大时间,若超时则抛出异常。文章通过流程图和代码示例说明其在数据库交互中的位置与作用,并与 connectTimeout、queryTimeout 对比区分。 关键点包括: socketTimeout 控制客户端接收数据的时间,适用于查询结果传输或网络延迟场景; 其与数据库执行时间(queryTimeout)和连接建立时间(connectTimeout)相互独立; 结合实际案例(

2025-06-01 22:13:39 1604

原创 connectTimeout vs queryTimeout vs socketTimeout 详解

摘要:本文详细解析了数据库连接中的三种关键超时机制:connectTimeout(连接超时)、queryTimeout(查询超时)和socketTimeout/readTimeout(网络读取超时)。通过对比表格展示核心区别,用餐厅点餐的比喻形象说明三者的作用差异,并绘制JDBC请求流程图展示超时触发阶段。文章包含完整的Java代码示例模拟各种超时场景,分析每种超时的具体表现和异常输出。最后对比了不同数据库的超时支持情况,并给出实际开发中的配置建议。三种超时机制分别保护"连接建立→SQL执行→结果

2025-06-01 21:08:41 1015

原创 Java 应用中常见的各种“超时”机制详解

Java应用中的超时机制详解:文章系统梳理了各类超时场景及配置方式,包括数据库(连接/查询/事务超时)、网络(Socket/HTTP超时)、并发(线程/锁/Future超时)以及微服务/RPC等场景。重点分析了超时原理、配置方法(通过JDBC、Spring、HttpClient等方式)和典型异常处理,并提供了最佳实践建议。所有超时机制的核心目标在于保护系统资源,防止慢请求影响整体性能,开发者应根据业务场景合理设置不同层级的超时参数。

2025-06-01 20:58:31 1013

原创 ConcurrentHashMap原理与核心源码详解

📌 Java 并发编程:ConcurrentHashMap 核心解析 ConcurrentHashMap 是线程安全的哈希表实现,采用 数组+链表/红黑树 结构,通过 CAS+synchronized 实现高效并发(JDK8)。与 HashMap 相比,它支持并发扩容、禁止 null 键值,锁粒度更细(桶级别)。JDK8 优化了 JDK7 的分段锁机制,引入红黑树提升查询效率。核心方法如 put() 通过 synchronized 锁定头节点,get() 无锁读取。适用缓存、计数器等高并发场景,需注意键值

2025-06-01 20:45:43 1103

原创 BlockingQueue 原理与 ArrayBlockingQueue 核心源码详解

摘要: BlockingQueue是Java并发包中支持阻塞操作的队列接口,常见实现包括ArrayBlockingQueue(数组结构、有界)、LinkedBlockingQueue(链表结构、可选有界)和PriorityBlockingQueue(优先级排序)。以ArrayBlockingQueue为例,其通过ReentrantLock和两个Condition(notEmpty/notFull)实现线程安全,采用环形数组存储数据,put()方法在队列满时阻塞生产者线程,take()在队列空时阻塞消费者线程

2025-06-01 20:33:51 920

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除