elasticsearch入門系列">elasticsearch入門系列
995
2022-05-29
自Flume快速入門系列結(jié)束后,博主決定后面幾篇博客為大家?guī)黻P(guān)于Kafka的知識(shí)分享作為快速入門Kafka系列的第一篇博客,本篇為大家?guī)淼氖荎afka的簡單介紹。
目錄
1. Kafka的定義
2. 消息與消息隊(duì)列
2.1 傳統(tǒng)消息隊(duì)列的應(yīng)用場景
1. MQ傳統(tǒng)應(yīng)用場景之異步處理
2. 流量消峰
2.2 消息隊(duì)列的兩種模式
1. 消息隊(duì)列內(nèi)部實(shí)現(xiàn)原理
2 為什么需要消息隊(duì)列
3. 什么是Kafka
4. Kafka架構(gòu)
5. Kafka的好處
6. 分布式的發(fā)布與訂閱系統(tǒng)
7. kafka的主要應(yīng)用場景
1. Kafka的定義
Kafka是一個(gè)分布式的基于發(fā)布/訂閱模式的消息隊(duì)列,主要應(yīng)用于大數(shù)據(jù)實(shí)時(shí)處理領(lǐng)域。
2. 消息與消息隊(duì)列
消息(Message)
:是指在
應(yīng)用之間傳送的數(shù)據(jù)
,消息可以非常簡單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象。
消息隊(duì)列(Message Queue)
:是
一種應(yīng)用間的通信方式
,消息發(fā)送后可以立即返回,有消息系統(tǒng)來確保信息的可靠專遞,消息發(fā)布者只管把消息發(fā)布到MQ中而不管誰來取,消息使用者只管從MQ中取消息而不管誰發(fā)布的,這樣發(fā)布者和使用者都不用知道對(duì)方的存在。
2.1 傳統(tǒng)消息隊(duì)列的應(yīng)用場景
1. MQ傳統(tǒng)應(yīng)用場景之異步處理
2. 流量消峰
2.2 消息隊(duì)列的兩種模式
1. 消息隊(duì)列內(nèi)部實(shí)現(xiàn)原理
1. 點(diǎn)對(duì)點(diǎn)模式(一對(duì)一,消費(fèi)者主動(dòng)拉取數(shù)據(jù),消息收到后消息清除)
點(diǎn)對(duì)點(diǎn)模式下包括三個(gè)角色:
消息隊(duì)列
發(fā)送者(生產(chǎn)者)
== 接收者(消費(fèi)者)==
點(diǎn)對(duì)點(diǎn)模型通常是一個(gè)基于拉取或者輪詢的消息傳送模型,這種模型從隊(duì)列中請(qǐng)求信息,而不是將消息推送到客戶端。這個(gè)模型的特點(diǎn)是發(fā)送到隊(duì)列的消息被一個(gè)且只有一個(gè)接收者接收處理,即使有多個(gè)消息監(jiān)聽者也是如此。
點(diǎn)對(duì)點(diǎn)的特點(diǎn):
1.每個(gè)消息只有一個(gè)接收者(Consumer)(即一旦被消費(fèi),消息就不再在消息隊(duì)列中);
2.發(fā)送者和接收者間沒有依賴性,發(fā)送者發(fā)送消息之后,不管有沒有接收者在運(yùn)行,都不會(huì)影響到發(fā)送者下次發(fā)送消息;
3.接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功,以便消息隊(duì)列刪除當(dāng)前接收的消息;
2. 發(fā)布/訂閱模式(一對(duì)多,消費(fèi)者消費(fèi)數(shù)據(jù)之后不會(huì)清除消息)
發(fā)布/訂閱模式下包括三個(gè)角色
角色主題(Topic)
== 發(fā)布者(Publisher)==
訂閱者(Subscriber)
發(fā)布訂閱模型則是一個(gè)基于推送的消息傳送模型。發(fā)布訂閱模型可以有多種不同的訂閱者,臨時(shí)訂閱者只在主動(dòng)監(jiān)聽主題時(shí)才接收消息,而持久訂閱者則監(jiān)聽主題的所有消息,即使當(dāng)前訂閱者不可用,處于離線狀態(tài)。
發(fā)布/訂閱模式特點(diǎn):
1.每個(gè)消息可以有多個(gè)訂閱者;
2.發(fā)布者和訂閱者之間有時(shí)間上的依賴性。針對(duì)某個(gè)主題(Topic)的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后,才能消費(fèi)發(fā)布者的消息。
3.為了消費(fèi)消息,訂閱者需要提前訂閱該角色主題,并保持在線運(yùn)行;
2 為什么需要消息隊(duì)列
1.解耦:
允許你獨(dú)立的擴(kuò)展或修改兩邊的處理過程,只要確保它們遵守同樣的接口約束。
2.冗余:
消息隊(duì)列把數(shù)據(jù)進(jìn)行持久化直到它們已經(jīng)被完全處理,通過這一方式規(guī)避了數(shù)據(jù)丟失風(fēng)險(xiǎn)。許多消息隊(duì)列所采用的"插入-獲取-刪除"范式中,在把一個(gè)消息從隊(duì)列中刪除之前,需要你的處理系統(tǒng)明確的指出該消息已經(jīng)被處理完畢,從而確保你的數(shù)據(jù)被安全的保存直到你使用完畢。
3.擴(kuò)展性:
因?yàn)橄㈥?duì)列解耦了你的處理過程,所以增大消息入隊(duì)和處理的頻率是很容易的,只要另外增加處理過程即可。
4.靈活性 & 峰值處理能力:
在訪問量劇增的情況下,應(yīng)用仍然需要繼續(xù)發(fā)揮作用,但是這樣的突發(fā)流量并不常見。如果為以能處理這類峰值訪問為標(biāo)準(zhǔn)來投入資源隨時(shí)待命無疑是巨大的浪費(fèi)。使用消息隊(duì)列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力,而不會(huì)因?yàn)橥话l(fā)的超負(fù)荷的請(qǐng)求而完全崩潰。
5.可恢復(fù)性:
系統(tǒng)的一部分組件失效時(shí),不會(huì)影響到整個(gè)系統(tǒng)。消息隊(duì)列降低了進(jìn)程間的耦合度,所以即使一個(gè)處理消息的進(jìn)程掛掉,加入隊(duì)列中的消息仍然可以在系統(tǒng)恢復(fù)后被處理。
6.順序保證:
在大多使用場景下,數(shù)據(jù)處理的順序都很重要。大部分消息隊(duì)列本來就是排序的,并且能保證數(shù)據(jù)會(huì)按照特定的順序來處理。(Kafka保證一個(gè)Partition內(nèi)的消息的有序性)
7.緩沖:
有助于控制和優(yōu)化數(shù)據(jù)流經(jīng)過系統(tǒng)的速度,解決生產(chǎn)消息和消費(fèi)消息的處理速度不一致的情況。
8.異步通信:
很多時(shí)候,用戶不想也不需要立即處理消息。消息隊(duì)列提供了異步處理機(jī)制,允許用戶把一個(gè)消息放入隊(duì)列,但并不立即處理它。想向隊(duì)列中放入多少消息就放多少,然后在需要的時(shí)候再去處理它們。
3. 什么是Kafka
在流式計(jì)算中,Kafka一般用來緩存數(shù)據(jù),Storm通過消費(fèi)Kafka的數(shù)據(jù)進(jìn)行計(jì)算。
1. Apache Kafka是一個(gè)開源消息系統(tǒng),由Scala寫成。是由Apache軟件基金會(huì)開發(fā)的一個(gè)開源消息系統(tǒng)項(xiàng)目。
2. Kafka最初是由LinkedIn公司開發(fā),并于2011年初開源。2012年10月從Apache Incubator畢業(yè)。該項(xiàng)目的目標(biāo)是為處理實(shí)時(shí)數(shù)據(jù)提供一個(gè)統(tǒng)一、高通量、低等待的平臺(tái)。
3. Kafka是一個(gè)分布式消息隊(duì)列。Kafka對(duì)消息保存時(shí)根據(jù)Topic進(jìn)行歸類,發(fā)送消息者稱為Producer,消息接受者稱為Consumer,此外kafka集群有多個(gè)kafka實(shí)例組成,每個(gè)實(shí)例(server)稱為broker。
4. 無論是kafka集群,還是consumer都依賴于zookeeper集群保存一些meta信息,來保證系統(tǒng)可用性。
4. Kafka架構(gòu)
我們先來看下Kafka的整體架構(gòu)圖:
Kafka的詳細(xì)架構(gòu)圖:
1.Producer :消息生產(chǎn)者,就是向kafka broker發(fā)消息的客戶端;
2.Consumer :消息消費(fèi)者,向kafka broker取消息的客戶端;
3.Topic :可以理解為一個(gè)隊(duì)列;
4.Consumer Group (CG):這是kafka用來實(shí)現(xiàn)一個(gè)topic消息的廣播(發(fā)給所有的consumer)和單播(發(fā)給任意一個(gè)consumer)的手段。一個(gè)topic可以有多個(gè)CG。topic的消息會(huì)復(fù)制(不是真的復(fù)制,是概念上的)到所有的CG,但每個(gè)partion只會(huì)把消息發(fā)給該CG中的一個(gè)consumer。如果需要實(shí)現(xiàn)廣播,只要每個(gè)consumer有一個(gè)獨(dú)立的CG就可以了。要實(shí)現(xiàn)單播只要所有的consumer在同一個(gè)CG。用CG還可以將consumer進(jìn)行自由的分組而不需要多次發(fā)送消息到不同的topic;
5.Broker :一臺(tái)kafka服務(wù)器就是一個(gè)broker。一個(gè)集群由多個(gè)broker組成。一個(gè)broker可以容納多個(gè)topic;
6.Partition:為了實(shí)現(xiàn)擴(kuò)展性,一個(gè)非常大的topic可以分布到多個(gè)broker(即服務(wù)器)上,一個(gè)topic可以分為多個(gè)partition,每個(gè)partition是一個(gè)有序的隊(duì)列。partition中的每條消息都會(huì)被分配一個(gè)有序的id(offset)。kafka只保證按一個(gè)partition中的順序?qū)⑾l(fā)給consumer,不保證一個(gè)topic的整體(多個(gè)partition間)的順序;
7.Offset:kafka的存儲(chǔ)文件都是按照offset.kafka來命名,用offset做名字的好處是方便查找。例如你想找位于2049的位置,只要找到2048.kafka的文件即可。當(dāng)然thefirst offset就是00000000000.kafka。
5. Kafka的好處
可靠性:分布式的,分區(qū),復(fù)制和容錯(cuò)。
可擴(kuò)展性:kafka消息傳遞系統(tǒng)輕松縮放,無需停機(jī)。
耐用性:kafka使用分布式提交日志,這意味著消息會(huì)盡可能快速的保存在磁盤上,因此它是持久的。
性能:kafka對(duì)于發(fā)布和訂閱消息都具有高吞吐量。即使存儲(chǔ)了許多TB的消息,它也能體現(xiàn)出穩(wěn)定的性能。
kafka非???保證零停機(jī)和零數(shù)據(jù)丟失
6. 分布式的發(fā)布與訂閱系統(tǒng)
apache kafka是一個(gè)分布式發(fā)布-訂閱消息系統(tǒng)和一個(gè)強(qiáng)大的隊(duì)列,可以處理大量的數(shù)據(jù),并使能夠?qū)⑾囊粋€(gè)端點(diǎn)傳遞到另一個(gè)端點(diǎn),kafka適合離線和在線消息消費(fèi)。kafka消息保留在磁盤上,并在集群內(nèi)復(fù)制以防止數(shù)據(jù)丟失。kafka構(gòu)建在zookeeper同步服務(wù)之上。它與apache和spark非常好的集成,應(yīng)用于實(shí)時(shí)流式數(shù)據(jù)分析。
7. kafka的主要應(yīng)用場景
指標(biāo)分析
Kafka 通常用于操作監(jiān)控?cái)?shù)據(jù)。這設(shè)計(jì)聚合來自分布式應(yīng)用程序的統(tǒng)計(jì)信息, 以產(chǎn)生操作的數(shù)據(jù)集中反饋。
日志聚合解決方案
kafka可用于跨組織從多個(gè)服務(wù)器收集日志,并使他們以標(biāo)準(zhǔn)的合適提供給多個(gè)服務(wù)器。
流式處理
流式處理框架(spark,storm,?ink)從主題中讀取數(shù)據(jù),對(duì)其進(jìn)行處理,并將處理后的數(shù)據(jù)寫入新的主題,供 用戶和應(yīng)用程序使用,kafka的強(qiáng)耐久性在流處理的上下文中也非常的有用。
本次的分享就到這里了,
看 完 就 贊 , 養(yǎng) 成 習(xí) 慣 ! ! ! \color{#FF0000}{看完就贊,養(yǎng)成習(xí)慣?。?!} 看完就贊,養(yǎng)成習(xí)慣?。?!^ _ ^ ?? ?? ??
碼字不易,大家的支持就是我堅(jiān)持下去的動(dòng)力。后不要忘了關(guān)注我哦!
Kafka 分布式
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。