極簡單系列 kafka 基本原理

2021-10-08 16:18:18 字數 1793 閱讀 6406

簡單來說 這就是今天的全部內容了。

生產者 生產訊息到 集群,集群儲存訊息,消費者消費

具體要談裡邊的原理 需要先了解幾個概念

topic可以理解為乙個佇列,生產者和消費者面向的都是乙個 topic

分割槽。這是乙個物理概念。乙個 topic 可以分為多個 partition,每個 partition 是乙個有序的佇列;

為了實現擴充套件性,乙個非常大的 topic 可以分布到多個 伺服器上,

也就是我傳送多條訊息 ,這些訊息可能會實際落到不同的分割槽上儲存。訊息1 存到了分割槽1 上 訊息2 存到了訊息2上

一台 kafka 伺服器就是乙個 broker。乙個集群由多個 broker 組成。

分割槽的副本數,為保證集群中的某個節點發生故障時,該節點上的 分割槽 資料不丟失 做的備份。

圖里 這個 topic 的 replica 是3 也就是每個分割槽 會有3份相同的資料。

但是這三份相同的資料 只會有乙個對外,對外的叫leader,其他的叫follower 。生產者只傳送資料到leader, 消費者只從follower 消費資料。follower實時從 leader 中同步資料,保持和 leader 資料的同步。leader 發生故障時,某個 follower 會成為新的 leader

消費端這邊可以有 單個消費者 和 消費者組。

這也很好理解。乙個消費者 速度有上限,可以多個消費者在乙個組裡 共同去消費同乙個topic 。消費者組之間的消費互不影響

架構圖

這是kafka 整體的流程圖

這裡 集群裡有兩個broker, topic a 有兩個 分割槽。每個分割槽副本數是2 分割槽0的leader 在 broker1 上,分割槽1 的leader 在 broker2 上。

生產者 生產了topica 的兩個訊息 ,這兩個訊息落到了不同的分割槽。follower 從leader 同步資料

乙個消費者組裡有兩個消費者 ,每個消費者分別消費指定的分割槽。同時 zk 裡儲存這些 節點的存活資訊等。通過watch 同步給集群的管理者

這樣設計的好處有兩個

1是假如當前某個服務結束通話了 只要這個服務上的leader 在其他服務上還有副本 就可以變成leader 繼續提供服務

2是如果某個 topic 過大 。可以建立多個分割槽 儲存在多個伺服器上

對比下rabitmq 映象模式

每個節點上都有這個queue的乙個完整映象,就是包含了這個queue的全部資料的意思,所以這種集群模式叫做映象集群模式。

任何乙個節點宕機了,也不會出現問題,其他節點上海包含了這個queue的完整資料。別的consumer都可以到其他的節點上去消費資料。

但是它不是分布式的,如果乙個佇列的資料量很大,大道這個機器上的容量無法容納了,此時還能怎麼辦呢?束手無策了就。

對比kafka的優勢也就很明顯了。

Kafka基本原理

在深入學習kafka之前,需要先了解topics,brokers,producers和consumers等幾個主要術語。下面說明了主要術語的詳細描述和元件。在上圖中,主題 topic 被配置為三個分割槽。分割槽1 partition 1 具有兩個偏移因子0和1。分割槽2 partition 2 具有...

極簡單系列 kafka 生產 重複問題

重複的原因 acks 1 的情況下,資料傳送到 leader 後 部分 isr 的副本同步,leader 此時掛掉。比如 follower1 和 follower2 都有可能變成新的 leader,producer 端會得到返回異常,producer 端會重新傳送資料,資料可能會重複 另外,在高階消...

mysql的基本原理 Mysql 基本原理

mysql 基本原理 mysql是一種關聯式資料庫管理系統,關聯式資料庫將資料儲存在不同的表中,而不是將所有資料放在乙個大倉庫內,這樣就增加了速度並提高了靈活性 ysql是資料庫登入命令 uroot預設超級使用者登入 p 預設沒密碼 中寫密碼 mysqladmin uroot password 12...