3、Kafka 線上集群部署方案怎么做?

文章目錄

  • 1、操作系統的選擇
    • 1.1、I/O 模型的使用
    • 1.2、數據網絡傳輸效率
    • 1.3、社區支持度
  • 2、磁盤的選擇
  • 3、磁盤容量的規劃
    • 3.1、舉例思考本問題:
    • 3.2、計算一下:
    • 3.3、規劃磁盤容量時你需要考慮下面這幾個元素:
  • 4、帶寬規劃
    • 4.1、計算
  • 總結

1、操作系統的選擇

對比 Linux、Mac、Window,Linux 系統顯然要更加適合部署 Kafka。主要有下面這三個方面,Linux 的表現更勝一籌。

1.1、I/O 模型的使用

主流的 I/O 模型通常有 5 種類型:阻塞式 I/O、非阻塞式 I/O、I/O 多路復用、信號驅動 I/O 和異步 I/O。

通常情況下我們認為后一種模型會比前一種模型要高級。

相關實現場景,比如 Java 中 Socket 對象的阻塞模式和非阻塞模式就對應于前兩種模型;而 Linux 中的系統調用 select 函數就屬于 I/O 多路復用模型;大名鼎鼎的 epoll 系統調用則介于第三種和第四種模型之間;至于第五種模型,其實很少有 Linux 系統支持,反而是 Windows 系統提供了一個叫 IOCP 線程模型屬于這一種。

那么 I/O 模型與 Kafka 的關系又是什么呢?Kafka 客戶端底層使用了 Java 的 selector,selector 在 Linux 上的實現機制是 epoll,而在 Windows 平臺上的實現機制是 select。因此在這一點上將 Kafka 部署在 Linux 上是有優勢的,因為能夠獲得更高效的 I/O 性能。

1.2、數據網絡傳輸效率

Kafka 生產和消費的消息都是通過網絡傳輸的,而消息保存在哪里呢?肯定是磁盤。故 Kafka 需要在磁盤和網絡間進行大量數據傳輸。Linux 有個零拷貝(Zero Copy)技術,就是當數據在磁盤和網絡進行傳輸時避免昂貴的內核態數據拷貝從而實現快速的數據傳輸。Linux 平臺實現了這樣的零拷貝機制,但有些令人遺憾的是在 Windows 平臺上必須要等到 Java 8 的 60 更新版本才能 “享受” 到這個福利。

一句話總結一下,在 Linux 部署 Kafka 能夠享受到零拷貝技術所帶來的快速數據傳輸特性。

1.3、社區支持度

社區目前對 Windows 平臺上發現的 Kafka Bug 不做任何承諾。雖然口頭上依然保證盡力去解決,但根據我的經驗,Windows 上的 Bug 一般是不會修復的。因此,Windows 平臺上部署 Kafka 只適合于個人測試或用于功能驗證,千萬不要應用于生產環境。

2、磁盤的選擇

磁盤資源對 Kafka 性能影響尤其突出,那應該選擇普通的機械磁盤還是固態硬盤?

  • 機械磁盤成本低且容量大,但易損壞;
  • 固態硬盤性能優勢大,不過單價高。

建議是使用普通機械硬盤即可

  • Kafka 大量使用磁盤不假,可它使用的方式多是順序讀寫操作,一定程度上規避了機械磁盤最大的劣勢,即隨機讀寫操作慢。從這一點上來說,使用 SSD 似乎并沒有太大的性能優勢,畢竟從性價比上來說,機械磁盤物美價廉
  • 機械磁盤因易損壞而造成的可靠性差等缺陷,又由 Kafka 在軟件層面提供機制來保證

3、磁盤容量的規劃

Kafka 集群到底需要多大的存儲空間?Kafka 需要將消息保存在底層的磁盤上,這些消息默認會被保存一段時間然后自動被刪除。 雖然這段時間是可以配置的,但你應該如何結合自身業務場景和存儲需求來規劃Kafka集群的存儲容量呢?

3.1、舉例思考本問題:

  • 假設你所在公司有個業務每天需要向 Kafka 集群發送 1 億條消息,
  • 每條消息保存兩份以防止數據丟失,
  • 另外消息默認保存兩周時間。

現在假設消息的平均大小是 1KB,那么你能說出你的 Kafka 集群需要為這個業務預留多少磁盤空間嗎?

3.2、計算一下:

  • 每天 1 億條 1KB 大小的消息,保存兩份且留存兩周的時間,那么總的空間大小就等于 1 億 * 1KB * 2 / 1000 / 1000 = 200GB。
  • 一般情況下 Kafka 集群除了消息數據還有其他類型的數據,比如索引數據等,故我們再為這些數據預留出 10% 的磁盤空間,因此總的存儲容量就是 220GB。
  • 既然要保存兩周,那么整體容量即為 220GB * 14,大約 3TB 左右。
  • Kafka 支持數據的壓縮,假設壓縮比是 0.75,那么最后你需要規劃的存儲空間就是 0.75 * 3 = 2.25TB。

