Kafka Connect如何實現同步RDS binlog資料?

趙鈺瑩發表於2018-05-15

  本文介紹如何在E-MapReduce上使用Kafka Connect實現同步RDS binlog資料

  1. 背景

  在我們的業務開發中,往往會碰到下面這個場景:

  業務更新資料寫到資料庫中

  業務更新資料需要實時傳遞給下游依賴處理

  所以傳統的處理架構可能會這樣:

Kafka Connect如何實現同步RDS binlog資料

  但這個架構也存在著不少弊端:我們需要在專案中維護很多傳送訊息的程式碼。新增或者更新訊息都會帶來不少維護成本。所以,更好的處理方式應該是直接將資料庫的資料接入到流式系統中,如下圖:

Kafka Connect如何實現同步RDS binlog資料

  本文將演示如何在E-MapReduce上實現將RDS binlog實時同步到Kafka叢集中。

  2. 環境準備

  實驗中使用VPC網路環境,以下例項建立時預設都是在VPC環境下。

  2.1 準備一個測試RDS資料庫

  建立一個RDS例項,版本選擇5.7。這裡不贅述如何建立RDS,詳細流程請參考RDS文件。建立完如圖:

Kafka Connect如何實現同步RDS binlog資料

  2.2 準備一個Kafka叢集

  建立一個E-MapReduce Kafka叢集,版本選擇EMR-3.11.0。需要注意,這裡必須選擇EMR-3.11.0以上版本,否則不會預設安裝啟動Kafka Connect服務。詳細建立流程請參考E-MapReduce文件。建立完如圖:

Kafka Connect如何實現同步RDS binlog資料

  注意:RDS例項和E-MapReduce Kafka叢集最好在同一個VPC中,否則需要打通兩個VPC之間的網路。

  3. Kafka Connect

  3.1 Connector

  Kafka Connect是一個用於Kafka和其他資料系統之間進行資料傳輸的工具,它可以實現基於Kafka的資料管道,打通上下游資料來源。我們需要做的就是在Kafka Connect服務上執行一個Connector,這個Connector是具體實現如何從/向資料來源中讀/寫資料。Confluent提供了很多Connector實現,你可以在這裡下載。不過今天我們使用Debezium提供的一個MySQL Connector外掛,下載地址。

  下載這個外掛,並將解壓出來的jar包全部複製到kafka lib目錄下。注意:需要將這些jar包複製到Kafka叢集所有機器上。

  在Kafka叢集的服務列表中重啟Kafka Connect元件。

Kafka Connect如何實現同步RDS binlog資料

  3.2 啟動Connector

  在建立connector前,我們需要做一番配置,這裡羅列一些Debezium MySQL Connector的主要配置項:

Kafka Connect如何實現同步RDS binlog資料

  登入到Kafka叢集,配置並建立一個connector,命令如下:

Kafka Connect如何實現同步RDS binlog資料

  這時,我們可以看到一個建立好的connector,如圖:

Kafka Connect如何實現同步RDS binlog資料

  3.3 注意事項

  server_id是多少?:你可以在RDS執行"SELECT @@server_id;"查到。

  建立connector時可能會出現連線失敗,請確保RDS的白名單已經授權了Kafka叢集機器訪問。

  4 測試

  4.1 建立一張表

Kafka Connect如何實現同步RDS binlog資料

  一會之後,Kafka叢集中會自動建立一個對應的topic

Kafka Connect如何實現同步RDS binlog資料

  插入幾條資料

Kafka Connect如何實現同步RDS binlog資料

  檢視binlog資料

  檢視fulfillment.mugen.students這個topic,是否有剛剛新插入的資料

Kafka Connect如何實現同步RDS binlog資料

  結果如圖所示:

Kafka Connect如何實現同步RDS binlog資料

  5. 資料

  confluent官方文件

  debezium官網

  kafka官方文件 http://kafka.apache.org/documentation.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31077337/viewspace-2154534/,如需轉載,請註明出處,否則將追究法律責任。

相關文章