最近研究了數據庫實時轉移的方案,目的是要把數據庫中某些表的指定數據實時的轉移到別的數據庫中。html
這與平時瞭解的數據庫備份概念不一樣,數據庫備份是對全庫數據進行復制,永許有必定的延時。而本次研究的是對數據過濾後實時的轉移,延遲時間要控制到毫秒級。nginx
在調研的過程當中瞭解到Confluent平臺能夠很好的實現這個功能,因而開始逐步深刻探究其使用方法和工做原理。程序員
但在實踐的過程當中發現國內用此平臺的很少,這方面的資料很是之少,都是些隻言片語的介紹,並無一個實踐的教程。web
各類資料搜索下來,發現惟一的途徑只能經過官網去學習,可是官網都是英文文檔,對於英語很差的人學習起來更是吃力。sql
最後本人經過對官網文檔的翻譯,以及一些源碼的閱讀,最終成功搭建了一套實時數據轉移系統,運行結果也比較穩定,知足了實際需求。數據庫
在此我也把此次的學習、實踐成果分享出來,供須要的人蔘考,避免後來人走一些彎路。apache
Confluent 官網資料不少,本章主要對一些必要的概念或者是和本實驗有關的東西進行重點講解。安全
提及Kafka相信你們不少人都知道,知道是一個高吞吐量的分佈式發佈訂閱消息系統,國內不少公司也在用,但對於Confluent你們可能相對了解的較少。app
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能夠實現的功能。
Confluent目前提供了社區版和商業版兩個版本,社區版永久免費,商業版面向企業收費。
社區版提供了Connectors、REST Proxy、KSQL、Schema-Registry等基礎服務。
商業版爲企業提供了控制面板、負載均衡,跨中心數據備份、安全防禦等高級特性。
經過對兩個版本功能的比對,發現社區版已經能知足咱們的要求,所以本文後面都以社區版來進行研究。
下載連接:www.confluent.io/download/
解壓下載的社區版本包,包含如下文件夾:
各文件目錄功能描述以下: 經過查看bin和etc目錄發現每一個組件都互相獨立,都有各自的啓動/中止腳本以及相應的配置文件,能夠對各項服務進行靈活的配置。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]
複製代碼
從上面命令能夠看到服務的啓動關閉都有必定的順序性,不能隨意顛倒。
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/
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來進行消息傳輸。
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協議或客戶端的狀況下,很容易的生成和使用消息,並且還能夠查看集羣狀態以及執行管理操做。
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進行管理和序列化操做。
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免費讓你們使用,提供的列表以下:
這些connector均可以拿來無償使用,並且Confluent 在GitHub上提供了源碼,能夠根據自身業務需求進行修改。
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的數據提供查詢服務.
以上主要對Confluent的起源,Confluent Platform的功能、組成以及相關服務進行了介紹。相信你們經過本文對Confluent有了初步的認識與瞭解,這也爲後面的實踐打下了基礎。
由於Confluent Platform功能龐大,服務衆多,剛開始用起來也可能比較迷惑。但好在官網各類文檔比較詳細,也有相應的博客供你們交流,若是有本文還未說明的地方,你們也能夠到官網進一步查閱。
最後盡請期待接下來的實踐篇,下篇將一步步介紹如何搭建出一套高性能的數據轉移系統。
想要了解更多,關注公衆號:七分熟pizza