這篇文章主要介紹“Kafka的原理及單機(jī)部署方式”,在日常操作中,相信很多人在Kafka的原理及單機(jī)部署方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Kafka的原理及單機(jī)部署方式”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

kafka是由Apache軟件基金會(huì)發(fā)布的一個(gè)開源流處理平臺,由Scala和Java編寫。它是一種高吞吐量的分布式發(fā)布的訂閱消息系統(tǒng),它可以處理消費(fèi)者規(guī)模的網(wǎng)站中的所有動(dòng)作流數(shù)據(jù)。
這種動(dòng)作(網(wǎng)頁瀏覽,搜索和其他用戶的行動(dòng))是在現(xiàn)代網(wǎng)絡(luò)上的許多社會(huì)功能的一個(gè)關(guān)鍵因素。 這些數(shù)據(jù)通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop一樣的日志數(shù)據(jù)和離線分析系統(tǒng),但又要求實(shí)時(shí)處理的限制,這是一個(gè)可行的解決方案。Kafka的目的是通過Hadoop的并行加載機(jī)制來統(tǒng)一線上和離線的消息處理,也是為了通過集群來提供實(shí)時(shí)的消息。
kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),具有以下特性:
通過磁盤數(shù)據(jù)結(jié)構(gòu)提供消息的持久化,這種結(jié)構(gòu)對于即使數(shù)以TB的消息存儲也能夠保持長時(shí)間的穩(wěn)定性能;
持久性:使用文件性存儲,日志文件存儲消息,需要寫入硬盤,采用達(dá)到一定閾值才寫入硬盤,從而減少磁盤I/O,如果kafka突然宕機(jī),數(shù)據(jù)會(huì)丟失一部分;
高吞吐量:即使是非常普通的硬件kafka也可以支持每秒數(shù)百萬的消息;
支持通過kafka服務(wù)器和消費(fèi)機(jī)集群來分區(qū)消息;
支持Hadoop并行數(shù)據(jù)加載。
Broker:消息中間件處理節(jié)點(diǎn),一個(gè)Kafka節(jié)點(diǎn)就是一個(gè)broker,一個(gè)或者多個(gè)Broker可以組成一個(gè)Kafka集群;
Topic:Kafka根據(jù)topic對消息進(jìn)行歸類,發(fā)布到Kafka集群的每條消息都需要指定一個(gè)topic;
Producer:消息生產(chǎn)者,向Broker發(fā)送消息的客戶端;
Consumer:消息消費(fèi)者,從Broker讀取消息的客戶端;
ConsumerGroup:每個(gè)Consumer屬于一個(gè)特定的Consumer Group,一條消息可以發(fā)送到多個(gè)不同的Consumer Group,但是一個(gè)Consumer Group中只能有一個(gè)Consumer能夠消費(fèi)該消息;
Partition:物理上的概念,一個(gè)topic可以分為多個(gè)partition,每個(gè)partition內(nèi)部是有序的。
一個(gè)topic可以認(rèn)為一個(gè)一類消息,每個(gè)topic將被分成多個(gè)partition,每個(gè)partition在存儲層面是append log文件。任何發(fā)布到此partition的消息都會(huì)被追加到log文件的尾部,每條消息在文件中的位置稱為offset(偏移量),offset為long型的數(shù)字,它唯一標(biāo)記一條消息。每條消息都被append到partition中,是順序?qū)懘疟P,因此效率非常高(順序?qū)懘疟P比隨機(jī)寫內(nèi)存的速度還要高,這是kafka高吞吐率的一個(gè)很重要的保證)。

每一條消息被發(fā)送到broker中,會(huì)根據(jù)partition規(guī)則選擇被存儲到哪一個(gè)partition(默認(rèn)采用輪詢的方式進(jìn)行寫入數(shù)據(jù))。如果partition規(guī)則設(shè)置合理,所有消息可以均勻分布到不同的partition里,這樣就實(shí)現(xiàn)了水平擴(kuò)展。(如果一個(gè)topic對應(yīng)一個(gè)文件,那這個(gè)文件所在的機(jī)器I/O將會(huì)成為這個(gè)topic的性能瓶頸,而partition解決了這個(gè)問題),如果消息被消費(fèi)則保留append.log兩天。

