Drainer Server 深度剖析:TiDB Binlog 源码阅读系列(七)
2023-10-16 00:39:50
在 TiDB Binlog 源码阅读系列(六)Pump server 介绍 中,我们介绍了 Pump server 的实现。今天,我们将深入探究 Drainer server 的设计和实现,了解其在 TiDB Binlog 中的关键作用。
Drainer server 概述
Drainer server 是 TiDB Binlog 中负责从 Pump server 收集 binlog,进行排序和解析,并同步到不同目标系统的重要组件。它的主要职责包括:
- 从 Pump server 订阅 binlog 事件
- 对 binlog 事件按 commit timestamp 排序
- 解析 binlog 事件,提取数据变更信息
- 将数据变更信息同步到目标系统
Drainer server 的引入是为了解决 Pump server 无法直接与目标系统通信的问题。通过将 binlog 的处理和同步功能分离,TiDB Binlog 可以更加灵活和高效地支持不同的目标系统。
Drainer server 架构
Drainer server 的架构主要由以下几个部分组成:
- Drainer Manager: 负责管理 Drainer server 的生命周期和配置,包括启动、停止和重启。
- Drainer Channel: 用于与 Pump server 建立连接,接收 binlog 事件。
- Sorter: 对收到的 binlog 事件按 commit timestamp 进行排序。
- Parser: 解析排序后的 binlog 事件,提取数据变更信息。
- Syncer: 将解析后的数据变更信息同步到目标系统。
Drainer server 工作流程
Drainer server 的工作流程主要分为以下几个步骤:
- 订阅 binlog 事件: Drainer Channel 与 Pump server 建立连接,订阅 binlog 事件。
- 接收 binlog 事件: 当 Pump server 产生 binlog 事件时,Drainer Channel 会接收并缓存这些事件。
- 排序 binlog 事件: Sorter 对缓存的 binlog 事件按 commit timestamp 进行排序。
- 解析 binlog 事件: Parser 解析排序后的 binlog 事件,提取数据变更信息。
- 同步数据变更: Syncer 将解析后的数据变更信息同步到目标系统。
Drainer server 源码实现
Drainer server 的源码实现主要位于 github.com/pingcap/tidb-binlog/drainer
目录下。主要代码结构如下:
├── cmd
│ └── drainer.go
├── config
│ └── config.go
├── pkg
│ ├── channel
│ ├── errors
│ ├── handler
│ ├── manager
│ ├── parser
│ ├── sorter
│ ├── syncer
│ └── utils
└── vendor
cmd/drainer.go: Drainer server 的主入口文件,负责启动、停止和重启 Drainer server。
config/config.go: Drainer server 的配置管理文件,负责加载和解析配置文件。
pkg/channel: 提供与 Pump server 建立连接和接收 binlog 事件的 Channel 接口。
pkg/errors: 定义 Drainer server 中的错误类型和错误处理函数。
pkg/handler: 提供处理接收到的 binlog 事件的 Handler 接口。
pkg/manager: 负责管理 Drainer server 的生命周期和配置。
pkg/parser: 提供解析 binlog 事件并提取数据变更信息的 Parser 接口。
pkg/sorter: 提供对 binlog 事件按 commit timestamp 排序的 Sorter 接口。
pkg/syncer: 提供将解析后的数据变更信息同步到目标系统的 Syncer 接口。
pkg/utils: 提供一些通用工具函数和数据结构。
总结
Drainer server 是 TiDB Binlog 中负责从 Pump server 获取 binlog,进行排序和解析,并同步到不同目标系统的关键组件。它的引入使得 TiDB Binlog 能够更加灵活和高效地支持不同的目标系统。通过深入理解 Drainer server 的架构、工作流程和源码实现,我们可以更好地了解 TiDB Binlog 的数据同步机制。