? 消息系統(tǒng)負(fù)責(zé)將數(shù)據(jù)從一個(gè)應(yīng)用程序傳輸?shù)搅硪粋€(gè)應(yīng)用程序填帽,因此應(yīng)用程序可以專注于數(shù)據(jù),但不擔(dān)心如何共享它。 分布式消息傳遞基于可靠消息隊(duì)列的概念悔政。 消息在客戶端應(yīng)用程序和消息傳遞系統(tǒng)之間異步排隊(duì)翁涤。 有兩種類(lèi)型的消息模式可用 - 一種是點(diǎn)對(duì)點(diǎn)桥言,另一種是發(fā)布 - 訂閱(pub-sub)消息系統(tǒng)。
Kafka概述
關(guān)于kafka
? Apache Kafka是一個(gè)分布式發(fā)布 - 訂閱消息系統(tǒng)和一個(gè)強(qiáng)大的隊(duì)列葵礼,可以處理大量的數(shù)據(jù)号阿,并使您能夠?qū)⑾囊粋€(gè)端點(diǎn)傳遞到另一個(gè)端點(diǎn)。 Kafka適合離線和在線消息消費(fèi)鸳粉。 Kafka消息保留在磁盤(pán)上扔涧,并在群集內(nèi)復(fù)制以防止數(shù)據(jù)丟失。 Kafka構(gòu)建在ZooKeeper同步服務(wù)之上届谈。 它與Apache Storm和Spark非常好地集成枯夜,用于實(shí)時(shí)流式數(shù)據(jù)分析。
? Kafka是一個(gè)統(tǒng)一的平臺(tái)艰山,用于處理所有實(shí)時(shí)數(shù)據(jù)Feed湖雹。 Kafka支持低延遲消息傳遞,并在出現(xiàn)機(jī)器故障時(shí)提供對(duì)容錯(cuò)的保證曙搬。 它具有處理大量不同消費(fèi)者的能力摔吏。 Kafka非常快纵装,執(zhí)行2百萬(wàn)寫(xiě)/秒征讲。 Kafka將所有數(shù)據(jù)保存到磁盤(pán),這實(shí)質(zhì)上意味著所有寫(xiě)入都會(huì)進(jìn)入操作系統(tǒng)(RAM)的頁(yè)面緩存橡娄。 這使得將數(shù)據(jù)從頁(yè)面緩存?zhèn)鬏數(shù)骄W(wǎng)絡(luò)套接字非常有效诗箍。
好處
- 可靠性:kafka是分布式,分區(qū)挽唉,復(fù)制的容錯(cuò)的滤祖。
- 可擴(kuò)展性:kafka消息傳遞系統(tǒng)輕松縮放才避,無(wú)需停機(jī)。
- 耐用性:kafka使用“分布式提交日志”氨距,消息會(huì)盡可能快地保留在磁盤(pán)上桑逝,因此它是持久的。
- 性能:kafka對(duì)于發(fā)布和訂閱消息都是具有高吞吐量的的俏让。即時(shí)存儲(chǔ)了許多TB的消息楞遏,它也保持穩(wěn)定的性能。
kafka非呈孜簦快寡喝,并保證零停機(jī)和零數(shù)據(jù)丟失。
kafka術(shù)語(yǔ)
- Topics(主題):屬于特定類(lèi)別的消息流稱為主題勒奇。數(shù)據(jù)存儲(chǔ)在主題中预鬓。主題被拆分成分區(qū)。對(duì)于每個(gè)主題赊颠,kafka保存一個(gè)分區(qū)的數(shù)據(jù)格二。每個(gè)這樣的分區(qū)包含不可變有序序列的消息。分區(qū)被實(shí)現(xiàn)為具有相等大小的一組分段文件竣蹦。
- Partition(分區(qū)):主題可能有許多分區(qū)顶猜,因此它可以處理任意數(shù)量的數(shù)據(jù),分區(qū)布置在不同的服務(wù)器上痘括,負(fù)載均衡长窄,打破性能瓶頸。
- Partition offset(分區(qū)偏移):每個(gè)分區(qū)消息具有稱為“offset”的唯一序列標(biāo)識(shí)纲菌。
- Replicas of partition(分區(qū)備份):副本只是一個(gè)分區(qū)的“備份”挠日。副本從不讀取或?qū)懭霐?shù)據(jù)。他們用于防止數(shù)據(jù)丟失翰舌。
- Brokers(經(jīng)紀(jì)人):(1)代理是負(fù)責(zé)維護(hù)發(fā)布數(shù)據(jù)的簡(jiǎn)單系統(tǒng)嚣潜。每個(gè)代理中的每個(gè)主題可以具有0個(gè)或多個(gè)分區(qū)。假設(shè)灶芝,如果在一個(gè)主題和N個(gè)代理中有N個(gè)分區(qū)郑原,每個(gè)代理將有一個(gè)分區(qū)唉韭。(2)假設(shè)在一個(gè)主題中有N個(gè)分區(qū)并且多于N個(gè)代理(n+m)夜涕,則每一個(gè)N代理將在具有一個(gè)分區(qū),并且下一個(gè)M代理將不具有用于該特定主題的任何分區(qū)属愤。(3)假設(shè)在一個(gè)主題中有N個(gè)分區(qū)并且小于N個(gè)代理(n-m)女器,每個(gè)代理將在他們之間具有一個(gè)或多個(gè)分區(qū)共享。由于代理之間的負(fù)載分布不相等住诸,不推薦使用此方案驾胆。
- kafka cluster(kafka集群):kafka有多個(gè)代理被稱為kafka集群涣澡。可以擴(kuò)展kafka集群丧诺,無(wú)需停機(jī)入桂。這些集群用于管理消息數(shù)據(jù)的持久性和復(fù)制。
- Producers(生產(chǎn)者):生產(chǎn)者是發(fā)送給一個(gè)或多個(gè)kafka主題的消息的發(fā)布者驳阎。生產(chǎn)者向kafka經(jīng)紀(jì)人發(fā)送數(shù)據(jù)抗愁。每當(dāng)生產(chǎn)者將消息發(fā)布給代理時(shí),代理只需將消息附加到最后一段文件呵晚。實(shí)際上蜘腌,該消息將被附加到分區(qū)。生產(chǎn)者還可以向他們選擇的分區(qū)發(fā)送消息饵隙。
- Consumers(消費(fèi)者):消費(fèi)者從經(jīng)紀(jì)人處讀取數(shù)據(jù)撮珠。消費(fèi)者訂閱一個(gè)或多個(gè)主題,并通過(guò)從代理中提取數(shù)據(jù)來(lái)使用已發(fā)布的消息金矛。
- Leader(領(lǐng)導(dǎo)者):負(fù)責(zé)給定分區(qū)的所有讀取和寫(xiě)入的節(jié)點(diǎn)芯急。每個(gè)分區(qū)都有一個(gè)服務(wù)器充當(dāng)Leader。
-
Follower(追隨者):跟隨領(lǐng)導(dǎo)者指令的節(jié)點(diǎn)被稱為Follower驶俊。如果領(lǐng)導(dǎo)失敗志于,一個(gè)追隨者將自動(dòng)成為新的領(lǐng)導(dǎo)者。跟隨者作為正常的消費(fèi)者废睦,拉取消息并更新自己的數(shù)據(jù)存儲(chǔ)伺绽。kafka1.png