精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kafka架構技術:Kafka的架構和客戶端API設計

小林coding ? 來源:小林coding ? 2023-10-10 15:41 ? 次閱讀

今天我們來聊一聊 Kafka 的架構。

大家一般熟悉的是三層結構:生產者、消費者、消息代理(Message Broker)。其實 Kafka 有更加詳細的架構。

我們來一起看看。

Kafka 給自己的定位是事件流平臺(event stream platform)。因此在消息隊列中經常使用的 "消息"一詞,在 Kafka 中被稱為 "事件"。

下圖詳細展示了 Kafka 的架構和客戶端 API 設計。我們可以看到,盡管生產者、消費者和消息代理仍然是架構的關鍵,但要構建一個高吞吐量、低時延的 Kafka,還需要更多的組件。讓我們逐一介紹這些組件。

從高層次來看,架構分為兩層

計算層

存儲層

6f119bf0-666a-11ee-939d-92fbcf53809c.png

計算層

計算層允許各種應用程序通過 API 與 Kafka Broker 通信

生產者使用生產者 API。如果數據庫等外部系統想與 Kafka 通信,它還提供 Kafka Connect 作為集成 API。

消費者通過消費者 API 與 Broker 通信。我們可以使用 Kafka Connect API 將事件數據路由到其他數據處理平臺上,例如搜索引擎或數據庫。

此外,消費者還可以使用 Kafka Streams API 進行流式處理。如果要處理無邊界的數據流,我們可以創建一個 KStream。

下面的代碼片段為主題 "訂單 "創建了一個 KStream,并為 key 和 value 創建了 Serdes(Serializers and Deserializers,序列化和反序列化)。

如果我們只需要更新實體的最新狀態,我們可以創建一個 KTable 來維護狀態。

Kafka Streams 允許我們對事件流進行聚合、過濾、分組和連接。

finalKStreamBuilderbuilder=newKStreamBuilder();
finalKStreamorderEvents=
builder.stream(Serdes.String(),orderEventSerde,"orders");

雖然 Kafka Streams API 在 Java 應用程序中運行良好,但有時我們可能希望部署一個獨立的流處理模塊,而不將其嵌入到應用程序中。這時,我們可以使用 ksqlDB。這是一個針對流處理進行了優化的數據庫集群。它還提供了 REST API,供我們查詢結果。

我們可以看到,有了計算層中的各種 API 支持,我們可以非常靈活地對事件流進行鏈式操作。

例如,我們可以在消費者中訂閱主題 "orders",按照產品維度進行訂單聚合,然后將每個產品的訂單數發回 Kafka 主題 "ordersByProduct";另一個分析模塊可以訂閱這個主題并在界面上顯示這些訂單。

存儲層

這一層由 Kafka Broker 組成。Kafka Broker 以集群模式運行。數據存儲在不同主題的分區中。

主題就像一個數據庫表,主題中的分區可以分布在不同的集群節點上。在分區內,事件嚴格按照偏移量(offset)排序。偏移量代表事件在分區中的位置,并單調遞增。

在 Broker 上持久化的事件是不可變的(immutable)、只可追加的(append only),即使是刪除也被模擬為刪除事件,而不是直接從磁盤上刪除數據。因此,生產者只能處理順序寫入,消費者只能順序讀取。

Kafka Broker 的職責包括管理分區、處理讀寫操作以及管理分區的數據復制。它的設計非常簡單,因此易于擴展

由于 Kafka Broker 是以集群模式部署的,因此有兩個必要的組件來管理節點:控制面板和數據面板。

控制面板

控制平面管理 Kafka 集群的元數據。以前的版本中是由 Zookeeper 來管理控制器:挑選一個 Broker 作為控制器(Controller)?,F在,Kafka 使用名為 KRaft 的共識模塊來實現控制面板,選取幾個 Broker 做為控制器。

為什么不再依賴 Zookeeper?因為使用 Zookeeper 時,我們需要維護兩個不同類型的系統:一個是 Zookeeper,另一個是 Kafka。有了 KRaft,我們只需維護一種類型的系統,這使得配置和部署比以前容易得多。此外,KRaft 在向 Broker 傳播元數據方面效率更高。

我們不會在這里討論 KRaft 共識的細節。需要記住的一點是,控制器和 Broker 中的元數據緩存是通過 Kafka 中的一個特殊主題同步的。

數據面板

數據面板處理數據的復制操作。單個分區的數據可以在不同的 Broker 上有多份拷貝,這些拷貝之間需要進行數據同步。

下圖是一個示例。主題 "訂單"中的分區 0 在 3 個代理上有 3 個副本。Broker 1 上的分區是領導者(leader),當前數據偏移量為 4;Broker 2 和 3 上的分區是跟隨者(follower),偏移量分別為 2 和 3。

6f1fd300-666a-11ee-939d-92fbcf53809c.png

第一步

為了趕上領導者,跟隨者 1 發出偏移量為 2 的 FetchRequest,跟隨者 2 發出偏移量為 3 的 FetchRequest。

第二步

然后,領導者相應地向兩個跟隨者發送數據。

第三步

