Kafka随笔日记
afka是一款基于發(fā)布和訂閱的消息系統(tǒng)。一般被稱為分布式提交日志或分布式流平臺(tái)。
Kafka系統(tǒng)是按照一定的順序持久化保存的,可以按需讀取。
Kafka的數(shù)據(jù)單元被稱為消息。類似于數(shù)據(jù)庫中表的一行記錄,消息由字節(jié)組成,所以沒有特別的格式和含義。
消息有一個(gè)可選的元數(shù)據(jù),就是鍵,鍵也是一個(gè)字節(jié)數(shù)組。當(dāng)消息以一種可控的方式寫入分區(qū)時(shí),會(huì)用到鍵,最簡(jiǎn)單的方式就是為鍵生成一個(gè)散列值,然后使用散列值對(duì)主題的分區(qū)屬進(jìn)行取模。這樣可以保證具有相同鍵的消息總是會(huì)寫到相同的分區(qū)。
批次時(shí)一組消息,這些消息屬于同一個(gè)主題和分區(qū),將消息分批次傳輸可以減少網(wǎng)絡(luò)開銷。
消息模式有很多選項(xiàng),比如json,xml,但Kafka的開發(fā)者喜歡使用Apache Avro。
Kafka的消息通過主題進(jìn)行分類,主題就好比數(shù)據(jù)庫中的表。或者文件系統(tǒng)中的文件夾。
主題還可以分成若干個(gè)分區(qū),消息以追加方式寫入分區(qū),按照先入先出的順序被消費(fèi),因此無法在整個(gè)主題范圍內(nèi)保持順序,但可以保證在單個(gè)分區(qū)內(nèi)的順序。
Kafka通過分區(qū)實(shí)現(xiàn)數(shù)據(jù)冗余和伸縮性,分區(qū)可分布在不同的服務(wù)器上,以此來提供比單個(gè)服務(wù)器更強(qiáng)大的性能。
通常使用流來描述Kafka的數(shù)據(jù),流是一組從生產(chǎn)者到消費(fèi)者的數(shù)據(jù)。Kafka以實(shí)時(shí)的方式處理數(shù)據(jù),這叫流失處理,通常與批量處理(Hadoop)做區(qū)別。
Kafka的客戶端就是Kafka的用戶,他們被分為兩種:生產(chǎn)者和消費(fèi)者。除此之外還有其他高級(jí)客戶端API——用于數(shù)據(jù)集成的Kafka Connect API和用于流失處理的Kafka streams.這些高級(jí)客戶端API使用生產(chǎn)者和消費(fèi)者作為內(nèi)部組件,提供了更高級(jí)的功能。
生產(chǎn)者創(chuàng)建消息,一般一個(gè)消息會(huì)被發(fā)布到一個(gè)特定的主題上,生產(chǎn)者默認(rèn)會(huì)把消息均衡地分布到主題的所有分區(qū),這通常是由消息鍵和分區(qū)器來實(shí)現(xiàn)。
消費(fèi)者讀取消息,消費(fèi)者訂閱一個(gè)或多個(gè)主題,并按照消息生成的順序消費(fèi)它們。消費(fèi)者通過檢查消息的偏移量來區(qū)分已經(jīng)讀過的消息。偏移量是另一種元數(shù)據(jù),它是一個(gè)不斷遞增的整數(shù)值。在創(chuàng)建消息時(shí),Kafka會(huì)把它添加到消息里,在給定分區(qū)里,每個(gè)消息的偏移量都是唯一的。
消費(fèi)者把每個(gè)分區(qū)最后讀取的偏移量保存到zookeeper或Kafka上,如果消費(fèi)者關(guān)閉或者重啟,它的讀取狀態(tài)不好丟失。
消費(fèi)者是消費(fèi)者群組的一部分,一般會(huì)有多個(gè)消費(fèi)者共同讀取一個(gè)主題,群組保證每個(gè)分區(qū)只被一個(gè)消費(fèi)者使用。
一個(gè)獨(dú)立的Kafka服務(wù)器稱為一個(gè)broker,broker接收來自生產(chǎn)者的消息,為消息設(shè)置偏移量,并提交消息到磁盤保存。broker為消費(fèi)者提供服務(wù),對(duì)讀取分區(qū)的請(qǐng)求作出響應(yīng),返回提交到磁盤上的消息。
broker是集群的組成部分,每個(gè)集群都會(huì)有一個(gè)broker充當(dāng)集群控制器角色(自動(dòng)選舉),控制器負(fù)責(zé)管理工作。在集群中,一個(gè)分區(qū)從屬于一個(gè)broker,該broker被稱為分區(qū)的首領(lǐng),一個(gè)分區(qū)可以復(fù)制到多個(gè)broker,這種復(fù)制機(jī)制為分區(qū)提供了消息冗余。
保留消息時(shí)Kafka的一個(gè)重要特性,默認(rèn)的保留策略時(shí)這樣的:要么保留一段時(shí)間,要么保留一定的字節(jié)數(shù)。在任一時(shí)刻,達(dá)到其中一個(gè)標(biāo)準(zhǔn),消息就會(huì)被刪除。
Kafka可以無縫支持多個(gè)生產(chǎn)者,也可以支持多個(gè)消費(fèi)者。
Kafka有五個(gè)使用場(chǎng)景:
1.跟蹤用戶的活動(dòng)。
2.傳遞消息。
3.度量指標(biāo)和日志記錄。
4.提交日志。
5.流處理。
標(biāo)簽: Kafka
總結(jié)
- 上一篇: 计算机找不到无线设备,win10找不到无
- 下一篇: 【机器学习11】LAD,K-means,