精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我是如何將一個老系統的Kafka消費者服務的性能提升近百倍的?

開發 架構
根據kafka自身的機制,將topic進行分片調整,拆分為N個分片,然后增設消費者組,在消費者組內部署與分片數相等的消費者服務節點,這樣每個消費者可以處理一個分片,這樣整個評論的消費性能就會提升N倍。

如果問你,如何提高kafka隊列中的消息消費速度呢?

答案很簡單,topic多分幾個分片,然后使用消費者組(Consumer Group)去消費topic即可。

如果加個條件,對同一個對象的操作請求必須要嚴格按照順序進行處理呢?

答案也不難,topic分片之后,生產者定制分發策略,保證同一對象的操作請求都分發到同一個分片中,這樣每個消費者就都是在按照順序消費各自分片中的數據啦~

如果再加上一些條件:

這個消費者消費速度極慢、慢到需要100ms才能處理完一條消息,即使topic分100片也不滿足不了要求;

每個對象的操作請求數量存在嚴重傾斜的現象,有的分片消息數量很大,有的分片消息量很少,可能有的分片一直積壓、有的分片卻很閑;

請求操作很重要,需要確保每條請求都被可靠消費,要保證事務最終一致性;

數十年的老系統,業務錯綜復雜,項目方不允許涉及業務邏輯以及整體架構的大改…

當上述各種條件疊加到一起,要求將消費性能明顯提升,如果是你,會如何破局呢?

圖片

前段時間,應業務部門的要求,給他們的一個線上歷史系統做個并發性能提升的方案,就遇到了上述各種要求疊加在一起的棘手情況。

先簡單說下遇到的業務場景:

一個互動類的論壇的帖子評論處理場景,要求每個帖子的評論請求操作都必須要嚴格遵循一定的順序(比如可能會有評論刪除、引用評論、回復評論等操作,所以請求順序必須要嚴格按照順序處理),帖子評論的操作請求發送到kafka里面,然后評論服務消費kafka處理各個請求,這個評論消費者服務消費太慢,需要提升下并發效率。

增加分片與消費者數量

正式開始著手去整改優化。

首先是常規調整:根據kafka自身的機制,將topic進行分片調整,拆分為N個分片,然后增設消費者組,在消費者組內部署與分片數相等的消費者服務節點,這樣每個消費者可以處理一個分片,這樣整個評論的消費性能就會提升N倍。

圖片

那么,這里為什么要強調消費者組里的服務節點數要等于topic分片數呢?這里提一下kafka中Consumer Group中消費者數量與topic分片數之間的相關邏輯。

看一下不同的消費者數量與topic分片數對應的處理消費場景:

圖片

圖片

所以說,消費者組里面的消費者數量并不是越多越好,而是受到了topic的分片數量的限制的:

消費者數量太少,會導致一個消費者需要消費多個分片的數據,造成某一個消費者消費壓力提升;

消費者數量太多,會導致有的消費者并不會消費任何數據,浪費部署資源。

也是基于這一點,上述我們的方案中,規劃消費者組里的消費者數量與topic的分片數一致,這樣可以保證每個消費者消費1個分片,達到最大效率協調。

再補充個知識點:為什么kafka要限制每個分片最多只能有1個消費者組里的消費者在處理呢?

因為消費者拉取消息需要提供offset, limit。如果offset放在broker端,那么一定會產生額外的通信開銷;如果offset放在Consumer端,如果在一個組有多個消費者,就需要有一個協調者,集中式的管理,解決鎖沖突,如果不解決沖突,那么勢必會產生重復消費、無用的消費,從而導致資源浪費。所以說,從性能與復雜度的取舍上,Kafka采用了相對簡單的一種解決策略。

保證分片內寫入順序

通過上一章的方式,增加了topic分區數以及消費者組中消費者數量,對kafka中消息并行消費的效率是提升了,但是問題又來了:順序問題!

前面說過,由于業務明確要求確保順序消費,而kafka只是保證分片內的消費順序是固定的,但是不同分片之間的消費順序是無法保證的。