由于跟隨者的請求隱含地確認了先前獲取記錄的接收情況,因此領導者會將偏移量 2 之前的記錄提交。

編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    112

    文章

    16197

    瀏覽量

    177398
  • JAVA
    +關注

    關注

    19

    文章

    2957

    瀏覽量

    104544
  • API
    API
    +關注

    關注

    2

    文章

    1484

    瀏覽量

    61814
  • 數據庫
    +關注

    關注

    7

    文章

    3765

    瀏覽量

    64274
  • kafka
    +關注

    關注

    0

    文章

    50

    瀏覽量

    5211

原文標題:面試官:Kafka架構長什么樣的?

文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    kafka架構與集群搭建

    kafka入門+集群搭建
    發表于 04-29 17:06

    EFK63+kafka+logstash架構解讀

    EFK63+kafka+logstash日志分析平臺集群
    發表于 08-15 11:35

    基于發布與訂閱的消息系統Kafka

    Kafka權威指南》——初識 Kafka
    發表于 03-05 13:46

    Kafka基礎入門文檔

    kafka系統入門教程(原理、配置、集群搭建、Java應用、Kafka-manager)
    發表于 03-12 07:22

    Kafka集群環境的搭建

    1、環境版本版本:kafka2.11,zookeeper3.4注意:這里zookeeper3.4也是基于集群模式部署。2、解壓重命名tar -zxvf
    發表于 01-05 17:55

    TCP回響客戶端:RAW API接口

    TCP回響客戶端例程(RAW API)
    的頭像 發表于 07-05 00:31 ?3909次閱讀
    TCP回響<b class='flag-5'>客戶端</b>:RAW <b class='flag-5'>API</b>接口

    架構師應該使用Kafka還是Rabbit MQ

    作為處理許多基于微服務的系統的軟件架構師,我經常遇到一個不斷重復的問題:"我應該使用RabbitMQ還是Kafka?" 由于某些原因,許多開發人員認為這些技術是可互換的。 盡管在某些情況下確實如此,但這些平臺之間存在各種潛在的差
    的頭像 發表于 05-03 18:10 ?2336次閱讀
    <b class='flag-5'>架構</b>師應該使用<b class='flag-5'>Kafka</b>還是Rabbit MQ

    Kafka的概念及Kafka的宕機

    問題要從一次Kafka的宕機開始說起。 筆者所在的是一家金融科技公司,但公司內部并沒有采用在金融支付領域更為流行的 RabbitMQ ,而是采用了設計之初就為日志處理而生的 Kafka ,所以我一直
    的頭像 發表于 08-27 11:21 ?2056次閱讀
    <b class='flag-5'>Kafka</b>的概念及<b class='flag-5'>Kafka</b>的宕機

    kafkaUI-lite Kafka UI界面客戶端工具

    ./oschina_soft/gitee-kafka-ui-lite.zip
    發表于 06-14 11:07 ?6次下載
    kafkaUI-lite <b class='flag-5'>Kafka</b> UI界面<b class='flag-5'>客戶端</b>工具

    基于RAW API的UDP客戶端設計

    前一節我們實現了基于RAW API的UDP服務器,在接下來,我們進一步利用RAW API實現UDP客戶端
    的頭像 發表于 12-14 14:59 ?1215次閱讀
    基于RAW <b class='flag-5'>API</b>的UDP<b class='flag-5'>客戶端</b>設計

    想要kafka好用你就得知道這些工具

    工欲善其事,必先利其器。本文主要分享一下消息中間件kafka安裝部署的過程,以及我平時在工作中針對kafka用的一些客戶端工具和監控工具。
    的頭像 發表于 05-22 16:33 ?1208次閱讀
    想要<b class='flag-5'>kafka</b>好用你就得知道這些工具

    Kafka 的簡介

    ? 1 kafka簡介 2 為什么要用消息系統 3 kafka基礎知識 4 kafka集群架構 5 總結 ? 1 kafka簡介 其主要設計
    的頭像 發表于 07-03 11:10 ?589次閱讀
    <b class='flag-5'>Kafka</b> 的簡介

    物通博聯5G-kafka工業網關實現kafka協議對接到云平臺

    Kafka協議是一種基于TCP層的網絡協議,用于在分布式消息傳遞系統Apache Kafka中發送和接收消息。Kafka協議定義了客戶端和服務器之間的通信方式和數據格式,允許
    的頭像 發表于 07-11 10:44 ?483次閱讀

    如何將Kafka使用到我們的后端設計中

    的Web應用,其包含了網頁前端客戶端(Client)、服務和數據庫: 你需要記錄所有發生在你的Web應用的事件,比如點擊、請求、搜索等
    的頭像 發表于 10-30 14:30 ?496次閱讀
    如何將<b class='flag-5'>Kafka</b>使用到我們的后端設計中

    Redis流與Kafka相比如何?

    我們先來看看Kafka的基本架構。基本的數據結構是主題。它是一個按時間排序的記錄序列,只需追加。使用這種數據結構的好處在Jay Kreps的經典博文The Log中得到了很好的描述。
    的頭像 發表于 02-21 16:09 ?434次閱讀
    Redis流與<b class='flag-5'>Kafka</b>相比如何?