Kafka 原理介紹

2022-09-14 19:57:13 字數 2966 閱讀 7267

kafka是乙個分布式訊息佇列。kafka對訊息儲存時根據topic進行歸類,傳送訊息者稱為producer,訊息接受者稱為consumer,此外kafka集群有多個kafka例項組成,每個例項(server)稱為broker。無論是kafka集群,還是consumer都依賴於zookeeper集群儲存一些meta資訊,來保證系統可用性。

1.kafka的三大特點

2.流**平台有三個關鍵功能:

3.kafka通常用於兩大類應用:

4.kafka的幾個概念

5.kafka的四個核心api:

1、結構名詞解釋

訊息由producer產生,訊息按照topic歸類,併發送到broker中,broker中儲存了乙個或多個topic的訊息,consumer通過訂閱一組topic的訊息,通過持續的poll操作從broker獲取訊息,並進行後續的訊息處理。

producer:訊息生產者,就是向broker發指定topic訊息的客戶端。

consumer:訊息消費者,通過訂閱一組topic的訊息,從broker讀取訊息的客戶端。

broker:乙個kafka集群包含乙個或多個伺服器,一台kafka伺服器就是乙個broker,用於儲存producer傳送的訊息。乙個broker可以容納多個topic。

topic:每條傳送到broker的訊息都有乙個類別,可以理解為乙個佇列或者資料庫的一張表。

partition:乙個topic的訊息由多個partition佇列儲存的,乙個partition佇列在kafka上稱為乙個分割槽。每個partition是乙個有序的佇列,多個partition間則是無序的。partition中的每條訊息都會被分配乙個有序的id(offset)。

offset:偏移量。kafka為每條在分割槽的訊息儲存乙個偏移量offset,這也是消費者在分割槽的位置。kafka的儲存檔案都是按照offset.kafka來命名,位於2049位置的即為2048.kafka的檔案。比如乙個偏移量是5的消費者,表示已經消費了從0-4偏移量的訊息,下乙個要消費的訊息的偏移量是5。

consumer group (cg):若干個consumer組成的集合。這是kafka用來實現乙個topic訊息的廣播(發給所有的consumer)和單播(發給任意乙個consumer)的手段。乙個topic可以有多個cg。topic的訊息會複製(不是真的複製,是概念上的)到所有的cg,但每個cg只會把訊息發給該cg中的乙個consumer。如果需要實現廣播,只要每個consumer有乙個獨立的cg就可以了。要實現單播只要所有的consumer在同乙個cg。用cg還可以將consumer進行自由的分組而不需要多次傳送訊息到不同的topic。

假如乙個消費者組有兩個消費者,訂閱了乙個具有4個分割槽的topic的訊息,那麼這個消費者組的每乙個消費者都會消費兩個分割槽的訊息。消費者組的成員是動態維護的,如果新增或者減少了消費者組中的消費者,那麼每個消費者消費的分割槽的訊息也會動態變化。比如原來乙個消費者組有兩個消費者,其中乙個消費者因為故障而不能繼續消費訊息了,那麼剩下乙個消費者將會消費全部4個分割槽的訊息。

2、內部結構

消費者和生產者能操作的最小單元是分割槽,也就是不可能只消費一條資料

消費者組是邏輯概念,只是乙個標記而已,具體的修改在config的server.properties中的設定int型別的broker_id

同乙個消費者組裡面不能是同時消費者消費訊息,只能有乙個消費者去消費,第二,同乙個消費者組裡面是不會重複消費訊息的,第三,同乙個消費者組的乙個消費者不是以一條一條資料為單元的,是以分割槽為單元,就相當於消費者和分割槽建立某種socket,進行傳輸資料,所以,一旦建立這個關係,這個分割槽的內容只能是由這個消費者消費。

zookeeper儲存kafka的集群狀態資訊的,包括每個broker,為什麼?,因為zk和broker建立監聽,一旦有乙個broker宕機了,另乙個備份就可以變為領導,第二,zk儲存消費者的消費資訊,為什麼要儲存?就是為了消費者下一次再次消費可以得知offset這個偏移量,consumer資訊高版本在本地維護

為什麼說kafka是分布式模型呢?首先,同乙個kafka集群有共同擁有乙個topic, 而同乙個topic又擁有不同的分割槽,不同的分割槽可以分布在不同的borker上也就是不同的機子上,所以,分割槽是分布式的,則資料也是分布式的,kafka就是分布式

在不加上leader和fllower的概念的前提下,kafka的同乙個topic裡的分割槽號是不同,一定不能重複。

除了分割槽是分布式的,還有消費者也是分布式的,比如,消費者組裡的消費者可以在不同的機器上,有什麼好處?消費的方式可以是儲存可以是計算,如果是放在一台機子上,io等壓力很大,

kafka上面的所有想到的角色都是分布式的,不管是消費者還是生產者還是分割槽,他們之間溝通的唯一橋梁就是zookeeper

強調:kafka分區內有序,整體不一定有序。

消費者組的概念很重要,下**釋和同一組和不同組的使用情景

怎麼實現消費者消費不同的資料? 將消費者放在同一組,但是生產環境一般要求消費者消費的資料一樣且多個,比如乙個寫到hdfs,乙個放到spark計算,這樣就得要求不同的消費者在不同的消費者組裡。

簡單的說就是佇列裡面的資料,如果想讓不同的消費者讀不同的資料,就把他們放在同乙個組裡,否則放在不同組。

參考:

Kafka介紹和原理

簡而言之,kafka是一種mq,現在有很多開源的mq,包括activemq,rokectmq,rabbitmq和kafka等等。還有些大型網際網路公司內部不開源的mq,比如阿里巴巴的metaq,京東的jmq等等。kafka是強依賴於zookeeper的,所以,如果想深入了解kafka,需要熟悉zoo...

kafka工作原理介紹

中間的kafka cluster,儲存訊息,是由多個server組成的集群。2 topic與訊息 kafka將所有訊息組織成多個topic的形式儲存,而每個topic又可以拆分成多個partition,每個partition又由乙個乙個訊息組成。每個訊息都被標識了乙個遞增序列號代表其進來的先後順序,...

kafka入門介紹

背景 當今社會各種應用系統諸如商業 社交 搜尋 瀏覽等像資訊工廠一樣不斷的生產出各種資訊,在大資料時代,我們面臨如下幾個挑戰 如何收集這些巨大的資訊 如何分析它 如何及時做到如上兩點 以上幾個挑戰形成了乙個業務需求模型,即生產者生產 produce 各種資訊,消費者消費 consume 處理分析 這...