1.背景
最近研究了數(shù)據(jù)庫(kù)實(shí)時(shí)轉(zhuǎn)移的方案,目的是要把數(shù)據(jù)庫(kù)中某些表的指定數(shù)據(jù)實(shí)時(shí)的轉(zhuǎn)移到別的數(shù)據(jù)庫(kù)中穷绵。
這與平時(shí)了解的數(shù)據(jù)庫(kù)備份概念不同轿塔,數(shù)據(jù)庫(kù)備份是對(duì)全庫(kù)數(shù)據(jù)進(jìn)行復(fù)制,永許有一定的延時(shí)。而本次研究的是對(duì)數(shù)據(jù)過(guò)濾后實(shí)時(shí)的轉(zhuǎn)移勾缭,延遲時(shí)間要控制到毫秒級(jí)揍障。
在調(diào)研的過(guò)程中了解到Confluent平臺(tái)可以很好的實(shí)現(xiàn)這個(gè)功能,于是開始逐步深入探究其使用方法和工作原理俩由。
但在實(shí)踐的過(guò)程中發(fā)現(xiàn)國(guó)內(nèi)用此平臺(tái)的不多毒嫡,這方面的資料非常之少,都是些只言片語(yǔ)的介紹幻梯,并沒(méi)有一個(gè)實(shí)踐的教程兜畸。
各種資料搜索下來(lái),發(fā)現(xiàn)唯一的途徑只能通過(guò)官網(wǎng)去學(xué)習(xí)碘梢,但是官網(wǎng)都是英文文檔咬摇,對(duì)于英語(yǔ)不好的人學(xué)習(xí)起來(lái)更是吃力。
最后本人通過(guò)對(duì)官網(wǎng)文檔的翻譯痘系,以及一些源碼的閱讀菲嘴,最終成功搭建了一套實(shí)時(shí)數(shù)據(jù)轉(zhuǎn)移系統(tǒng),運(yùn)行結(jié)果也比較穩(wěn)定汰翠,滿足了實(shí)際需求龄坪。
在此我也把這次的學(xué)習(xí)、實(shí)踐成果分享出來(lái)复唤,供需要的人參考健田,避免后來(lái)人走一些彎路。
2.Confluent初探
Confluent 官網(wǎng)資料很多佛纫,本章主要對(duì)一些必要的概念或者是和本實(shí)驗(yàn)有關(guān)的東西進(jìn)行重點(diǎn)講解妓局。
2.1 Confluent Platform功能
說(shuō)起Kafka相信大家很多人都知道,知道是一個(gè)高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)呈宇,國(guó)內(nèi)很多公司也在用好爬,但對(duì)于Confluent大家可能相對(duì)了解的較少。
Confluent是一家創(chuàng)業(yè)公司甥啄,由當(dāng)時(shí)編寫Kafka的幾位程序員從Linked In公司離職后創(chuàng)立的存炮,Confluent Platform 就是Confluent公司的主要產(chǎn)品,其平臺(tái)實(shí)現(xiàn)主要依賴的就是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.
https://docs.confluent.io/current/getting-started.html
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.
https://docs.confluent.io/current/platform.html
上面兩段話翻譯過(guò)了就是:
Confluent是用來(lái)管理和組織不同數(shù)據(jù)源的流媒體平臺(tái)穆桂,可以實(shí)時(shí)地把不同源和位置的數(shù)據(jù)集成到一個(gè)中心的事件流平臺(tái)。而且還強(qiáng)調(diào)了這個(gè)平臺(tái)很可靠融虽、性能很高享完,總之就是很好用,很強(qiáng)大有额。
下面的圖形象說(shuō)明了Confluent可以實(shí)現(xiàn)的功能般又。
2.2 Confluent Platform組成
Confluent目前提供了社區(qū)版和商業(yè)版兩個(gè)版本彼绷,社區(qū)版永久免費(fèi),商業(yè)版面向企業(yè)收費(fèi)倒源。
社區(qū)版提供了Connectors苛预、REST Proxy、KSQL笋熬、Schema-Registry等基礎(chǔ)服務(wù)热某。
商業(yè)版為企業(yè)提供了控制面板、負(fù)載均衡胳螟,跨中心數(shù)據(jù)備份昔馋、安全防護(hù)等高級(jí)特性。
2.3 社區(qū)版功能介紹
通過(guò)對(duì)兩個(gè)版本功能的比對(duì)糖耸,發(fā)現(xiàn)社區(qū)版已經(jīng)能滿足我們的要求秘遏,因此本文后面都以社區(qū)版來(lái)進(jìn)行研究。
下載鏈接:https://www.confluent.io/download/
解壓下載的社區(qū)版本包嘉竟,包含以下文件夾:
各文件目錄功能描述如下:
通過(guò)查看bin和etc目錄發(fā)現(xiàn)每個(gè)組件都互相獨(dú)立邦危,都有各自的啟動(dòng)/停止腳本以及相應(yīng)的配置文件,可以對(duì)各項(xiàng)服務(wù)進(jìn)行靈活的配置舍扰。
2.4 confluent命令
Confluent提供了多種命令來(lái)對(duì)confluent平臺(tái)進(jìn)行管理監(jiān)控倦蚪,命令列表及描述如下:
上面的命令介紹都比較簡(jiǎn)單,相信大家基本都能看懂边苹,此處也不再一一介紹陵且。
這里主要提一下我們最可能最常用到confluent start <service>,confluent stop <service>兩個(gè)命令个束,這兩個(gè)命令分別用來(lái)啟動(dòng)和停止相應(yīng)的服務(wù)以及依賴的所有服務(wù)項(xiàng)慕购。
start命令如果不帶參數(shù)會(huì)把相關(guān)服務(wù)按順序啟動(dòng),stop會(huì)逆序把各服務(wù)停止茬底。
執(zhí)行start命令:
confluent start
結(jié)果如下沪悲,[UP]表示該服務(wù)啟動(dòng)成功:
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]
執(zhí)行stop命令:
confluent stop
結(jié)果如下,[DOWN]表示該服務(wù)停止成功:
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]
從上面命令可以看到服務(wù)的啟動(dòng)關(guān)閉都有一定的順序性阱表,不能隨意顛倒可训。
3. 服務(wù)功能介紹
3.1 Zookeeper
Zookeeper是一個(gè)開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn)捶枢,是Hadoop、Hbase飞崖、Storm的重要組件烂叔。
Zookeeper主要功能包含:維護(hù)配置信息、命名固歪、提供分布式同步蒜鸡、組管理等集中式服務(wù) 胯努。
Kafka uses ZooKeeper to store persistent cluster metadata and is a critical component of the Confluent Platform deployment.
https://docs.confluent.io/current/zookeeper/deployment.html
Kafka使用ZooKeeper對(duì)集群元數(shù)據(jù)進(jìn)行持久化存儲(chǔ),是Confluent平臺(tái)部署的關(guān)鍵組件逢防。
如果ZooKeeper丟失了Kafka數(shù)據(jù)叶沛,集群的副本映射關(guān)系以及topic等配置信息都會(huì)丟失,最終導(dǎo)致Kafka集群不再正常工作忘朝,造成數(shù)據(jù)丟失的后果灰署。
想要了解更多Zookeeper信息,可以查看官方鏈接:https://zookeeper.apache.org/
3.2 Kafka
Kafka是一個(gè)分布式流處理平臺(tái)局嘁,最初由Linkedin公司開發(fā)溉箕,是一個(gè)基于zookeeper協(xié)調(diào)并支持分區(qū)和多副本的分布式消息系統(tǒng)。
Kafka最大的特性就是可以實(shí)時(shí)的處理大量數(shù)據(jù)以滿足各種需求場(chǎng)景:比如基于hadoop的批處理系統(tǒng)悦昵、低延遲的實(shí)時(shí)系統(tǒng)肴茄、storm/Spark流式處理引擎、web/nginx日志但指、訪問(wèn)日志寡痰、消息服務(wù)等等。
Kafka用Java和Scala語(yǔ)言編寫棋凳,Linkedin于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開源項(xiàng)目拦坠。
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.
http://kafka.apache.org/intro
Kafka工作原理是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),消息隊(duì)列中間件贫橙,主要功能是負(fù)責(zé)消息傳輸贪婉,Confluent就是依賴Kafka來(lái)進(jìn)行消息傳輸。
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.
https://docs.confluent.io/current/kafka-rest/docs/index.html
Confluent提供的Kafka RESTful接口服務(wù)組件卢肃。
可以通過(guò)Restful接口而不是本機(jī)Kafka協(xié)議或客戶端的情況下疲迂,很容易的生成和使用消息,而且還可以查看集群狀態(tài)以及執(zhí)行管理操作。
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.
https://docs.confluent.io/current/schema-registry/docs/index.html
Schema-Registry是為元數(shù)據(jù)管理提供的服務(wù)莫湘,同樣提供了RESTful接口用來(lái)存儲(chǔ)和獲取schemas尤蒿,它能夠保存數(shù)據(jù)格式變化的所有版本,并可以做到向下兼容幅垮。
Schema-Registry還為Kafka提供了Avro格式的序列化插件來(lái)傳輸消息腰池。
Confluent主要用Schema-Registry來(lái)對(duì)數(shù)據(jù)schema進(jìn)行管理和序列化操作。
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.
https://docs.confluent.io/current/connect/index.html
Kafka Connect是 Kafka的一個(gè)開源組件忙芒,是用來(lái)將Kafka與數(shù)據(jù)庫(kù)示弓、key-value存儲(chǔ)系統(tǒng)、搜索系統(tǒng)呵萨、文件系統(tǒng)等外部系統(tǒng)連接起來(lái)的基礎(chǔ)框架奏属。
通過(guò)使用Kafka Connect框架以及現(xiàn)有的連接器可以實(shí)現(xiàn)從源數(shù)據(jù)讀入消息到Kafka,再?gòu)腒afka讀出消息到目的地的功能潮峦。
Confluent 在Kafka connect基礎(chǔ)上實(shí)現(xiàn)了多種常用系統(tǒng)的connector免費(fèi)讓大家使用囱皿,提供的列表如下:
- 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都可以拿來(lái)免費(fèi)使用勇婴,而且Confluent 在GitHub上提供了源碼,可以根據(jù)自身業(yè)務(wù)需求進(jìn)行修改嘱腥。
3.6 ksql-server
KSQL is thestreaming SQL engine for Apache Kafka that you can use to perform streamprocessing tasks using SQL statements.
https://docs.confluent.io/current/streams-ksql.html
KSQL是使用SQL語(yǔ)句對(duì)Apache Kafka執(zhí)行流處理任務(wù)的流式SQL引擎耕渴。
Confluent 使用KSQL對(duì)Kafka的數(shù)據(jù)提供查詢服務(wù).
4. 小結(jié)
以上主要對(duì)Confluent的起源,Confluent Platform的功能齿兔、組成以及相關(guān)服務(wù)進(jìn)行了介紹橱脸。相信大家通過(guò)本文對(duì)Confluent有了初步的認(rèn)識(shí)與了解,這也為后面的實(shí)踐打下了基礎(chǔ)愧驱。
因?yàn)镃onfluent Platform功能龐大慰技,服務(wù)眾多,剛開始用起來(lái)也可能比較迷惑组砚。但好在官網(wǎng)各種文檔比較詳細(xì)吻商,也有相應(yīng)的博客供大家交流,如果有本文還未說(shuō)明的地方糟红,大家也可以到官網(wǎng)進(jìn)一步查閱艾帐。
最后盡請(qǐng)期待接下來(lái)的實(shí)踐篇,下篇將一步步介紹如何搭建出一套高性能的數(shù)據(jù)轉(zhuǎn)移系統(tǒng)盆偿。
如果想獲得更多柒爸,歡迎關(guān)注公眾號(hào):七分熟pizza
公眾號(hào)里我會(huì)分享更多技術(shù)以及職場(chǎng)方面的經(jīng)驗(yàn),大家有什么問(wèn)題也可以直接在公眾號(hào)向我提問(wèn)交流事扭。