kafka partition分割槽策略

2021-09-28 15:44:18 字數 1980 閱讀 2763

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

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

我們需要將 producer 傳送的資料封裝成乙個 producerrecord 物件。

producerrecord(string topic, integer partition, k key, v value)

producerrecord(string topic, integer partition, long timestamp, k key, v value)

producerrecord(string topic, k key, v value)

producerrecord(string topic, v value)

分割槽策略:

生產者將訊息傳送到broker,broker需要告訴生產者,你這個訊息是否傳送成功。如果未成功,生產者還可以採取重發的機制。

因為訊息是傳送到partition,而partition同時有多個副本。副本是需要實時同步訊息的。

borker判斷訊息是否成功,是訊息可靠落盤。

kafka 選擇的第二種方案,雖然延遲高,但網路延遲對 kafka 的影響較小,且為kafka 的每個分割槽都有大量的資料,第一種方案會造成大量資料的冗餘。

leader 收到資料,所有 follower 都開始同步資料, 但有乙個 follower,因為某種故障,遲遲不能與 leader 進行同步,那 leader 就要一直等下去, 直到它完成同步,才能傳送 ack。這個問題怎麼解決呢?

leader 維護了乙個動態集合in-sync replica set(和 leader 保持同步的 follower 集合)。通過引數replica.lag.time.max.ms設定時間閾值,當follower在規定時間未完成同步,則將該follower剔出這個集合。

當某些訊息資料,不需要可靠。即生成者不需要ack機制時,對於不需要資料的可靠性時,kafka就沒必要等 isr 中的 follower 全部接收成功,才返回ack.所以 kafka 為使用者提供了三種可靠性級別,使用者根據對可靠性和延遲的要求進行權衡,

acks 引數配置:

0:(只管發) producer 不等待 broker 的資料落盤就直接返回 ack,當broker故障時有可能丟失資料

1:(只保證broker資料落盤)producer 等待 broker 的 ack,partition的leader落盤成功後就不等follower同步便直接返回 ack

如果在 follower同步成功之前leader故障,那麼將會丟失資料;

-1(all):(保證broker和所有follower資料落盤)producer 等待 broker 的 ack,partition 的 leader 和 follower 全部落盤成功後才 返回 ack。

但是如果在 follower 同步完成後,broker 傳送 ack 之前,leader 發生故障,那麼會 造成資料重複。

kafka0.11版本之前解決訊息冪等性,需要在每個消費端手動進行去訊息判重(可以使用redis,或者mysql主鍵特性,將消費後的訊息進行儲存)這也是rocketmq的訊息冪等性的解決方案

kafka0.11版本後,borker支援了冪等性。將原來消費端手動需要做的去重放在了資料borker原生支援中。

要啟用冪等性,只需要將 producer 的引數中 enable.idompotence 設定為 true 即可。

原理: 開啟冪等性的 producer 在初始化的時候會被分配乙個 pid,發往同一 partition 的訊息會附帶 sequence number。而broker 端會對做快取,當具有相同主鍵的訊息提交時,broker 只會持久化一條。但是 pid 重啟就會變化,同時不同的 partition 也具有不同主鍵,所以broker解決訊息的冪等性無法保證跨分割槽跨會話的 exactly once。也就是說不能重啟生產者。否則還是會產生重複訊息

分目錄 分埠

分目錄站點 意義 可能有多個cms或框架組成,對於滲透 相當於滲透目標是多個 入侵分目錄下的站點 主站也跟著被入侵 主站與分目錄站點搭建的cms可能不同 找到乙個有漏洞可利用的cms即可對 進行入侵 分埠站點 同理 www.com www.com 8080 www.com 8888 意義 可能有多個...

分糖果 差分約束

description 幼兒園裡有n 個小朋友,lxhgww 老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww 需要滿足小朋友們的 k個要求。幼兒園的糖果總是有限的,l...

分巧克力 (二分)

問題描述 兒童節那天有k位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。小明一共有n塊巧克力,其中第i塊是hi x wi的方格組成的長方形。為了公平起見,小明需要從這 n 塊巧克力中切出k塊巧克力分給小朋友們。切出的巧克力需要滿足 1.形狀是正方形,邊長是整數 2.大小相同 例如一塊6x5...