(順序寫磁碟效率比隨機寫記憶體要高,保障 kafka 吞吐率,關於磁碟順序寫入
)。producer 傳送訊息到 broker 時,會根據分割槽演算法選擇將其儲存到哪乙個 partition。其路由機制為:
1、 指定了 patition,則直接使用;2、 未指定 patition 但指定 key,通過對 key 的 value 進行hash 選出乙個 patition3、 patition 和 key 都未指定,使用輪詢選出乙個 patition。producer 寫入訊息序列圖如下所示:
流程說明:
1、 producer 先從 zookeeper 的 "/brokers/.../state" 節點找到該 partition 的 leader 2、 producer 將訊息傳送給該 leader 3、 leader 將訊息寫入本地 log 4、 followers 從 leader pull 訊息,寫入本地 log 後 leader 傳送 ack 5、 leader 收到所有 isr 中的 replica 的 ack 後,增加 hw(high watermark,最後 commit 的 offset) 並向 producer 傳送 ack物理上把 topic 分成乙個或多個 patition(對應 server.properties 中的 num.partitions=3 配置),每個 patition 物理上對應乙個資料夾(該資料夾儲存該 patition 的所有訊息和索引檔案)
無論訊息是否被消費,kafka 都會保留所有訊息。有兩種策略可以刪除舊資料:
流程說明:
1、 controller 在 zookeeper 的 /brokers/topics 節點上註冊 watcher,當 topic 被建立,則 controller 會通過 watcher 得到該 topic 的 partition/replica 分配。2、 controller從 /brokers/ids 讀取當前所有可用的 broker 列表,對於 set_p 中的每乙個 partition:2.1、 從分配給該 partition 的所有 replica(稱為ar)中任選乙個可用的 broker 作為新的 leader,並將ar設定為新的 isr 2.2、 將新的 leader 和 isr 寫入 /brokers/topics/[topic]/partitions/[partition]/state 3、 controller 通過 rpc 向相關的 broker 傳送 leaderandisrrequest。流程說明:
1、 controller 在 zookeeper 的 /brokers/topics 節點上註冊 watcher,當 topic 被刪除,則 controller 會通過 watcher 得到該 topic 的 partition/replica 分配。 2、 若 delete.topic.enable=false,結束;否則 controller 註冊在 /admin/delete_topics 上的 watcher 被 fired,controller 通過**向對應的 broker 傳送 stopreplicarequest。kafka broker failover 序列圖如下所示:流程說明:
1、 controller 在 zookeeper 的 /brokers/ids/[brokerid] 節點註冊 watcher,當 broker 宕機時 zookeeper 會 fire watcher2、 controller 從 /brokers/ids 節點讀取可用broker 3、 controller決定set_p,該集合包含宕機 broker 上的所有 partition 4、 對 set_p 中的每乙個 partition 4.1、 從/brokers/topics/[topic]/partitions/[partition]/state 節點讀取 isr 4.2、 決定新 leader 4.3、 將新 leader、isr、controller_epoch 和 leader_epoch 等資訊寫入 state 節點5、 通過 rpc 向相關 broker 傳送 leaderandisrrequest 命令當 controller 宕機時會觸發 controller failover。每個 broker 都會在 zookeeper 的 "/controller" 節點註冊 watcher,當 controller 宕機時 zookeeper 中的臨時節點消失,所有存活的 broker 收到 fire 的通知,每個 broker 都嘗試建立新的 controller path,只有乙個競選成功並當選為 controller。RocketMQ生產者組topic和消費組的關係
各個之間的關係其實很鬆散,並不是說不能操作 訂閱關係一致 多個 group id 訂閱了多個 topic,並且每個 group id 裡的多個消費者例項的訂閱關係保持了一致。消費冪等 最終一致性保證資料一致性,如果不冪等,將導致資料錯亂 topic和tag的關係 topic可以是一級過濾關係 tag...
生產者消費者 生產者與消費者模式
一 什麼是生產者與消費者模式 其實生產者與消費者模式就是乙個多執行緒併發協作的模式,在這個模式中呢,一部分執行緒被用於去生產資料,另一部分執行緒去處理資料,於是便有了形象的生產者與消費者了。而為了更好的優化生產者與消費者的關係,便設立乙個緩衝區,也就相當於乙個資料倉儲,當生產者生產資料時鎖住倉庫,不...
多生產者 多做「生產者」,少做「消費者」
生產者 vs 消費者 哪個更好?消費者 定義非常廣泛,購買一件物品 進行一次消費的人都是消費者 更深一層的含義就是 消費 了你的金錢 時間 精力,比如刷抖音,花費了你的時間和精力,單方面地接受資訊 向內汲取 向外消耗時間或金錢,那你就是 消費者 生產者 生產 製造 創作了某個物品 作品,別人消費你的...