成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

吃透Kafka底層通信機制后,我把系統(tǒng)網絡性能提升了10倍以上

開發(fā) 架構
我們本文就以Kafka為例來給大家分析一下,Kafka在客戶端與服務端通信的時候,底層的一些網絡通信相關的機制如何設計以及如何進行優(yōu)化的。

這篇文章,給大家聊一個消息中間件相關的技術話題,對于一個優(yōu)秀的消息中間件而言,客戶端與服務端通信的時候,對于這個網絡通信的機制應該如何設計,才能保證性能最優(yōu)呢?甚至通過優(yōu)秀的設計,讓性能提升10倍以上。

我們本文就以Kafka為例來給大家分析一下,Kafka在客戶端與服務端通信的時候,底層的一些網絡通信相關的機制如何設計以及如何進行優(yōu)化的。

1、客戶端與服務端的交互

假如我們用kafka作為消息中間件,勢必會有客戶端作為生產者向他發(fā)送消息,這個大家應該都可以理解。

對于Kafka來說,他本身是支持分布式的消息存儲的,什么意思呢?

比如說現(xiàn)在你有一個“Topic”,一個“Topic”你就可以理解為一個消息數(shù)據(jù)的邏輯上的集合。

比如現(xiàn)在你要把所有的訂單數(shù)據(jù)都發(fā)送到一個“Topic”里去,那么這個“Topic”就叫做“OrderTopic”,里面都放的是訂單數(shù)據(jù)。

接著這個“Topic”的數(shù)據(jù)可能量很大很大,不可能放在一臺機器上吧?

所以呢,我們就可以分散存儲在多臺Kafka的機器上,每臺機器存儲一部分的數(shù)據(jù)即可。

這就是Kafka的分布式消息存儲的機制,每個Kafka服務端叫做一個Broker,負責管理一臺機器上的數(shù)據(jù)。

一起來看看下面的圖:

一個“Topic”可以拆分為多個“Partition”,每個“Partition”存儲一部分數(shù)據(jù),每個Partition都可以放在不同的Kafka Broker機器上,這樣就實現(xiàn)了數(shù)據(jù)分散存儲在多臺機器上的效果了。

然后客戶端在發(fā)送消息到Kafka Broker的時候,比如說你限定了“OrderTopic”的訂單數(shù)據(jù)拆分為3個“Partition”,那么3個“Partition”分別放在一個Kafka Broker上,那么也就是要把所有的訂單數(shù)據(jù)分發(fā)到三個Kafka Broker上去。

此時就會默認情況下走一個負載均衡的策略,舉個例子,假設訂單數(shù)據(jù)一共有3萬條,就會給每個Partition分發(fā)1萬條訂單消息,這樣訂單數(shù)據(jù)均勻分散在了3臺Broker機器上。

整個過程,如下圖所示:

2、頻繁網絡通信帶來的性能低下問題

好了,現(xiàn)在問題來了,客戶端在發(fā)送消息給Kafka Broker的時候,比如說現(xiàn)在要發(fā)送一個訂單到Kafka上去,此時他是怎么發(fā)送過去呢?

是直接一條訂單消息就對應一個網絡請求,發(fā)送到一臺Broker上去嗎?

如果是這樣做的話,那勢必會導致頻繁的跟一臺broker進行網絡通信,頻繁的網絡通信,每次都涉及到復雜的網絡連接、傳輸?shù)牧鞒蹋敲催M而會導致客戶端性能的低下。

給大家舉個例子,比如說每次通過一個網絡通信發(fā)送一條訂單到broker,需要耗時10ms。

那么如果一個訂單就一次網絡通信發(fā)送到broker,每秒最多就是發(fā)送100個訂單了,大家想想,是不是這個道理?

但是假如說你每秒有10000個訂單要發(fā)送,此時就會造成你的發(fā)送性能遠遠跟不上你的需求,也就是性能的低下,看起來你的系統(tǒng)發(fā)送訂單到kafka的速度就是特別的慢。

3、batch機制:多條消息打包成一個batch

所以首先針對這個問題,kafka做的第一個優(yōu)化,就是實現(xiàn)了batch機制。

這個意思就是說,他會在客戶端放一個內存緩沖區(qū),每次你寫一條訂單先放到內存緩沖區(qū)里去,然后在內存緩沖區(qū)里,會把多個訂單給打包起來成為一個batch。

比如說默認kafka規(guī)定的batch的大小是16kb,那么意思就是,你默認就是多條訂單湊滿16kb的大小,就會成為一個batch,然后他就會把這個batch通過網絡通信發(fā)送到broker上去。

假如說一個batch發(fā)送到broker,同樣也是耗費10ms而已,但是一個batch里可以放入100條訂單,那么1秒是不是可以發(fā)送100個batch?

