返回

Drainer Server 深度剖析:TiDB Binlog 源码阅读系列(七)

见解分享

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 的工作流程主要分为以下几个步骤:

  1. 订阅 binlog 事件: Drainer Channel 与 Pump server 建立连接,订阅 binlog 事件。
  2. 接收 binlog 事件: 当 Pump server 产生 binlog 事件时,Drainer Channel 会接收并缓存这些事件。
  3. 排序 binlog 事件: Sorter 对缓存的 binlog 事件按 commit timestamp 进行排序。
  4. 解析 binlog 事件: Parser 解析排序后的 binlog 事件,提取数据变更信息。
  5. 同步数据变更: 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 的数据同步机制。