對業務進行分析發現,業務要求的順序處理,其實是有條件的順序處理。即對于同一個帖子的所有評論相關的操作必須要同步處理,對于不同帖子的評論相關操作并沒有順序的要求。那么問題就簡單了,只要保證同一個帖子的所有評論相關操作請求都被分發到同一個topic分區內即可!

生產者寫入消息到kafka的topic時,kafka將依據不同的策略將數據分配到不同的分區中:

  • 輪詢分區策略
  • 隨機分區策略
  • 按key分區分配策略
  • 自定義分區策略

這里采用自定義分區策略,因為每個評論操作請求中都攜帶有一個原始帖子ID字段,所以分發策略也很簡單,直接帖子ID % 分片數將消息進行分發,這樣同一個帖子ID的評論操作就都可以到同一個分片中,這樣順序的問題就解決了。

圖片

所以,對上一環節給定的初步方案進行優化,補充下生產者端的定制化分發策略的要求,保證同一個帖子的評論操作都會到同一個Topic分片中:

圖片

方案設計到這里,似乎已經是解決了并發消費的問題了。但是后來實際壓測之后,結果令人大跌眼鏡。

單消費者速度提升

按照前面給出的方案,部署了DEMO環境進行壓測(拆分成4個分片,部署4個消費者),最終發現集群消費速度的確是翻了4倍、但是整體并發量依舊是低的可憐,4臺機器最終消費并發量甚至不到100???

心靈受到暴擊之后,去分析下單個消費者節點的運行情況,發現壓測過程中整個機器CPU、IO、MEM、線程數都非常低、毫無任何波動。問業務方要了代碼權限,下載了代碼并走讀了一遍Consumer服務的代碼邏輯才發現其中玄機。

其實該業務整體交互邏輯其實很簡單,從kafka獲取一個消息,然后進行消費。但是這個消費邏輯,是需要按順序調用10余個周邊系統的HTTP接口!這也難怪CPU、內存、IO都非常低了,整個進程中只有一個線程在處理業務、而這個線程大部分時間都是處于IO等待狀態。

所以要想提升整體集群的消費能力,要么無限擴機器、要么就提升單節點的消費能力 —— 顯然前者是不可能的,只能選擇后者。而對于單線程、多IO操作的場景,提升并發性能,首先想到的就是改為多線程并發處理。但是多線程并發的時候,又會涉及到如何保證順序消費的問題。

對前面的方案進行優化,給出如下方案:

圖片

在前面方案的基礎上,主要是對消費者端的實現邏輯進行了調整:

在消費者內部,區分Consumer Thread和Work Thread,Consumer Thread負責從kafka拉取消息,而Work Thread負責真正的消費邏輯處理。

單機內存中維護若干個隊列,每個隊列對應一個Work Thread,負責消費該隊列中的數據;

Consumer Thread基于親緣性分發策略對消息進行二次分發,保證相同帖子ID的請求分發到不同的內部隊列中。

再進行壓測,設置單個消費者服務Work Thread數量為100,集群內4個消費者服務,整體消費速度達到了7000。單節點的消費性能從原來的20提升到1700,提升了近80倍!

如何保證消息不丟失

經過將單機的消費模式改為多線程的方式,目前并發消費性能的問題是解決了,可是可靠性的問題又出現了。

原先的時候,消費者從kafka拉取一條消息,然后消費完成后,給kafka一個ack應答,然后去拉取下一條消息,這樣即使消費者中途宕機了,kafka依舊可以將消息分發給下一個可用的消費者去處理,可以保證請求消息不會丟失掉。

而前面的方案,消費者服務從kafka拉取到消息之后,并沒有等待處理完成,就繼續從kafka拉取消息然后緩存在本機內存中等待work thread慢慢消費,這個時候,如果機器宕機,所有緩存的消息將全部丟失!

為了解決上述問題,考慮將kafka應答機制改為手動提交ack。但是由于多個線程之間亂序的處理kafka上的數據,各個線程已經處理的offset值是不一樣的。如下示意圖:

圖片

為了保證消息可靠不丟失,采用如下策略:定期手動提交當前的offset信息,提交的offset值,選擇當前節點已處理的最小offset值(對于上面示意圖,即提交1002這個offset值),可以通過在內存中緩存下處理的offset列表的方式實現,如下如實現策略:

