TiDB Binlog 源碼閱讀系列文章(一)序

做者:黃佳豪mysql

TiDB Binlog 組件用於收集 TiDB 的 binlog,並準實時同步給下游,如 TiDB、MySQL 等。該組件在功能上相似於 MySQL 的主從複製,會收集各個 TiDB 實例產生的 binlog,並按事務提交的時間排序,全局有序的將數據同步至下游。利用 TiDB Binlog 能夠實現數據準實時同步到其餘數據庫,以及 TiDB 數據準實時的備份與恢復。隨着你們使用的普遍和深刻,咱們遇到了很多因爲對 TiDB Binlog 原理不理解而錯誤使用的狀況,也發現了一些 TiDB Binlog 支持並不完善的場景和能夠改進的設計。git

在這樣的背景下,咱們開展 TiDB Binlog 源碼閱讀分享活動,經過對 TiDB Binlog 代碼的分析和設計原理的解讀,幫助你們理解 TiDB Binlog 的實現原理,和你們進行更深刻的交流,同時也有助於社區參與 TiDB Binlog 的設計、開發和測試。github

背景知識

本系列文章會聚焦 TiDB Binlog 自己,讀者須要有一些基本的知識,包括但不限於:sql

  • Go 語言,TiDB Binlog 由 Go 語言實現,有必定的 Go 語言基礎有助於快速理解代碼。
  • 數據庫基礎知識,包括 MySQL、TiDB 的功能、配置和使用等;瞭解基本的 DDL、DML 語句和事務的基本常識。
  • 瞭解 Kafka 的基本原理。
  • 基本的後端服務知識,好比後臺服務進程管理、RPC 工做原理等。

整體而言,讀者須要有必定 MySQL/TiDB/Kafka 的使用經驗,以及能夠讀懂 Go 語言程序。在閱讀 TiDB Binlog 源碼以前,能夠先從閱讀 《TiDB Binlog 架構演進與實現原理》 入手。數據庫

內容概要

本篇做爲《TiDB Binlog 源碼閱讀系列文章》的序篇,會簡單的給你們講一下後續會講哪些部分以及邏輯順序,方便你們對本系列文章有總體的瞭解。後端

  1. 初識 TiDB Binlog 源碼:總體介紹一下 TiDB Binlog 以及源碼,包括 TiDB Binlog 主要有哪些組件與模塊,以及如何在本地利用集成測試框架快速啓動一個集羣,方便你們體驗 Binlog 同步功能與後續可能修改代碼的測試。架構

  2. pump client 介紹:介紹 pump client 同時讓你們瞭解 TiDB 是如何生成 binlog 的。框架

  3. pump server 介紹:介紹 pump 啓動的主要流程,包括狀態維護,定時觸發 gc 與生成 fake binlog 驅動下游。測試

  4. pump storage 模塊:storage 是 pump 的主要模塊,主要負載 binlog 的存儲,讀取與排序, 可能分多篇講解。設計

  5. drainer server 介紹:drainer 啓動的主要流程,包括狀態維護,如何獲取全局 binlog 數據以及 Schema 信息。

  6. drainer loader package 介紹:loader packge 是負責實時同步數據到 mysql 的模塊,在 TiDB Binlog 裏多處用到。

  7. drainer sync 模塊介紹:以同步 mysql 爲例介紹 drainer 是如何同步到不一樣下游系統。

  8. slave binlog 介紹:介紹 drainer 如何轉換與輸出 binlog 數據到 Kafka。

  9. arbiter 介紹:同步 Kafka 中的數據到下游,經過了解 arbiter,你們能夠了解如何同步數據到其餘下游系統,好比更新 Cache,全文索引系統等。

  10. reparo 介紹:經過了解 reparo,你們能夠將 drainer 的增量備份文件恢復到 TiDB 中。

小結

本篇文章主要介紹了 TiDB Binlog 源碼閱讀系列文章的目的和規劃。下一篇文章咱們會從 TiDB Binlog 的總體架構切入,而後分別講解各個組件和關鍵設計點。更多的源碼內容會在後續文章中逐步展開,敬請期待。

最後歡迎你們參與 TiDB Binlog 的開發。

