日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

kafka模块概述

發布時間:2025/3/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kafka模块概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介

  • kafka主要用于實現低延遲的發送和收集大量的事件和日志數據--通常是活躍的數據(PV、訪問記錄等),數據以日志形式記錄下來,然后由一個專門的系統來進行日志的收集與統計;
  • 吞吐量極高的分布式消息系統,典型的發布訂閱模式系統;
  • kafka集群,沒有中心節點的概念,可以在不做任何配置修改的情況下添加和刪除服務器,同樣,消息的生產者、消費者可以隨意重啟、上下線;

Broker注冊

  • Broker是分布式部署,且相互獨立,通過注冊系統ZooKeeper綜合管理,ZooKeeper上Broker服務器列表記錄節點路徑:/brokers/ids,Broker啟動時會到ZooKeeper注冊,創建屬于自己的節點:/broker/ids/[0...N],將自己的IP地址和端口信息寫入該節點中;
  • Broker創建的節點為臨時節點,一旦Broker服務器宕機or下線,對應的Broker節點會被刪除,因此可以通過ZooKeeper上的Broker節點的變化情況來動態表征Broker服務器的可用性;

Topic注冊

  • kafka中,同一個Topic消息鳳城多個分區并分布到多個Broker上,這些分區信息與Broker的對應關系由ZooKeeper維護,對應節點:/brokers/topics,每一個Topic,都會有節點:/brokers/topics/[topic],如:/brokers/topics/loginlogs;
  • Broker服務啟動后,會到對應的Topic節點下注冊自己的Broker ID,并寫入針對該Topic的分區總數,如:/brokers/topics/loginlogs/3 ->2,表明Broker ID為3的一個Broker服務器,對于loginlogs這個Topic消息,提供了2個分區進行消息存儲。同樣,這個分區書節點也是臨時的;

生產者負載均衡

  • 生產者需要合理的發送消息到分布式的Broker上,所以面臨生產者負載均衡的問題。
  • kafka支持傳統的四層負載均衡,同時支持使用ZooKeeper來實現負載均衡。
  • 四層負載均衡
  •   此方案設計教簡單,根據生產者的IP與端口來為其確定一個關聯的Broker,通常一個生產者只會對應一個Broker,該生產者所有消息都發送給該Broker。此方案設計簡單,不需要引入其他第三方系統,同時生產者不需要同其他系統建立額外的TCP連接,只需要維護和Broker的單個TCP鏈接即可

      弊端很明顯,無法做到真正的負載均衡,實際運行中,每個生產者生成的消息量,以及每個Broker的消息存儲量都不一樣,導致不同Broker接收到的消息不均勻。另方面,生產者也無法感知到Broker的新增與刪除,因此,該方案無法做到動態的負載均衡。

      2. 使用ZooKeeper進行負載均衡

      kafka中,客戶端使用了基于ZooKeeper的負載均衡策略來解決生產者的負載均衡問題。前面介紹,每當Broker啟動時,會首先完成Broker的注冊過程,并注冊一些“有哪些可訂閱的Topic”?的元數據信息。

      kafka的生產者會對ZooKeeper上的以下事件注冊Watcher監聽,來實現一種動態的負載均衡機制:

        Broker的新增與減少

        Topic的新增與減少

        Broker與Topic關聯關系的變化

    ?消費者負載均衡

      與生產者類似,消費者也需要進行負載均衡來實現多個消費者合理的從對應的Broker服務器上接受消息。每一條消息都會發送給分組中的一個消費者,即同一個消費者分組內部的消息消費策略。

    • 消息分區與消費者關系

      每個消費者分組,都會有唯一的Group ID,每個消費者也有唯一的Consumer ID,通常為‘Hostname:UUID’;

      kafka設計規定,每個消息分區有且只能同時有一個消費者對其進行消息的消費,因此需要在ZooKeeper上記錄下消息分區與消費者之間的關系;

      消費者確定了對一個消息分區的消費權利,需將其Customer ID寫入對應的消息分區的臨時節點上,如:/consumers/[group_id]/owns/[topic]/[broker_id-partition_id],broker_id-partition_id為一個消息的分區標識,節點內容即該分區對應的消費者Consumer ID;

    • 消息消費進度Offset記錄

      節點路徑:/consumers/[group_id]/offsets/[topic]/[broker_id-partitiion_id],節點內容即Offset的值;以便該消費者重啟或其他消費者接管該消息分區后,能夠從之前的進度繼續開始

    • 消費者注冊

      1. 注冊到消費者分組

        消息者服務啟動,會注冊:/consumers/[group_id]/ids/[consumers_id],節點創建完后,會將自己訂閱的Topic信息寫入該節點,此節點也為臨時節點;

      2. 對消費者分組中消費者的變化注冊監聽

        對/consumers/[group_id]ids節點注冊子節點變化的watcher監聽,一旦發現消費者新增減少,就會觸發消費者的負載均衡;

      3. 對Broker服務器的變化注冊監聽

        對/brokers/ids/[0...N]中節點注冊監聽,Broker服務器發生變化,根據情況決定是否進行消費者負載均衡;

      4. ?進行消費者負載均衡

        

    轉載于:https://www.cnblogs.com/binnzhao/p/6055495.html

    總結

    以上是生活随笔為你收集整理的kafka模块概述的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。