如上圖所示,一個(gè)典型的kafka體系架構(gòu)包括若干Producer(可以是服務(wù)器日志,業(yè)務(wù)數(shù)據(jù),頁面前端產(chǎn)生的page view等),若干個(gè)broker(kafka支持水平擴(kuò)展,一般broker數(shù)量越多,集群吞吐率越高),若干Consumer(Group),以及一個(gè)Zookeeper集群。kafka通過Zookeeper管理集群配置,選舉出leader,以及在consumer group發(fā)生變化時(shí)進(jìn)行重新調(diào)整。Producer使用push(推)模式將消息發(fā)布到broker,consumer使用pull(拉)模式從broker訂閱并消費(fèi)消息。
zookeeper群集中有兩個(gè)角色:leader和follower,leader對外提供服務(wù),follower負(fù)責(zé)leader里面所產(chǎn)生內(nèi)容同步消息寫入生成時(shí)產(chǎn)生replicas(副本);
kafka的高可靠性的保證來源于其健壯的副本(replicas)策略。通過調(diào)節(jié)其副本相關(guān)參數(shù),可以使得kafka在性能和可靠性之間運(yùn)轉(zhuǎn)之間的游刃有余。kafka從0.8.x版本開始提供partition級別的復(fù)制的。
kafka中消息是以topic進(jìn)行分類的,生產(chǎn)者通過topic向kafka broker發(fā)送消息,消費(fèi)者通過topic讀取數(shù)據(jù)。然而topic在物理層面又能以partition為分組,一個(gè)topic可以分為若干個(gè)partition,partition還可以細(xì)分為segment,一個(gè)partition物理上由多個(gè)segment組成。
為了便于說明問題,假設(shè)這里只有一個(gè)kafka集群,且這個(gè)集群只有一個(gè)kafka broker,也就是只有一臺物理機(jī)。在這個(gè)kafka broker的server.properties配置文件中定義kafka的日志文件存放路徑以此來設(shè)置kafka消息文件存儲目錄,與此同時(shí)創(chuàng)建一個(gè)topic:test,partition的數(shù)量為4,啟動(dòng)kafka就可以在日志存放路徑中看到生成4個(gè)目錄,在kafka文件存儲中,同一個(gè)topic下有多個(gè)不同的partition,每個(gè)partition為一個(gè)目錄,partition的名稱規(guī)則為:topic名稱+有序序號,第一個(gè)序號從0開始。
segment是什么?
如果就以partition為最小存儲單位,我們可以想象當(dāng)Kafka producer不斷發(fā)送消息,必然會(huì)引起partition文件的無限擴(kuò)張,這樣對于消息文件的維護(hù)以及已經(jīng)被消費(fèi)的消息的清理帶來嚴(yán)重的影響,所以這里以segment為單位又將partition細(xì)分。每個(gè)partition(目錄)相當(dāng)于一個(gè)巨型文件被平均分配到多個(gè)大小相等的segment(段)數(shù)據(jù)文件中(每個(gè)segment 文件中消息數(shù)量不一定相等)這種特性也方便old segment的刪除,即方便已被消費(fèi)的消息的清理,提高磁盤的利用率。每個(gè)partition只需要支持順序讀寫就行。
segment文件由兩部分組成,分別為“.index”文件和“.log”文件,分別表示為segment索引文件和數(shù)據(jù)文件。這兩個(gè)文件的命令規(guī)則為:partition全局的第一個(gè)segment從0開始,后續(xù)每個(gè)segment文件名為上一個(gè)segment文件最后一條消息的offset值(偏移量),數(shù)值大小為64位,20位數(shù)字字符長度,沒有數(shù)字用0填充。
當(dāng)producer向leader發(fā)送數(shù)據(jù)時(shí),可以通request.required.acks參數(shù)來設(shè)置數(shù)據(jù)可靠性的級別:
1(默認(rèn)):producer的leader已成功收到數(shù)據(jù)并得到確認(rèn)。如果leader宕機(jī)了,則會(huì)丟失數(shù)據(jù);
0 :producer無需等待來自broker的確認(rèn)而繼續(xù)發(fā)送下一批消息。這種情況下數(shù)據(jù)傳輸效率高,但是數(shù)據(jù)可靠性確是最低的;
-1:producer需要等待所有follower都確認(rèn)接收到數(shù)據(jù)后才算一次發(fā)送完成,可靠性高。
一條消息只有被所有follower都從leader復(fù)制過去才會(huì)被認(rèn)為已提交。這樣就避免了部分?jǐn)?shù)據(jù)被寫進(jìn)了leader,還沒來得及被任何follower復(fù)制就宕機(jī)了,而造成數(shù)據(jù)丟失。而對于producer而言,它可以選擇是否等待消息commit。
一種非常常用的選舉leader的方式是“少數(shù)服從多數(shù)”,在進(jìn)行數(shù)據(jù)的復(fù)制過程中,存在多個(gè)follower,并且每個(gè)follower的數(shù)據(jù)速度都不相同,當(dāng)leader宕機(jī)后,當(dāng)前的follower上誰的數(shù)據(jù)最多誰就是leader。
kafka服務(wù)依賴JAVA環(huán)境,我這里默認(rèn)有。
kafka的安裝包可以從我的網(wǎng)盤鏈接中下載。
#解包 [root@kafka src]# tar zxf kafka_2.11-2.2.1.tgz [root@kafka src]# mv kafka_2.11-2.2.1 /usr/local/kafka [root@kafka src]# cd /usr/local/kafka/bin/ #啟動(dòng)zookeeper [root@kafka bin]# ./zookeeper-server-start.sh ../config/zookeeper.properties & #啟動(dòng)kafka [root@kafka bin]# ./kafka-server-start.sh ../config/server.properties & [root@kafka bin]# netstat -anpt | grep 9092 #確定端口在監(jiān)聽
由于kafka是通過zookeeper來調(diào)度的,所以,即使是單機(jī)kafka也需要啟動(dòng)zookeeper服務(wù),kafka的安裝目錄下是默認(rèn)集成了zookeeper的,直接啟動(dòng)即可。
#在本機(jī)創(chuàng)建kafka,副本數(shù)量為1,分區(qū)數(shù)量為1 [root@kafka bin]# ./kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test #查看本機(jī)的topic [root@kafka bin]# ./kafka-topics.sh --list --bootstrap-server localhost:9092 #發(fā)送消息到test [root@kafka bin]# ./kafka-console-producer.sh --broker-list localhost:9092 --topic test >aaaa >bbbb >cccc #開啟新的終端,進(jìn)行讀取消息測試,“--from-beginning”表示從開頭讀取 [root@kafka bin]# ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning aaaa bbbb cccc
到此,關(guān)于“Kafka的原理及單機(jī)部署方式”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站標(biāo)題:Kafka的原理及單機(jī)部署方式-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article46/diiheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站收錄、用戶體驗(yàn)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容