Kafka 文件引言

2022-01-13 17:18:07 字數 2595 閱讀 3156

1、開始

1.1 引言

kafka是乙個分布式,分割槽佇列,冗餘備份的訊息儲存服務。它是乙個有獨特設計的訊息系統。

這是什麼意思呢?

1.kafka按主題分布訊息。

2.生產者發布訊息給kafka主題。

3.消費者訂閱並處理被提供的發布出的資訊。

4.kafka作為由乙個或多個中介服務的集群執行。

然後,深入一些,生產者通過網路傳送訊息給用於提供給消費者服務的kafka集群,如圖:

在客戶端和伺服器之間只是進行高效能,與語言無關的tcp協議通訊。

主題和訊息儲存

讓我們先看看kafka上層的概念---主題

主題是訊息被發布到的分類或空間。對於每個主題,kafka集群都維護乙個如下圖的分段空間:

每個分段空間都是有序的,訊息按固定的順序不停的附加到訊息儲存位置。分段空間中的所有訊息都會分配乙個順序id用來在分段中唯一標示每一條訊息。

無論發布的訊息是否被消費,它們都會被kafka集群根據配置保留一段時間。比如,訊息保留設定為兩天,那麼從發布時開始到被丟棄釋放空間,有兩天時間訊息對消費者都是可用的。資料的大小對kafka效能的穩定沒有太大影響,保持大量資料也不會造成問題。

事實上,消費者僅持有基本的描述儲存的消費指向的元資料---偏移量。偏移量由消費者控制:一般情況下,消費者讀取訊息時偏移量也會線性增加,但事實上是否線性是由消費者控制的,它可以按照它希望的任何順序消費訊息。例如,消費者可以重置偏移量來重新消費訊息。

這些設計使得kafka的消費者負擔很小,它們執行幾乎不會受到集群或其他消費者的影響。例如,你可以在不影響現有消費者消費的情況下,在命令列工具中跟蹤任何主題的內容。

分布式

儲存訊息的分割槽分布在kafka的伺服器集群上,集群中的每個伺服器處理分配給它的資料和請求。同時,用於容錯,每個分割槽的資料都可以配置在一定數量的伺服器上做備份。

每個分割槽都是由乙個中心伺服器和不定數量的從伺服器組成。中心伺服器處理所有對分割槽的讀寫請求並分發給從伺服器。如果中心伺服器掛了,從伺服器中會自動選舉乙個成為新的中心伺服器。通過這種方式,將集群中的中心伺服器和從伺服器負載均衡。

生產者

生產者發布訊息到選定的主題。它負責選取訊息分配到所選主題的分割槽中。分配的方式可以是迴圈的平均分配,也可能是通過一些分割槽函式(常說的基於訊息中的一些key)。更常見的是通過權重。

消費者

訊息通訊通常有兩種模式:訊息佇列和發布訂閱。訊息佇列的方式,有乙個消費者池從伺服器讀取訊息,每個訊息最終都會被池中的某乙個消費者消費。發布訂閱方式,訊息會廣播給所有消費者。kafka中充當消費者的是消費者組,它同時支援這兩種模式。

消費者使用消費者組名訂閱訊息,每個發布給主題的訊息都會傳送給已訂閱的消費者組中的乙個消費者例項。消費者例項可以在獨立的程序或獨立的機器中。

如果所有的消費者都在乙個消費者組中,那就如普通的訊息佇列對所有消費者做了負載均衡一樣。

如果所有的消費者都在不同的消費者組中,結果就如發布訂閱方式相同,訊息被廣播給所有的消費者。

相比這兩種情況,更常見的是,每個主題都有少量消費者組作為邏輯訂閱者。考慮到擴充套件和容錯,每個組由多個消費者例項組成。其實,這只是訂閱發布過程中的訂閱方從單一變為了由消費者集群組成而已。

乙個兩台伺服器的kafka 集群分4個分段(p0-p3)帶兩個消費者組。消費者組a有兩個消費者例項組b有4個。

kafka 比傳統訊息系統在訊息順序的保障上更健壯。

傳統的訊息佇列維持訊息在伺服器端有序,多個消費者從伺服器端維持有序儲存訊息的佇列中消費。雖然伺服器端有序的維護訊息,單訊息被非同步傳送給消費者,於是訊息難以有序的到達不同的消費者。這意味著在並行消費的過程中,訊息的有序性被破壞了。訊息系統通常處理這種情況是以獨佔消費的方式在單個過程中只允許從乙個佇列消費,只是這樣就不能併發處理訊息了。

kafka 在這點上做的更好。主題內分割槽本身就帶有並行的意味。kafka 既可以保證訊息的順序又可以為消費者程序池做負載均衡。通過將主題中的分割槽分配給消費者組中的消費者可以做到每乙個分割槽能準確的被消費者組中的乙個消費者消費。通過這種方式,我們確保分割槽只能被乙個消費者按順序讀取並消費。多個分割槽會均衡的負載給多個消費者例項。然而,值得注意的是,消費者例項不能比分區的數量多。

kafka 只提供乙個分區內訊息的絕對順序,而不是乙個主題中不同分割槽的。分割槽通過索引結合key的方式提供分割槽資料來滿足更多的應用。也就是說,想在乙個主題內保證訊息順序,那就只能有乙個分割槽,同時也意味著只能有乙個消費者程序。

保證宣告

kafka 可以確保下列情況:

訊息被生產者傳送給特定的主題分割槽,然後會按照傳送的順序被加入分割槽中。

消費者例項按照儲存也就是加入順序獲取到訊息。

對於乙個有n個節點的主題,可以支援宕掉n-1個伺服器而不丟失任何被提交的資訊。

更多保證資訊會在文件的設計部分列出。

待續。。。

kafka傳遞檔案 kafka學習文件

kafka kafka是乙個分布式訊息佇列。具有高效能 持久化 多副本備份 橫向擴充套件能力。生產者往佇列裡寫訊息,消費者從佇列裡取訊息進行業務邏輯。kafka就是一種發布 訂閱模式。將訊息儲存在磁碟中,以順序讀寫方式訪問磁碟,避免隨機讀寫導致效能瓶頸。kafka對外使用topic的概念,生產者往t...

elk及KAFKA維護文件

測試環境elk及kafka維護文件 es 伺服器ip及賬號密碼 ip 10.5.11.183,10.5.11.184,10.5.11.185 三颱都要操作 es安裝路徑 data es elk使用者啟動 su elk 啟動命令 nohup data es elasticsearch 6.8.3 bi...

《KAFKA官方文件》使用場景

以下是apache kafka 的一些常見使用場景的描述。有關這些實踐領域的一些概述,請參閱此博文。kafka被當作傳統訊息中介軟體的替代品。訊息中介軟體的使用原因有多種 從資料生產者解耦處理,快取未處理的訊息等 與大多數訊息系統相比,kafka具有更好的吞吐量,內建的分割槽,多副本和容錯功能,這使...