Kafka生產過程

2021-08-28 06:39:50 字數 2002 閱讀 5433

1.寫入方式

寫磁碟效率比隨機寫記憶體要高,保障kafka吞吐率)

2.分割槽(partition)

kafka集群有多個訊息**伺服器(broker-server)組成,發布到kafka集群的每條訊息都有乙個類別,用主題(topic)來表示。通常,不同應用產生不同型別的資料,可以設定不同的主題。乙個主題一般會有多個訊息的訂閱者,當生產者發布訊息到某個主題時,訂閱了這個主題的消費者都可以接收到生產者寫入的新訊息。

kafka集群為每個主題維護了分布式的分割槽(partition)日誌檔案,物理意義上可以把主題(topic)看作進行了分割槽的日誌(partition log)。主題的每個分割槽都是乙個有序的、不可變的記錄序列,新的訊息會不斷追加到日誌中,分割槽中的每條訊息都會按照時間順序分配到乙個單調遞增的順序編號,叫做偏移量(offset),這個偏移量能夠唯一地定位當前分割槽中的每一條訊息

發布到kafka主題的每條訊息包括鍵值和時間戳,訊息到達伺服器端的指定分割槽後,都會分配到乙個自增的偏移量,原始的訊息內容和分配的偏移量以及其他一些元資料資訊最後都會儲存到分割槽日誌檔案中,訊息的鍵也可以不用設定,這種情況下訊息會均衡地分布到不同的分割槽

分割槽的原因:

1)方便在集群中擴充套件,每個partition可以通過調整以適應它所在的機器,而乙個topic又可以有多個partition組成,因此整個集群就可以適應任意大小的資料了

2)可以提高併發,因為可以以partition為單位讀寫了

分割槽的原則:

1)指定了patition,則直接使用;

2)未指定patition但指定key,通過對key的value進行hash出乙個patition

3)patition和key都未指定,使用輪詢選出乙個patition

3.副本(replication)

同乙個partition可能會有多個replication(對應 server.properties 配置中的 default.replication.factor=n),沒有replication的情況下,一旦broker 宕機,其上所有 patition 的資料都不可被消費,同時producer也不能再將資料存於其上的patition,引入replication之後,同乙個partition可能會有多個replication,而這時需要在這些replication之間選出乙個leader,producer和consumer只與這個leader互動,其它replication作為follower從leader 中複製資料

4.寫入流程

1)producer先從zookeeper的 "/brokers/.../state"節點找到該partition的leader

2)producer將訊息傳送給該leader

3)leader將訊息寫入本地log

4)followers從leader pull訊息,寫入本地log後向leader傳送ack

5)leader收到所有isr中的replication的ack後,增加hw(high watermark,最後commit 的offset)並向producer傳送ack

5.優勢

傳統訊息系統在服務端保持訊息的順序,如果有多個消費者消費同乙個訊息佇列,服務端會以消費儲存的順序依次傳送給消費者,但由於訊息是非同步傳送給消費者的,訊息到達消費者的順序可能是無序的,這就意味著在並行消費時,傳統訊息系統無法很好地保證訊息被順序處理,雖然我們可以設定乙個專用的消費者只消費乙個佇列,以此來解決訊息順序的問題,但是這就使得消費處理無法真正執行

kafka比傳統訊息系統有更強的順序性保證,它使用主題的分割槽作為訊息處理的並行單元,kafka以分割槽作為最小的粒度,將每個分割槽分配給消費者組中不同的而且是唯一的消費者,並確保乙個分割槽只屬於乙個消費者,即這個消費者就是這個分割槽的唯一讀取執行緒。那麼,只要分割槽的訊息是有序的,消費者處理的訊息順序就***,每個主題有多個分割槽,不同的消費者處理不同的分割槽,所以kafka不僅保證了訊息的有序性,也做到了消費者的負載均衡

Kafka 生產過程分析

傳送訊息的主要步驟 我們從建立乙個 producerrecord 物件開始,producerrecord 物件需要包含目標主題和要傳送的內容。我們還可以指定鍵或分割槽。在傳送 producerrecord 物件時,生產者要先把鍵和值物件序列化成位元組陣列,這樣它們才能夠在網路上傳輸。然後資料被傳給分...

5 Kafka生產過程分析

訊息傳送時都被傳送到乙個topic,其本質就是乙個目錄,而topic是由一些partition logs 分割槽日誌 組成,其組織結構如下圖所示 我們可以看到,每個partition中的訊息都是有序的,生產的訊息被不斷追加到partition log上,其中的每乙個訊息都被賦予了乙個唯一的offse...

火力電廠生產過程

發電廠是把各種動力能源的能量轉變成電能的工廠。根據所利用的能源形式可分為火力發電廠 水利發電廠 原子能發電廠 地熱發電廠 風力發電廠等。火力發電廠簡稱火電廠,是利用煤 石油 天然氣等燃料的化學能產生出電能的工廠。按其功用可分為兩類,即凝汽式電廠和熱電廠。前者僅向使用者 電能,而熱電廠除供給使用者電量...