1.背景
最近研究了資料庫實時轉移的方案,目的是要把資料庫中某些表的指定資料實時的轉移到別的資料庫中。
這與平時瞭解的資料庫備份概念不同,資料庫備份是對全庫資料進行復制,永許有一定的延時。而本次研究的是對資料過濾後實時的轉移,延遲時間要控制到毫秒級。
在調研的過程中瞭解到Confluent平臺可以很好的實現這個功能,於是開始逐步深入探究其使用方法和工作原理。
但在實踐的過程中發現國內用此平臺的不多,這方面的資料非常之少,都是些隻言片語的介紹,並沒有一個實踐的教程。
各種資料搜尋下來,發現唯一的途徑只能通過官網去學習,但是官網都是英文文件,對於英語不好的人學習起來更是吃力。
最後本人通過對官網文件的翻譯,以及一些原始碼的閱讀,最終成功搭建了一套實時資料轉移系統,執行結果也比較穩定,滿足了實際需求。
在此我也把這次的學習、實踐成果分享出來,供需要的人蔘考,避免後來人走一些彎路。
2.Confluent初探
Confluent 官網資料很多,本章主要對一些必要的概念或者是和本實驗有關的東西進行重點講解。
2.1 Confluent Platform功能
說起Kafka相信大家很多人都知道,知道是一個高吞吐量的分散式釋出訂閱訊息系統,國內很多公司也在用,但對於Confluent大家可能相對了解的較少。
Confluent是一家創業公司,由當時編寫Kafka的幾位程式設計師從Linked In公司離職後創立的,Confluent Platform 就是Confluent公司的主要產品,其平臺實現主要依賴的就是Kafka。
以下是擷取的兩段官方文字介紹:
The Confluent Platform is a streaming platform that enables you to organize and manage data from many different sources with one reliable, high performance system. docs.confluent.io/current/get…
Confluent Platform makes it easy build real-time data pipelines and streaming applications. By integrating data from multiple sources and locations into a single, central Event Streaming Platform for your company. docs.confluent.io/current/pla…
上面兩段話翻譯過了就是:
Confluent是用來管理和組織不同資料來源的流媒體平臺,可以實時地把不同源和位置的資料整合到一箇中心的事件流平臺。而且還強調了這個平臺很可靠、效能很高,總之就是很好用,很強大。
下面的圖形象說明了Confluent可以實現的功能。
2.2 Confluent Platform組成
Confluent目前提供了社群版和商業版兩個版本,社群版永久免費,商業版面向企業收費。
社群版提供了Connectors、REST Proxy、KSQL、Schema-Registry等基礎服務。
商業版為企業提供了控制皮膚、負載均衡,跨中心資料備份、安全防護等高階特性。
2.3 社群版功能介紹
通過對兩個版本功能的比對,發現社群版已經能滿足我們的要求,因此本文後面都以社群版來進行研究。
下載連結:www.confluent.io/download/
解壓下載的社群版本包,包含以下資料夾:
各檔案目錄功能描述如下: 通過檢視bin和etc目錄發現每個元件都互相獨立,都有各自的啟動/停止指令碼以及相應的配置檔案,可以對各項服務進行靈活的配置。2.4 confluent命令
Confluent提供了多種命令來對confluent平臺進行管理監控,命令列表及描述如下:
上面的命令介紹都比較簡單,相信大家基本都能看懂,此處也不再一一介紹。這裡主要提一下我們最可能最常用到confluent start ,confluent stop 兩個命令,這兩個命令分別用來啟動和停止相應的服務以及依賴的所有服務項。
start命令如果不帶引數會把相關服務按順序啟動,stop會逆序把各服務停止。
執行start命令:
confluent start
複製程式碼
結果如下,[UP]表示該服務啟動成功:
Startingzookeeper
zookeeper is[UP]
Startingkafka
kafka is[UP]
Startingschema-registry
schema-registry is[UP]
Startingkafka-rest
kafka-rest is[UP]
Startingconnect
connect is[UP]
Startingksql-server
ksql-server is[UP]
複製程式碼
執行stop命令:
confluent stop
複製程式碼
結果如下,[DOWN]表示該服務停止成功:
Stoppingksql-server
ksql-server is [DOWN]
Stopping connect
connect is [DOWN]
Stopping kafka-rest
kafka-rest is [DOWN]
Stopping schema-registry
schema-registry is [DOWN]
Stopping kafka
kafka is [DOWN]
Stopping zookeeper
zookeeper is [DOWN]
複製程式碼
從上面命令可以看到服務的啟動關閉都有一定的順序性,不能隨意顛倒。
3. 服務功能介紹
3.1 Zookeeper
Zookeeper是一個開放原始碼的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop、Hbase、Storm的重要元件。
Zookeeper主要功能包含:維護配置資訊、命名、提供分散式同步、組管理等集中式服務 。
Kafka uses ZooKeeper to store persistent cluster metadata and is a critical component of the Confluent Platform deployment. docs.confluent.io/current/zoo…
Kafka使用ZooKeeper對叢集後設資料進行持久化儲存,是Confluent平臺部署的關鍵元件。
如果ZooKeeper丟失了Kafka資料,叢集的副本對映關係以及topic等配置資訊都會丟失,最終導致Kafka叢集不再正常工作,造成資料丟失的後果。
想要了解更多Zookeeper資訊,可以檢視官方連結:zookeeper.apache.org/
3.2 Kafka
Kafka是一個分散式流處理平臺,最初由Linkedin公司開發,是一個基於zookeeper協調並支援分割槽和多副本的分散式訊息系統。
Kafka最大的特性就是可以實時的處理大量資料以滿足各種需求場景:比如基於hadoop的批處理系統、低延遲的實時系統、storm/Spark流式處理引擎、web/nginx日誌、訪問日誌、訊息服務等等。
Kafka用Java和Scala語言編寫,Linkedin於2010年貢獻給了Apache基金會併成為頂級開源專案。
Apache Kafka® is a distributed streaming platform. Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system. Store streams of records in a fault-tolerant durable way. Process streams of records as they occur. kafka.apache.org/intro
Kafka工作原理是一種高吞吐量的分散式釋出訂閱訊息系統,訊息佇列中介軟體,主要功能是負責訊息傳輸,Confluent就是依賴Kafka來進行訊息傳輸。
3.3 Kafka-rest
The Confluent REST Proxy provides a RESTful interface to a Kafka cluster, making it easy to produce and consume messages, view the state of thecluster, and perform administrative actions without using the native Kafka protocol or clients. docs.confluent.io/current/kaf…
Confluent提供的Kafka RESTful介面服務元件。
可以通過Restful介面而不是本機Kafka協議或客戶端的情況下,很容易的生成和使用訊息,而且還可以檢視叢集狀態以及執行管理操作。
3.4 Schema-Registry
Schema Registry provides a serving layer for your metadata. Itprovides a RESTful interface for storing and retrieving Avro schemas. It storesa versioned history of all schemas, provides multiple compatibility settingsand allows evolution of schemas according to the configured compatibilitysettings and expanded Avro support. docs.confluent.io/current/sch…
Schema-Registry是為後設資料管理提供的服務,同樣提供了RESTful介面用來儲存和獲取schemas,它能夠儲存資料格式變化的所有版本,並可以做到向下相容。
Schema-Registry還為Kafka提供了Avro格式的序列化外掛來傳輸訊息。
Confluent主要用Schema-Registry來對資料schema進行管理和序列化操作。
3.5 Connect
Kafka Connect is a framework for connecting Kafka with external systems such as databases,key-value stores, search indexes, and file systems.Using Kafka Connect you canuse existing connector implementations for common data sources and sinks to move data into and out of Kafka. docs.confluent.io/current/con…
Kafka Connect是 Kafka的一個開源元件,是用來將Kafka與資料庫、key-value儲存系統、搜尋系統、檔案系統等外部系統連線起來的基礎框架。
通過使用Kafka Connect框架以及現有的聯結器可以實現從源資料讀入訊息到Kafka,再從Kafka讀出訊息到目的地的功能。
Confluent 在Kafka connect基礎上實現了多種常用系統的connector免費讓大家使用,提供的列表如下:
- Kafka Connect ActiveMQ Connector
- Kafka FileStream Connectors
- Kafka Connect HDFS
- Kafka Connect JDBC Connector
- Confluent Kafka Replicator
- Kafka Connect S3
- Kafka Connect Elasticsearch Connector
- Kafka Connect IBM MQ Connector
- Kafka Connect JMS Connector
這些connector都可以拿來免費使用,而且Confluent 在GitHub上提供了原始碼,可以根據自身業務需求進行修改。
3.6 ksql-server
KSQL is thestreaming SQL engine for Apache Kafka that you can use to perform streamprocessing tasks using SQL statements. docs.confluent.io/current/str…
KSQL是使用SQL語句對Apache Kafka執行流處理任務的流式SQL引擎。
Confluent 使用KSQL對Kafka的資料提供查詢服務.
4. 小結
以上主要對Confluent的起源,Confluent Platform的功能、組成以及相關服務進行了介紹。相信大家通過本文對Confluent有了初步的認識與瞭解,這也為後面的實踐打下了基礎。
因為Confluent Platform功能龐大,服務眾多,剛開始用起來也可能比較迷惑。但好在官網各種文件比較詳細,也有相應的部落格供大家交流,如果有本文還未說明的地方,大家也可以到官網進一步查閱。
最後盡請期待接下來的實踐篇,下篇將一步步介紹如何搭建出一套高效能的資料轉移系統。
想要了解更多,關注公眾號:七分熟pizza