3.3、規劃磁盤容量時你需要考慮下面這幾個元素:

  • 新增消息數
  • 消息留存時間
  • 平均消息大小
  • 備份數
  • 是否啟用壓縮

4、帶寬規劃

對于Kafka這種通過網絡進行大數據傳輸的框架,帶寬容易成為瓶頸。 普通的以太網絡,帶寬主要有兩種:1Gbps的千兆網絡和10Gbps的萬兆網絡,特別是千兆網絡應該是一般公司網絡的標準配置了 以千兆網絡為例,說明帶寬資源規劃。

真正要規劃的是所需的Kafka服務器的數量。 假設機房環境是千兆網絡,即1Gbps,現在有業務,其目標或SLA是在1小時內處理1TB的業務數據。 那么問題來了,你到底需要多少臺Kafka服務器來完成這個業務呢?

4.1、計算

帶寬是 1Gbps,即每秒處理 1Gb 的數據,假設每臺 Kafka 服務器都是安裝在專屬的機器上,也就是說每臺 Kafka 機器上沒有混布其他服務,畢竟真實環境中不建議這么做。通常情況下你只能假設 Kafka 會用到 70% 的帶寬資源,因為總要為其他應用或進程留一些資源。超過 70% 的閾值就有網絡丟包的可能性了,故 70% 的設定是一個比較合理的值,也就是說單臺 Kafka 服務器最多也就能使用大約 700Mb 的帶寬資源。

這只是它能使用的最大帶寬資源,你不能讓 Kafka 服務器常規性使用這么多資源,故通常要再額外預留出 2/3 的資源,即單臺服務器使用帶寬 700Mb / 3 ≈ 240Mbps。需要提示的是,這里的 2/3 其實是相當保守的,你可以結合你自己機器的使用情況酌情減少此值。

有了 240Mbps,我們就可以計算 1 小時內處理 1TB 數據所需的服務器數量了。根據這個目標,我們每秒需要處理 2336Mb 的數據,除以 240,約等于 10 臺服務器。如果消息還需要額外復制兩份,那么總的服務器臺數還要乘以 3,即 30 臺。

總結

所謂 “兵馬未動,糧草先行”。與其盲目上馬一套 Kafka 環境然后事后費力調整,不如在一開始就思考好實際場景下業務所需的集群環境。在考量部署方案時需要通盤考慮,不能僅從單個維度上進行評估。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

電商淘寶爬蟲API與淘寶官方開放平臺API的區別以及如何選擇適合自己的API接口

隨著數字化時代的到來,數據已經成為企業競爭力的重要因素。為了獲取數據,企業或個人常常需要使用API接口。常見的API接口包括爬蟲API和官方開放平臺API。本文將詳細介紹這兩種API接口的區別以及如何選擇適合自己的API接口。 一、爬蟲API與官方開放平臺A…

如何使用GaussDB創建外表(FOREIGN TABLE)

目錄 一、前言 二、創建外表的特點 二、GaussDB創建外表訪問外部數據庫表(示例) 1、創建外表 2、FAQ:CREATE USER MAPPING錯誤 三、GaussDB創建外表映射數據文件(示例) 1、創建數據文件 2、創建外表 3、FAQ&a…

Java之時間類2(JDK8新增)

一、Date類 &#xff08;一&#xff09;、ZoneId&#xff1a;時區 1、概述 ZoneId是Java 8中處理時區的類。它用于表示時區標識符&#xff0c;例如“America/New_York”或“Asia/Tokyo”。一共有600個時區。 2、常用方法: static Set<String> getAvailableZoneIds()獲…

C++基礎知識

目錄 前言&#xff1a; 命名空間 命名空間的定義 命名空間的使用 c輸入與輸出 缺省參數 函數重載 引用 引用的特性 常引用 引用的使用場景 引用做參數 引用做返回值 引用與指針的區別 內聯函數 內聯函數的特性 前言&#xff1a; C 語言是結構化和模塊化的語言&…

VS CODE 出錯 XHR failed

重新下載過去的版本&#xff0c;可能由于最近版本更新導致 Visual Studio Code September 2023

談談MYSQL主從復制原理

目錄 概述 要點binlog日志 主從復制過程 總結 概述 MySQL 主從復制是指數據可以從一個MySQL數據庫服務器主節點復制到一個或多個從節點。 MySQL 默認采用異步復制方式。從節點不用一直訪問主服務器來更新自己的數據&#xff0c;數據的更新可以在遠程連接上進行&#xff0…

Volatility3內存取證工具安裝及入門在Linux下的安裝教程

1-1. Volatility3簡介 Volatility 是一個完全開源的工具&#xff0c;用于從內存 (RAM) 樣本中提取數字工件。支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等多類型操作系統系統的內存取證。 針對競賽這塊&#xff08;CTF、技能大賽等&#xff09;基本上都…

