kafka的特點和優勢

2021-10-01 19:40:09 字數 3996 閱讀 3821

高吞吐量:kafka 每秒可以生產約 25 萬訊息(50 mb),每秒處理 55 萬訊息(110 mb)

持久化資料儲存:可進行持久化操作。將訊息持久化到磁碟,因此可用於批量消費,例如 etl,以及實時應用程式。通過將資料持久化到硬碟以及replication 防止資料丟失。

分布式系統易於擴充套件:所有的 producer、broker 和 consumer 都會有多個,均為分布式的。無需停機即可擴充套件機器。

客戶端狀態維護:訊息被處理的狀態是在 consumer 端維護,而不是由 server 端維護。當失敗時能自動平衡。

1.topics

乙個topic是對一組訊息的歸納。對每個topic,kafka 對它的日誌進行了分割槽(參考圖:kafkatopics)。

每個分割槽都由一系列有序的、不可變的訊息組成,這些訊息被連續的追加到分割槽中。

分割槽中的每個訊息都有乙個連續的序列號叫做offset,用來在分割槽中唯一的標識這個訊息。

在乙個可配置的時間段內,kafka集群保留所有發布的訊息,不管這些訊息有沒有被消費。比如,如果訊息的儲存策略被設定為2天,那麼在乙個訊息被發布的兩天時間內,它都是可以被消費的。之後它將被丟棄以釋放空間。

kafka的效能是和資料量無關的常量級的,所以保留太多的資料並不是問題。

每個分割槽在kafka集群的若干服務中都有副本,這樣這些持有副本的服務可以共同處理資料和請求,副本數量是可以配置的。副本使kafka具備了容錯能力。

每個分割槽都由乙個伺服器作為「leader」,零或若干伺服器作為「followers」,leader負責處理訊息的讀和寫,followers則去複製leader.如果leader down了,followers中的一台則會自動成為leader。集群中的每個服務都會同時扮演兩個角色:作為它所持有的一部分分割槽的leader,同時作為其他分割槽的followers,這樣集群就會據有較好的負載均衡。

將日誌分割槽可以達到以下目的:首先這使得每個日誌的數量不會太大,可以在單個服務上儲存。另外每個分割槽可以單獨發布和消費,為併發操作topic提供了一種可能。

分割槽是負載均衡失敗恢復分布式資料儲存的基本單元。

2.producers

producer將訊息發布到它指定的topic中,並負責決定發布到哪個分割槽。通常簡單的由負載均衡機制隨機選擇分割槽,但也可以通過特定的分割槽函式選擇分割槽。使用的更多的是第二種。

3.consumers

實際上每個consumer唯一需要維護的資料是訊息在日誌中的位置,也就是offset.這個offset由consumer來維護:一般情況下隨著consumer不斷的讀取訊息,這offset的值不斷增加,但其實consumer可以以任意的順序讀取訊息,比如它可以將offset設定成為乙個舊的值來重讀之前的訊息。

以上特點的結合,使kafka consumers非常的輕量級:它們可以在不對集群和其他consumer造成影響的情況下讀取訊息。你可以使用命令列來"tail"訊息而不會對其他正在消費訊息的consumer造成影響。

消費訊息通常有兩種模式:佇列模式(queuing)和發布-訂閱模式(publish-subscribe)。

(1)佇列模式

佇列模式中,多個consumers可以同時從服務端讀取訊息,每個訊息只被其中乙個consumer讀到;

(2)發布訂閱模式

發布-訂閱模式中訊息被廣播到所有的consumer中。

(3)consumers可以加入乙個consumer group,組內的consumer是乙個競爭的關係,共同競爭乙個topic內的訊息,topic中的訊息將被分發到組中的乙個成員中,同一條訊息只發往其中的乙個消費者。同一組中的consumer可以在不同的程式中,也可以在不同的機器上。而如果有多個consumer group來消費相同的topic中的訊息,則組和組之間是乙個共享資料的狀態,每乙個組都可以獲取到這個主題中的所有訊息。

如果所有的consumer都在乙個組中,這就成為了傳統的佇列模式,在各consumer中實現負載均衡。

如果所有的consumer都不在不同的組中,這就成為了發布-訂閱模式,所有的訊息都被分發到所有的consumer中。

更常見的是,每個topic都有若干數量的consumer組來消費,每個組都是乙個邏輯上的「訂閱者」,為了容錯和更好的穩定性,每個組都由若干consumer組成,在組內競爭實現負載均衡。實現了組內競爭負載均衡,組間共享互不影響,這其實就是乙個發布-訂閱模式,只不過訂閱者是個組而不是單個consumer

傳統的佇列在伺服器上儲存有序的訊息,如果多個consumers同時從這個伺服器消費訊息,伺服器就會以訊息儲存的順序向consumer分發訊息。雖然伺服器按順序發布訊息,但是訊息是被非同步的分發到各consumer上,所以當訊息到達時可能已經失去了原來的順序,這意味著併發消費將導致順序錯亂。為了避免故障,這樣的訊息系統通常使用「專用consumer」的概念,其實就是只允許乙個消費者消費訊息,當然這就意味著失去了併發性。

