kafka 高可用副本配置指南

2021-10-18 06:39:13 字數 2193 閱讀 5714

因測試環境kafka故障致內部業務異常故寫乙份配置指南

以下配置及操作kafka目錄以實際情況為準

./kafka-reassign-partitions.sh --zookeeper ***:2181 --topics-to-move-json-file /usr/nettv/kafka/config/topicreplication/displayurl-abcache-refresh-topic-move.json ----broker-list "0,1,2" --generate
./kafka-topics.sh --alter --topic displayurl-abcache-refresh-topic --zookeeper ***:2181 --partitions 6
至此,配置說明結束,另附kafka高可用原理

kafka的高可靠性的保障**於其健壯的副本(replication)策略。乙個topic可以分成多個partition,而乙個partition物理上由多個segment組成。

segment分2部分:索引檔案和資料檔案。索引檔案儲存元資料,記錄了訊息在資料檔案中的偏移(offset),訊息有固定物理結構,保證了正確的讀取長度。

segment檔案帶來好處:方便過期檔案清理。只需要整體刪除過期的segment。以追加的方式寫訊息,順序寫磁碟極大提高了效率。

讀取某offset訊息的步驟變為:通過二分查詢,找到offset所在segment。通過segment的索引檔案,找到offset所在資料檔案的物理偏移。讀取資料。

副本複製與同步

從外部來看partition類似乙個不斷增長,儲存訊息的陣列,每個partition有乙個類似mysql binlog的檔案用來記錄資料的寫入。有兩個新名詞,hw(highwatermark)表示當前consumer可以看到partition的offset位置,leo(logendoffset)表示當前partition最新訊息的offset,各個副本單獨維護。為了提高訊息可靠性,partition有n個副本。

n個副本中,有乙個leader,餘下n-1個follower。kafka的寫操作只在leader副本上進行。通常這種副本寫有兩種方式:

kafka沒有使用上述機制。它實現了isr(in-sync replication)的機制。

isr(in-sync replication)機制

leader維護乙個副本佇列(包含leader自己),會及時將慢響應的follwer剔除,並將追上leader資料的follower重新加入副本佇列。

這樣要保證資料高可靠所需要的副本數更少。比如應對2臺機器的當機,isr機制只需要3個副本。而上述機制2則需要2*2+1個副本。這樣有效節約了大約一半的儲存空間。

leader當機,新的leader是從isr中按順序選出。leader恢復後成為follower,刪除上乙個hw後所有資料後,從新的leader進行同步。

資料可靠性配置

以下邏輯,可以保證一定程式資料可靠。當然副本越多,min.insync.replicas越大,則越可靠,但實際情況需要根據場景在效率與資料可靠上做權衡。

以上,保證了乙個副本所在機器當機,kafka仍提供服務,且資料正確未丟失。

資料去重

以上配置,保證了只要leader返回成功,即不存在資料丟失。但考慮一種情況,producer提交寫請求到leader後,producer到leader網路斷開,此時producer認為寫失敗。但實際,follower正常同步到了leader資料,hw更新。

此時producer因為傳送失敗,會重發訊息。此時kafka中存在重複資料。這需要在consume時業務邏輯中去重。kafka本身不保證資料不重複。

kafka高效的幾個原因

1)架構層面 

1. 乙個topic多partition部署實現並行處理,線性擴充套件 

2. isr副本複製機制實現效能與可用性的平衡

2)磁碟優化 

1. partition中順序寫磁碟 

2. mmap實現記憶體批量寫磁碟,減少i/o次數

3)網路優化 

1. sendfile系統呼叫實現零拷貝,減少上下文切換 

2. producer批量傳送,減少網路i/o次數 

3. 支援資料壓縮

Kafka高可用實現

資料儲存格式 kafka的高可靠性的保障 於其健壯的副本 replication 策略。乙個topic可以分成多個partition,而乙個partition物理上由多個segment組成。segment分2部分 索引檔案和資料檔案。索引檔案儲存元資料,記錄了訊息在資料檔案中的偏移 offset 訊...

kafka的高可用

在kafka 引入replication之後,同乙個partition可能會有多個replica,而這時需要在這些replication之間選出乙個leader,producer和consumer只與這個leader互動,其它replica作為follower從leader中複製資料。因為需要保證同...

Kafka如何保證高可用

kafka 乙個最基本的架構認識 由多個 broker 組成,每個 broker 是乙個節點 你建立乙個 topic,這個 topic 可以劃分為多個 partition,每個 partition 可以存在於不同的 broker 上,每個 partition 就放一部分資料。如果用rabbitmq來...