Apache Kafka主題:架構和分區

什麼是卡夫卡主題?
Kafka主題本質上是一個命名的記錄流。Kafka在日誌中存儲主題。可是,Apache Kafka中的主題日誌分爲幾個分區。此外,Kafka將這些日誌的分區分佈在多個服務器或磁盤上。換句話說,咱們能夠說Kafka中的主題是類別,流名稱或提要。服務器

卡夫卡主題架構

此外,咱們能夠說Apache Kafka中的主題是pub-sub樣式的消息傳遞。此外, 在Kafka主題中能夠有零到多個稱爲Kafka消費者羣體的訂戶 。基本上,Kafka中的這些主題被分解爲分區,以提升速度,可伸縮性和大小。線程

如何建立卡夫卡主題
首先,運行 kafka-topics.sh 並指定主題名稱,複製因子和其餘屬性,以在Kafka中建立主題:代理

/bin/kafka-topics.sh --create \
--zookeeper <hostname>:<port> \
--topic <topic-name> \
--partitions <number-of-partitions> \
--replication -factor <number-of-replicating-servers>
如今,使用一個分區和一個副本,下面的示例建立一個名爲「test1」的主題:日誌

斌/ kafka-topics.sh --create \
--zookeeper localhost:2181 \
--replication -factor 1 \
--partitions 1 \server

  • 主題文字

進一步,運行list topic命令,查看主題:進程

bin / kafka-topics.sh --list --zookeeper localhost:2181
TEST1
確保當應用程序嘗試生成,使用或獲取不存在的主題的元數據auto.create.topics.enable 時,該 屬性設置爲true時會自動建立主題。

卡夫卡主題分區
此外,Kafka將主題日誌分紅幾個分區,若是密鑰存在且循環,一般經過記錄密鑰。當密鑰丟失時,記錄存儲在分區上(默認行爲)。默認狀況下,有助於肯定Kafka Producer 將記錄發送到哪一個分區的 鍵是Record Key。
基本上,爲了在生產者寫入的許多服務器上擴展主題,Kafka使用分區。此外,爲了促進並行消費者,Kafka使用分區。此外,在故障轉移方面,Kafka能夠將分區複製到多個Kafka Brokers。kafka

Kafka主題日誌分區的訂購和基數
好吧,咱們能夠說,只有在一個分區中,Kafka確實維護了一個記錄順序,由於分區也是一個有序的,不可變的記錄序列。而且,經過將分區用做結構化提交日誌,Kafka會不斷附加到分區。在分區中,全部記錄都分配了一個順序ID號,咱們進一步稱之爲偏移量。該偏移量進一步標識分區內的每一個記錄位置。同步

此外,爲了擴展到適合單個服務器的大小,Topic分區容許Kafka日誌。雖然主題能夠跨越許多服務器上託管的許多分區,但主題分區必須適合託管它的服務器。此外,Apache Kafka中的主題分區是並行的一個單元。這意味着在任什麼時候候,分區只能由一個使用者組中的一個Kafka使用者處理。基本上,Kafka中的消費者只能在本身的進程或本身的線程中運行。儘管如此,若是消費者中止,Kafka會在同一個消費者羣體中的剩餘消費者之間傳播分區。it

Kafka主題分區複製
出於容錯的目的,Kafka能夠跨可配置數量的Kafka服務器執行分區複製。基本上,每一個分區中都有一個領導服務器和必定數量的跟隨服務器。此外,對於分區,領導者是處理全部讀寫請求的人。

可是,若是領導者去世,追隨者會複製領導者並接管。此外,對於組內的並行消費者處理,Kafka還使用分區。

複製:Kafka分區領導者,追隨者和ISR。
經過使用 ZooKeeper,Kafka選擇一個代理的分區副本做爲領導者。此外,咱們能夠說,對於分區,具備分區領導者的代理處理全部記錄的讀寫。此外,對於追隨者(節點/分區對)的領導者分區,Kafka複製了寫入。

同步的跟隨者就是咱們所說的ISR(同步複製品)。儘管如此, 若是分區領導失敗,Kafka會選擇新的 ISR做爲新的領導者。

Kafka架構:Kafka複製 - 複製到分區0
卡夫卡主題

當分區的全部ISR寫入其日誌時,該記錄被視爲「已提交」。可是,咱們只能讀取來自使用者的已提交記錄。

卡夫卡主題

相關文章
相關標籤/搜索