websocket vue操作

let websocket: WebSocket; /** websocket測試 */ function connectWebsocket() {if (typeof WebSocket "undefined") {console.log("您的瀏覽器不支持WebSocket");return;}// let ip window.location.hostname ":8080";let ip "10.192…

瑞薩RZ/G2L核心板Linux Log目錄文件詳解

為了排除系統問題&#xff0c;監控系統健康狀況以及了解系統與應用程序的交互方式&#xff0c;我們需要了解各log文件的作用&#xff0c;以G2L中yocto文件系統為例&#xff0c;在系統/var/log/目錄下會存放記錄系統中各個部分的log文件作用如下&#xff1a; 1. 文件詳情 下圖…

Ubuntu系統部署Inis博客并使用內網穿透發布到公網隨時隨地遠程訪問

目錄 前言 推薦 1. Inis博客網站搭建 1.1. Inis博客網站下載和安裝 1.2 Inis博客網站測試 1.3 cpolar的安裝和注冊 2. 本地網頁發布 2.1 Cpolar臨時數據隧道 2.2 Cpolar穩定隧道&#xff08;云端設置&#xff09; 2.3.Cpolar穩定隧道&#xff08;本地設置&#xff09;…

鴻蒙原生應用/元服務開發-Stage模型能力接口(二)

ohos.app.ability.AbilityConstant (AbilityConstant)一、說明 AbilityConstant提供Ability相關的枚舉&#xff0c;包括設置初次啟動原因、上次退出原因、遷移結果、窗口類型等。本模塊首批接口從API version 9開始支持。后續版本的新增接口&#xff0c;采用上角標單獨標記接口…

matlab 最小二乘擬合平面(拉格朗日乘子法)

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。博客長期更新,爬蟲自重。 一、算法原理 設擬合出的平面方程為: a x + b y &#

Linux筆記之systemctl命令詳解

Linux筆記之systemctl命令詳解 code review! 文章目錄 Linux筆記之systemctl命令詳解systemctl restart docker 詳解 systemctl 是一個用于管理 systemd 服務的命令行工具。systemd 是一個用于啟動、停止和管理 Linux 系統中的進程的系統和服務管理器。下面是一些常見的 syst…

機器視覺系統選型-條形光源分類及應用場景

標準面光源 從平坦發光面照射漫射光 機械零件尺寸測量電子元件、IC的外形檢測邊緣缺陷檢測服裝紡織、食品包裝檢測 中孔面光源 從相機的同軸方向照射漫射光 金屬零件缺陷檢測金屬外殼檢測大面積電子元件的字符識別 平行面光源 照射平行度較高的漫射光玻璃瓶直徑測量螺釘牙輪…

Android studio 離線配置gradle

Gradle Distributions Gradle Distributions 查看gradle 文件夾下 gradle-wrapper.properties文件中的distributionUrl 版本號 然后在上邊網站下載對應需要的gradle對應版本 下載后復制到 gradle wrapper文件下&#xff0c;同時修改 distributionUrl 指向本地文件 然后同步就…

xtu oj 1233 Cycle Matrix

題目描述 給定N&#xff0c;輸出一個N*N的矩陣&#xff0c;矩陣為N層&#xff0c;每層是一個字符&#xff0c;從A到Z。 比如說N3,矩陣為 CCCCC CBBBC CBABC CBBBC CCCCC輸入 第一行是一個整數K&#xff08;K≤50&#xff09;,表示樣例數。 每個樣例占1行&#xff0c;為一個整…

647.回文子串

給你一個字符串 s &#xff0c;請你統計并返回這個字符串中 回文子串 的數目。 回文字符串 是正著讀和倒過來讀一樣的字符串。 子字符串 是字符串中的由連續字符組成的一個序列。 具有不同開始位置或結束位置的子串&#xff0c;即使是由相同的字符組成&#xff0c;也會被視作…

迷你型洗衣機好用嗎?口碑好的四款小型洗衣機推薦

隨著人們的生活水平的提升&#xff0c;越來越多小伙伴來開始追求更高的生活水平&#xff0c;一些智能化的小家電就被發明出來&#xff0c;而且內衣洗衣機是其中一個。現在通過內衣褲感染到細菌真的是越來越多&#xff0c;所以我們對內衣褲的清洗頻次會高于普通衣服&#xff0c;…

輕量封裝WebGPU渲染系統示例<47>- 多種光源(源碼)

當前示例源碼github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/MultiLightsShading.ts 當前示例運行效果: 此示例基于此渲染系統實現&#xff0c;當前示例TypeScript源碼如下: export class MultiLightsShading {private mRscene…

STM32 DAC+串口

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、DAC是什么&#xff1f;二、STM32 DAC1.什么型號有DAC2. 簡介3. 主要特點4. DAC框圖5. DAC 電壓范圍和引腳 三、程序步驟總結 前言 提示&#xff1a;這里可…