原文閱讀:

TiDB Binlog 組件用於收集 TiDB 的 binlog,並準實時同步給下游,如 TiDB、MySQL 等。該組件在功能上相似於 MySQL 的主從複製,會收集各個 TiDB 實例產生的 binlog,並按事務提交的時間排序,全局有序的將數據同步至下游。利用 TiDB Binlog 能夠實現數據準實時同步到其餘數據庫,以及 TiDB 數據準實時的備份與恢復。隨着你們使用的普遍和深刻,咱們遇到了很多因爲對 TiDB Binlog 原理不理解而錯誤使用的狀況,也發現了一些 TiDB Binlog 支持並不完善的場景和能夠改進的設計。

在這樣的背景下,咱們開展 TiDB Binlog 源碼閱讀分享活動,經過對 TiDB Binlog 代碼的分析和設計原理的解讀,幫助你們理解 TiDB Binlog 的實現原理,和你們進行更深刻的交流,同時也有助於社區參與 TiDB Binlog 的設計、開發和測試。

背景知識

本系列文章會聚焦 TiDB Binlog 自己,讀者須要有一些基本的知識,包括但不限於:

  • Go 語言,TiDB Binlog 由 Go 語言實現,有必定的 Go 語言基礎有助於快速理解代碼。
  • 數據庫基礎知識,包括 MySQL、TiDB 的功能、配置和使用等;瞭解基本的 DDL、DML 語句和事務的基本常識。
  • 瞭解 Kafka 的基本原理。
  • 基本的後端服務知識,好比後臺服務進程管理、RPC 工做原理等。

整體而言,讀者須要有必定 MySQL/TiDB/Kafka 的使用經驗,以及能夠讀懂 Go 語言程序。在閱讀 TiDB Binlog 源碼以前,能夠先從閱讀 《TiDB Binlog 架構演進與實現原理》 入手。

內容概要

本篇做爲《TiDB Binlog 源碼閱讀系列文章》的序篇,會簡單的給你們講一下後續會講哪些部分以及邏輯順序,方便你們對本系列文章有總體的瞭解。

  1. 初識 TiDB Binlog 源碼:總體介紹一下 TiDB Binlog 以及源碼,包括 TiDB Binlog 主要有哪些組件與模塊,以及如何在本地利用集成測試框架快速啓動一個集羣,方便你們體驗 Binlog 同步功能與後續可能修改代碼的測試。

  2. pump client 介紹:介紹 pump client 同時讓你們瞭解 TiDB 是如何生成 binlog 的。

  3. pump server 介紹:介紹 pump 啓動的主要流程,包括狀態維護,定時觸發 gc 與生成 fake binlog 驅動下游。

  4. pump storage 模塊:storage 是 pump 的主要模塊,主要負載 binlog 的存儲,讀取與排序, 可能分多篇講解。

  5. drainer server 介紹:drainer 啓動的主要流程,包括狀態維護,如何獲取全局 binlog 數據以及 Schema 信息。

  6. drainer loader package 介紹:loader packge 是負責實時同步數據到 mysql 的模塊,在 TiDB Binlog 裏多處用到。

  7. drainer sync 模塊介紹:以同步 mysql 爲例介紹 drainer 是如何同步到不一樣下游系統。

  8. slave binlog 介紹:介紹 drainer 如何轉換與輸出 binlog 數據到 Kafka。

  9. arbiter 介紹:同步 Kafka 中的數據到下游,經過了解 arbiter,你們能夠了解如何同步數據到其餘下游系統,好比更新 Cache,全文索引系統等。

  10. reparo 介紹:經過了解 reparo,你們能夠將 drainer 的增量備份文件恢復到 TiDB 中。

小結

本篇文章主要介紹了 TiDB Binlog 源碼閱讀系列文章的目的和規劃。下一篇文章咱們會從 TiDB Binlog 的總體架構切入,而後分別講解各個組件和關鍵設計點。更多的源碼內容會在後續文章中逐步展開,敬請期待。

最後歡迎你們參與 TiDB Binlog 的開發。

原文閱讀https://www.pingcap.com/blog-cn/tidb-binlog-source-code-reading-1/

相關文章
相關標籤/搜索