此時,1秒是不是就可以發(fā)送10000條訂單出去了?

而且在打包消息形成batch的時候,是有講究的,你必須是發(fā)送到同一個Topic的同一個Partition的消息,才會進入一個batch。

這個batch里就代表要發(fā)送到同一個Partition的多條消息,這樣后續(xù)才能通過一個網絡請求,就把這個batch發(fā)送到broker,對應寫入一個Parititon中。

4、request機制:多個batch打包成一個request

事情到這里就結束了嗎?還沒有!

比如現(xiàn)在我們要是手頭有兩個Topic,每個Topic都有3個Partition,那么每個Broker是不是就會存放2個Partition?其中1個Partition是Topic01的,1個Partition是Topic02的。

現(xiàn)在假如說針對Topic01的Partition02形成了一個batch,針對Topic02的Partition02也形成了一個batch,但是這兩個batch其實都是發(fā)往同一個Broker的,如上圖的第二個Broker。

此時,還是一個網絡請求發(fā)送一個batch過去嗎?

其實就完全沒必要了,完全此時可以把多個發(fā)往同一個Broker的batch打包成一個request,然后一個request通過一次網絡通信發(fā)送到 那個Broker上去。

假設一次網絡通信還是10ms,那么這一次網絡通信就發(fā)送了2個batch過去。

通過這種多個batch打包成一個request一次性發(fā)往Broker的方式,又進一步提升了網絡通信的效率和性能。

其實 batch機制 + request 機制,都是想辦法把很多數(shù)據(jù)打包起來,然后一次網絡通信盡量多發(fā)送一些數(shù)據(jù)出去,這樣可以提升單位時間內發(fā)送數(shù)據(jù)的數(shù)量。

這個單位時間內發(fā)送數(shù)據(jù)的數(shù)量,也就是所謂的“吞吐量”,也就是單位時間內可以發(fā)送多少數(shù)據(jù)到broker上去。

比如說每秒鐘可以發(fā)送3萬條消息過去,這就是代表了客戶端的“吞吐量”有多大。

因此,通過搞清楚這個原理,就可以學習到這種非常優(yōu)秀的設計思想。而且在面試的時候,如果跟面試官聊到kafka,也可以跟面試官侃侃kafka底層,是如何有效的提升網絡通信性能的。

最后再來一張圖,作為全文總結。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-04-21 07:51:51

場景JavaSQL

2024-10-29 08:21:05

2022-09-27 18:19:32

Java數(shù)據(jù)結構

2025-05-27 01:55:00

TypeScript開發(fā)者項目

2021-09-13 10:25:35

開發(fā)技能代碼

2024-07-17 08:25:44

2022-11-01 18:11:16

線上系統(tǒng)性能切割函數(shù)

2021-02-02 15:38:19

Disruptor緩存Java

2022-11-19 18:18:22

Spring架構

2022-09-09 09:33:14

支付寶代碼性能

2021-12-27 06:57:40

Maven工具性能

2011-07-01 10:11:39

2023-03-22 13:53:26

芯片英偉達

2024-09-03 09:08:43

2021-08-02 10:50:57

性能微服務數(shù)據(jù)

2014-03-26 10:00:06

RailsRails性能

2019-10-08 14:22:43

分布式HDFS算法

2021-12-03 13:52:25

AI 數(shù)據(jù)人工智能

2025-05-09 02:00:00

代碼接口吞吐量

2024-12-13 13:58:53

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 羞羞视频一区二区 | 综合久久av | caoporn国产精品免费公开 | 国产成人久久av免费高清密臂 | 亚洲天堂成人在线视频 | 成人在线免费 | 中文字幕高清在线 | 成人三级av | 国产精品久久久亚洲 | 午夜黄色 | 91视频观看 | 亚洲精品第一国产综合野 | 精品国产一区二区国模嫣然 | 国产成人精品一区二区三区在线 | 国产精品一区二区av | 久草.com| 粉嫩粉嫩芽的虎白女18在线视频 | 日韩欧美国产一区二区 | 国产免费色 | 成人视屏在线观看 | 无码国模国产在线观看 | 日韩欧美一区二区三区四区 | 一区亚洲 | 国产精品久久久亚洲 | 蜜桃特黄a∨片免费观看 | www.99热.com| 欧美日韩在线精品 | 午夜视频免费 | 一片毛片| 亚洲成人久久久 | 国产一区视频在线 | 成人亚洲视频 | 亚洲不卡在线观看 | 国产精品国产a级 | 福利在线观看 | aaa在线观看| 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 欧美一区二区 | 青青草华人在线视频 | 欧美激情综合五月色丁香小说 | 国产传媒在线观看 |