在這方面kafka做的更好,通過分割槽的概念,kafka可以在多個consumer組併發的情況下提供較好的有序性和負載均衡。將每個分區分只分發給乙個consumer組,這樣乙個分割槽就只被這個組的乙個consumer消費,就可以順序的消費這個分割槽的訊息。因為有多個分割槽,依然可以在多個consumer組之間進行負載均衡。注意consumer組的數量不能多於分割槽的數量,也就是有多少分割槽就允許多少併發消費。

kafka只能保證乙個分割槽之內訊息的有序性,在不同的分割槽之間是不可以的,這已經可以滿足大部分應用的需求。如果需要topic中所有訊息的有序性,那就只能讓這個topic只有乙個分割槽,當然也就只有乙個consumer組消費它。

分布式儲存資料,提供了更好的效能 可靠性 可擴充套件能力

利用磁碟儲存資料,且按照主題、分割槽來分布式存放資料,持久化儲存,提供海量資料儲存能力

採用磁碟儲存資料,連續進行讀寫保證效能,效能和磁碟的效能相關和資料量的大小無關

kafk且是要持久化訊息的,而且要把訊息持久化到磁碟上。這樣做的好處如下。

解耦訊息傳送與訊息消費:本質上來說, kafka 最核心的功能就是提供了生產者-消費者模式的完整解決方案。通過將訊息持久化使得生產者方不再需要直接和消費者方藕合,它只是簡單地把訊息生產出來井交由 kafka 伺服器儲存即可,因此提公升了整體的吞吐量。

實現靈活的訊息處理:很 kafka 的下游子系統(接收 kafka 訊息的系統)都有這樣的需求一一對於已經處理過的訊息可能在未來的某個時間點重新處理 次,即所謂的訊息重演( message replay )。訊息持久化便可以很方便地實現這樣的需求。

另外, kafka 實現持久化的設計也有新穎之處。普通的系統在實現持久化時可能會先盡量使用記憶體,當記憶體資源耗盡時,再 次性地把資料「刷盤」;而 kafka 則反其道而行之,所有資料都會立即被寫入檔案系統的持久化日誌中,之後 kafka 伺服器才會返回結果給客戶端通知它們訊息已被成功寫入。這樣做既實時儲存了資料,又減少了 kafka 程式對於記憶體的消耗,從而將節省出的記憶體留給頁快取使用,更進一步地提公升了整體效能。

作為乙個功能完備的分布式系統, kafka 如果只提供了最基本的訊息引擎功能肯定不足以幫助它脫穎而出。一套完整的訊息引擎解決方案中必然要提供負載均衡 cload balancing )和故障轉移( fai l-over )功能。

預設情況下 kafka 的每台伺服器都有均等的機會為 kafka 的客戶提供服務,可以把負載分散到所有集群中的機器上,避免出現「耗盡某台伺服器」的情況發生。kafka 預設提供了很智慧型的 leader 選舉演算法,可以在集群的所有機器上以均等機會分散各個partition的leader ,從而整體上實現了負載均衡。

除了負載均衡,完備的分布式系統還需要支援故障轉移 所謂故障轉移,是指當伺服器意外中止時,整個集群可以快速地檢測到該失效( fai lur ),井立即將該伺服器上的應用或服務自動轉移到其他伺服器上 故障轉移通常是以「心跳」或「會話」的機制來實現的,即只要主伺服器與備份伺服器之間的心跳無法維持或主伺服器註冊到服務中心的會話超時過期了,那麼就認為主伺服器己無法正常執行,集群會自動啟動某個備份伺服器來替代主伺服器的工作。

kafka 伺服器支援故障轉移的方式就是使用會話機制 。每台kafka 伺服器啟動後會以會話的形式把自己註冊到zookeeper 伺服器上 。一旦該 伺服器運轉出現問題,與zookeeper 的會話便不能維持從而超時失效,此時 kafka 集群

會選舉出另一台伺服器來完全代替這台伺服器繼續提供服務。

網路傳媒的優勢和特點

現代社會,資訊的作用越來越被重視,國際網際網路以超乎想象的速度發展著,人們第一次面對乙個資訊的海洋,國際網際網路給人們提供了新的溝通交流方式。網際網路的出現使資訊的傳遞超越了時間地域的侷限,讓資訊傳遞變得輕鬆便捷。網際網路作為乙個新興 形式來說,其優勢是十分明顯的。它既吸收了傳統 的許多優點,同時又...

xml有什麼優勢和特點

xml有什麼優勢和特點 可擴充套件標記語言 xml 提供一種描述結構化資料的方法。與主要用於控制資料的顯示和外觀的 html 標記不同,xml 標記用於定義資料本身的結構和資料型別。xml 使用一組標記來描繪資料元素。每個元素封裝可能十分簡單也可能十分複雜的資料。您可以定義一組無限制的 xml 標記...

LibreOffice的特點與優勢

繼承自openoffice 誕生於2011年的libreoffice經過多年的發展,如今將其作為微軟office辦公套件的免費替代是完全可行且更勝一籌的。libreoffice包含了writer 文書處理 draw 向量繪圖 impress 演示文稿 calc 電子 base 資料庫 math 數學...