圖片

正常情況下,提交的offset值不會有什么作用或影響,但是一旦出現異常情況,導致當前節點進程不可用,kafka重平衡將當前分片分給另一個消費者進行消費的時候,另一個消費者會從最后一次提交的offset位置開始繼續往后消費。這樣便解決了數據丟失的問題,保證了數據可靠。

但是,另一個問題又出現了:重復消費。好在,雖然這個業務系統是十多年前構建的,但是至少分布式消費者該有的一個關鍵特性還是具備的,那就是冪等,所以這個問題就不用考慮了。

數據積壓不可控場景兜底

到這里,總該一切都沒問題了吧?

是,也不是。正常情況下是沒問題了,但是作為一個"核心"系統,極端的異常情況的保命策略還需要考慮下。

舉個例子,如果突然有一條帖子爆火,這條帖子的評論量遠超其余帖子的評論量,甚至遠超整個系統的額定最大負載請求量,這樣會出現個問題:

  • kafka某一個分片數據量積壓嚴重,其余分片很空閑
  • 該條火爆的帖子的相關評論請求,阻塞了與該帖子分配到同一分區的其余帖子的評論處理。

這個原計劃做一個動態伸縮的分片分發策略,但考慮到此場景過于極端,當前系統實施起來性價比不高,所以本著適當設計的原則,放棄了原先方案,改為了簡單的手動處理 + 補償服務方式,如下:

圖片

一旦出現未預料到的異常,導致系統積壓已經超過正常的處理范圍了,且已經遠超系統可以正常恢復的限度,為了保證現有業務盡快的恢復正常,可以先跳過積壓的請求,先保證新過來的請求正常被處理,然后啟動補償進程,慢慢消費之前積壓的消息。

有一說一:

這個地方是整個方案里面我自己不太滿意的一個實現,屬于遷就現實的一種妥協方案,寫這篇文檔的時候,自己還是打算近期將這部分按照一個更優的方案進行實現。如果您也有興趣了解或者有更好的建議思路,歡迎聯系我,我們一起掰扯下。

總結梳理

至此呢,為了解決kafka消費者消費能力太慢場景的集群并發性能提升方案就全部設計完成了,業務要求的各種要求約束也都可以滿足了,最終實現了在業務邏輯沒有變的情況下,整體集群的性能提升了上百倍。整體的改動內容如下:

圖片

責任編輯:武曉燕 來源: 架構悟道
相關推薦

2024-08-01 08:06:11

虛擬線程性能

2016-07-28 10:03:03

Intel

2023-04-14 07:09:04

2012-11-21 17:35:21

Oracle技術嘉年華

2021-03-17 08:11:29

SpringBoot項目數據庫

2022-08-08 10:55:31

5G物聯網智能手機

2021-10-26 10:50:25

Kafkabroker

2014-11-11 15:57:07

2023-06-01 08:08:38

kafka消費者分區策略

2018-06-26 15:23:34

華為云

2020-10-09 14:05:32

代碼Big Code開發

2017-05-11 11:30:43

MySQL查詢速度

2015-09-01 09:53:04

Java Web開發者

2025-06-12 02:15:00

Kafka消費者高并發

2019-10-08 14:22:43

分布式HDFS算法

2023-05-31 07:24:48

2022-05-26 08:12:39

PandasApply技巧

2021-08-26 15:50:19

安謀科技

2017-05-10 16:09:12

MySQL數據庫查詢

2024-03-19 10:55:34

Spark
點贊
收藏

51CTO技術棧公眾號

久久精品99久久| 久久久久久久久电影| 99re精彩视频| 在线观看免费视频你懂的| 国产a视频精品免费观看| 91国产视频在线播放| 尤物yw午夜国产精品视频明星| ijzzijzzij亚洲大全| 成人午夜免费在线观看| 日韩成人免费看| 欧美乱妇高清无乱码| 亚洲av无码一区二区二三区| 色8久久久久| 无吗不卡中文字幕| 综合一区中文字幕| 天天影院图片亚洲| 紧缚捆绑精品一区二区| 热久久这里只有| 国产尤物在线播放| 女人丝袜激情亚洲| 日韩欧美一二三四区| 成人精品小视频| 激情在线视频播放| 国产精品欧美久久久久无广告| 国产欧美韩日| 国产精品久久婷婷| 久久婷婷麻豆| 欧美黄色三级网站| 国产成人免费在线观看视频| 亚洲欧洲色图| 欧美va在线播放| 九九热精品在线播放| 中国字幕a在线看韩国电影| 亚洲私人影院在线观看| 日产国产精品精品a∨| 少妇无码一区二区三区| 国产ts人妖一区二区| 国产日本欧美一区二区三区在线 | 欧美色图色综合| 伊人影院在线视频| 国产精品激情偷乱一区二区∴| 欧美精品一区二区三区久久| 天天操天天舔天天干| 国产盗摄女厕一区二区三区| 91免费电影网站| 亚洲无码精品在线观看| 日本欧美加勒比视频| 日韩av免费看| 7799精品视频天天看| 免费在线播放第一区高清av| 98视频在线噜噜噜国产| 日本三级理论片| 黄色亚洲在线| 欧美精品xxx| 国产在线视频卡一卡二| 欧美日本一区二区视频在线观看 | 白白色免费视频| 一呦二呦三呦国产精品| 日韩精品有码在线观看| 欧美成人午夜精品免费| 亚洲+变态+欧美+另类+精品| 日韩av资源在线播放| 国产精品1000部啪视频| 国产午夜一区| 在线精品国产欧美| 可以免费看av的网址| 希岛爱理一区二区三区| 欧美精品一区二区三区国产精品| 91嫩草|国产丨精品入口| 欧美一区网站| 欧美黑人巨大精品一区二区| 国产在线拍揄自揄拍无码视频| 在线播放不卡| 欧美一区二区视频97| 日日摸天天添天天添破| 爽好多水快深点欧美视频| 青青草精品毛片| 最近中文字幕在线观看视频| 精品制服美女久久| 99久久99| 日本成人一区二区三区| 国产精品欧美一级免费| av 日韩 人妻 黑人 综合 无码| 日本中文字幕中出在线| 欧美日韩激情网| 亚欧在线免费观看| 久久影院一区二区三区| 亚洲福利视频网| av电影网站在线观看| 欧美激情另类| 韩剧1988免费观看全集| 波多野结衣视频观看| 国产在线播放一区三区四| 99影视tv| 黄视频在线观看免费| 亚洲美女免费视频| 成人小视频在线看| av在线精品| 日韩av一区在线观看| 国精产品视频一二二区| 亚洲激情精品| 国产日韩欧美另类| 偷拍25位美女撒尿视频在线观看| 一色桃子久久精品亚洲| 国产a级一级片| 国产精品日本一区二区三区在线| 日韩成人中文字幕| 老妇女50岁三级| 日韩激情av在线| 99视频免费观看| 成年人在线观看视频| 一区二区在线免费| 无限资源日本好片| 麻豆一区二区| 久久中文久久字幕| 无码人妻熟妇av又粗又大| 国产福利一区二区三区视频在线| 欧洲一区二区在线| 免费网站在线观看人| 欧美日韩国产影片| www.久久国产| 欧美日韩精品| 91性高湖久久久久久久久_久久99| 亚洲 欧美 激情 小说 另类| 亚洲乱码国产乱码精品精的特点 | 久久久久久欧美精品色一二三四| 激情在线小视频| 欧美午夜视频网站| 国精产品一区一区三区免费视频 | 国产精品久久久久久久乖乖| 日韩伦理一区二区| 一区二区av在线| 欧美一区二区三区网站| 成人做爰69片免费看网站| 91xxx视频| 国产精品亚洲成在人线| 亚洲午夜精品久久久久久性色| 日韩av一二三区| 丁香激情综合五月| 青青青在线观看视频| 国产一区二区三区免费观看在线| 最近2019中文字幕mv免费看 | 日韩午夜免费视频| 99电影网电视剧在线观看| 黄色片网站在线观看| 欧美日韩国产一区二区三区地区| 国产精品久久久视频| 日韩电影在线一区二区三区| 蜜桃久久精品乱码一区二区 | 日韩av电影院| 青青草在线视频免费观看| 精品久久久久久国产| 182在线视频| 国产亚洲在线| 久久综合伊人77777麻豆| 天堂中文在线播放| 亚洲精品日韩在线| 超碰在线免费97| 欧美国产日韩a欧美在线观看| 黑鬼大战白妞高潮喷白浆| 你微笑时很美电视剧整集高清不卡| 欧美亚洲另类激情另类| 精品电影在线| 欧美日韩一区二区电影| 中国毛片直接看| 国产成人av电影在线观看| 福利视频一区二区三区四区| 国产精品15p| 2019中文在线观看| jizz日韩| 日韩一级大片在线| 五月天婷婷丁香| www日韩大片| 精品亚洲一区二区三区四区| 91九色精品| 国产日本一区二区三区| 都市激情亚洲一区| 日韩中文字幕视频在线观看| 超碰在线播放97| 精品av在线播放| 摸摸摸bbb毛毛毛片| 激情小说亚洲一区| 免费看欧美黑人毛片| 自拍视频一区| 成人免费看黄网站| 激情aⅴ欧美一区二区欲海潮| 亚洲欧洲一区二区三区久久| 一本色道久久综合无码人妻| 亚洲一区二区三区小说| 久久精品国产亚洲av麻豆| 久久97超碰国产精品超碰| 91黄色在线看| 日韩久久电影| 成人黄色在线免费观看| 日本中文字幕一区二区| 免费99精品国产自在在线| 视频一区二区三区在线看免费看| 欧美视频中文字幕| 亚洲精品午夜久久久久久久| 欧美国产一区二区在线观看| 91精产国品一二三| 日韩精品免费视频人成| 久久久久99精品成人片| 色乱码一区二区三区网站| 国产欧美日韩一区| 亚洲欧美综合久久久久久v动漫| 91成人免费观看网站| 麻豆视频在线观看免费网站| 日韩电影中文 亚洲精品乱码| 亚洲视频一区二区三区四区| 性久久久久久久久久久久| 99成人在线观看| 久久久亚洲综合| 久久无码专区国产精品s| 日本中文字幕一区二区视频 | 天堂成人国产精品一区| 欧美 亚洲 视频| 欧美视频免费| 久久综合狠狠综合久久综青草| 麻豆视频久久| 国产综合福利在线| 日韩中文影院| 亲爱的老师9免费观看全集电视剧| 青草视频在线免费直播 | 国产高清视频色在线www| 久久精品国产96久久久香蕉| 国产午夜视频在线观看| 日韩av影院在线观看| 免费观看国产精品| 日韩欧美一区二区三区在线| 国产一区二区三区中文字幕| 91极品美女在线| 香蕉影院在线观看| 精品久久久久久久中文字幕| 久久精品国产av一区二区三区| 亚洲视频资源在线| 久久av红桃一区二区禁漫| 日本一区二区三区dvd视频在线| 人妻少妇精品视频一区二区三区| 成人污污视频在线观看| www.黄色网| 国产91精品一区二区麻豆亚洲| 国产九九九视频| 国产精品一卡二| 亚洲自拍第三页| 国产做a爰片久久毛片| 黄色小视频免费网站| 蜜臀av一区二区在线观看| 牛夜精品久久久久久久| 蜜臀精品一区二区三区在线观看| 午夜视频你懂的| 美女在线观看视频一区二区| 奇米影视四色在线| 精品综合免费视频观看| 樱花草www在线| 国产高清不卡二三区| 国产吃瓜黑料一区二区| 成人h动漫精品| 三级电影在线看| 久久久久国产免费免费| 337人体粉嫩噜噜噜| 国产精品素人一区二区| 999精品在线视频| 一区二区三区av电影 | 日韩欧美精品中文字幕| 日本免费在线观看视频| 91精品办公室少妇高潮对白| 亚洲系列在线观看| 日韩欧美国产系列| 天堂а在线中文在线无限看推荐| 国产午夜精品免费一区二区三区| 91se在线| 欧美日本啪啪无遮挡网站| 国产粉嫩在线观看| 国产成人亚洲综合青青| 午夜精品久久久久久毛片| 成人性色av| 妖精视频一区二区三区免费观看| 先锋影音亚洲资源| 欧美黄色一区二区| 日韩少妇内射免费播放18禁裸乳| 日韩在线一二三区| 亚洲精品乱码久久久久久动漫| 国产91色综合久久免费分享| 一级黄色性视频| 日韩理论在线观看| 五月天综合在线| 欧美丝袜丝交足nylons| 亚洲黄色a级片| 亚洲欧洲xxxx| 影音先锋男人在线资源| 欧美怡红院视频一区二区三区| 欧美日韩伦理一区二区| 国产一级特黄a大片99| 日韩伦理视频| 欧美精品一区二区三区三州| 久久av中文字幕片| 一边摸一边做爽的视频17国产 | 一区二区三区在线观看免费视频| 亚洲天堂网中文字| 日韩精品一区二区亚洲av| 欧美精品xxxxbbbb| 日韩欧美在线观看一区二区| 久久久国产在线视频| 欧美www.| 国产高清精品一区二区| 日韩片欧美片| 高清在线观看免费| 国产sm精品调教视频网站| 欧美日韩生活片| 五月天一区二区三区| 91国在线视频| 亚洲人成在线观看| 麻豆视频在线观看免费网站黄| 成人免费观看a| 欧美亚洲在线日韩| 欧美国产亚洲一区| 高清不卡一区二区在线| 欧美日韩色视频| 欧美在线高清视频| 内衣办公室在线| 91国自产精品中文字幕亚洲| 日韩一区免费| mm131午夜| 麻豆精品视频在线观看免费| 97伦伦午夜电影理伦片| 天天综合天天做天天综合| 国产91免费在线观看| 久久人人爽人人爽人人片亚洲| 亚洲日本网址| 美乳视频一区二区| 亚洲一区观看| 亚洲最大免费视频| 亚洲高清不卡在线| 99国产在线播放| 色偷偷偷亚洲综合网另类| 国产成人精品123区免费视频| 欧美久久在线| 久久裸体视频| 亚洲成人网在线播放| 欧美日韩国产精品一区二区三区四区| 亚洲精品国产av| 久久久免费精品| 动漫3d精品一区二区三区乱码| 国产二区视频在线| bt7086福利一区国产| 国产成人无码精品久在线观看| 欧美精品一区二区三区久久久 | 亚洲天堂网2018| 国产精品视频观看| 亚洲综合精品在线| 久久精品电影一区二区| 精品国产乱码一区二区三区| 九九久久九九久久| 风间由美性色一区二区三区| 国产一级久久久| 亚洲第一页在线| free性m.freesex欧美| 久久精品aaaaaa毛片| 老司机免费视频久久| 国产欧美一区二区三区在线观看视频| 欧美色图12p| a在线免费观看| 国产精品视频免费一区| 国产欧美午夜| 日本污视频网站| 制服丝袜av成人在线看| 三级资源在线| 免费久久久一本精品久久区| 日韩av一级片| 538精品在线视频| 亚洲第一精品夜夜躁人人爽| 国产亚洲一区二区手机在线观看| 亚洲最新在线| 成人一区二区三区| 久久久久久久久久成人| www.日韩.com| 久久大胆人体视频| 黑人粗进入欧美aaaaa| 亚洲日本乱码在线观看| 天堂网av在线播放| 国产精品国产三级国产aⅴ9色| 91精品1区| 狠狠人妻久久久久久综合蜜桃| 欧美色图12p| av免费不卡| 亚洲欧美日韩国产yyy| 国产69精品久久久久777| 亚洲自拍一区在线观看| 久久精品国产欧美激情| 男人的天堂久久| 国产aⅴ爽av久久久久| 欧美日韩亚洲91| 国产三区视频在线观看| 欧美精品一区二区三区四区五区 | 高清日韩av电影| 99精彩视频在线观看免费| 日韩av高清在线观看| 久久人人爽人人爽人人| 中文字幕日本精品|