91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kafka為什么不支持讀寫分離

發布時間:2021-12-15 15:43:08 來源:億速云 閱讀:140 作者:柒染 欄目:編程語言

本篇文章為大家展示了Kafka為什么不支持讀寫分離,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

在 Kafka 中,生產者寫入消息、消費者讀取消息的操作都是與 leader 副本進行交互的,從 而實現的是一種主寫主讀的生產消費模型。數據庫、Redis  等都具備主寫主讀的功能,與此同時還支持主寫從讀的功能,主寫從讀也就是讀寫分離,為了與主寫主讀對應,這里就以主寫從讀來稱呼!

Kafka 并不支持主寫從讀,這是為什么呢?

從代碼層面上來說,雖然增加了代碼復雜度,但在 Kafka 中這種功能完全可以支持。對于  這個問題,我們可以從“收益點”這個角度來做具體分析。主寫從讀可以讓從節點去分擔主節 點的負載壓力,預防主節點負載過重而從節點卻空閑的情況發生。但是主寫從讀也有  2 個很明顯的缺點:

  • 數據一致性問題。數據從主節點轉到從節點必然會有一個延時的時間窗口,這個時間 窗口會導致主從節點之間的數據不一致。某一時刻,在主節點和從節點中 A  數據的值都為 X, 之后將主節點中 A 的值修改為 Y,那么在這個變更通知到從節點之前,應用讀取從節點中的 A 數據的值并不為***的  Y,由此便產生了數據不一致的問題。

  • 延時問題。類似 Redis 這種組件,數據從寫入主節點到同步至從節點中的過程需要經  歷網絡→主節點內存→網絡→從節點內存這幾個階段,整個過程會耗費一定的時間。而在 Kafka 中,主從同步會比 Redis  更加耗時,它需要經歷網絡→主節點內存→主節點磁盤→網絡→從節 點內存→從節點磁盤這幾個階段。對延時敏感的應用而言,主寫從讀的功能并不太適用。

現實情況下,很多應用既可以忍受一定程度上的延時,也可以忍受一段時間內的數據不一致的情況!

那么對于這種情況,Kafka 是否有必要支持主寫從讀的功能呢?

主寫從讀可以均攤一定的負載卻不能做到完全的負載均衡,比如對于數據寫壓力很大而讀  壓力很小的情況,從節點只能分攤很少的負載壓力,而絕大多數壓力還是在主節點上。而在 Kafka  中卻可以達到很大程度上的負載均衡,而且這種均衡是在主寫主讀的架構上實現的。我們來看 一下 Kafka 的生產消費模型,如下圖所示:

Kafka為什么不支持讀寫分離

在 Kafka 集群中有 3 個分區,每個分區有 3 個副本,正好均勻地分布在 3個 broker 上,灰色陰影的代表 leader  副本,非灰色陰影的代表 follower 副本,虛線表示 follower 副本從 leader 副本上拉取消息。當生產者寫入消息的時候都寫入 leader  副本,對于上圖中的情形,每個 broker 都有消息從生產者流入;當消費者讀取消息的時候也是從 leader 副本中讀取 的,對于圖 8-23 中的情形,每個  broker 都有消息流出到消費者。

我們很明顯地可以看出,每個 broker上的讀寫負載都是一樣的,這就說明 Kafka 可以通過  主寫主讀實現主寫從讀實現不了的負載均衡。上圖展示是一種理想的部署情況,有以下幾種 情況(包含但不僅限于)會造成一定程度上的負載不均衡:

(1)broker 端的分區分配不均。當創建主題的時候可能會出現某些 broker 分配到的分區數 多而其他 broker  分配到的分區數少,那么自然而然地分配到的 leader 副本也就不均。

(2)生產者寫入消息不均。生產者可能只對某些 broker 中的 leader 副本進行大量的寫入操 作,而對其他 broker 中的 leader  副本不聞不問。

(3)消費者消費消息不均。消費者可能只對某些 broker 中的 leader 副本進行大量的拉取操 作,而對其他 broker 中的 leader  副本不聞不問。

(4)leader 副本的切換不均。在實際應用中可能會由于 broker 宕機而造成主從副本的切換, 或者分區副本的重分配等,這些動作都有可能造成各個  broker 中 leader 副本的分配不均。

對此,我們可以做一些防范措施。

針對第一種情況,在主題創建的時候盡可能使分區分配 得均衡,好在 Kafka 中相應的分配算法也是在極力地追求這一目標,如果是開發人員自定義的  分配,則需要注意這方面的內容。對于第二和第三種情況,主寫從讀也無法解決。對于第四種 情況,Kafka 提供了優先副本的選舉來達到 leader  副本的均衡,與此同時,也可以配合相應的 監控、告警和運維平臺來實現均衡的優化。

在實際應用中,配合監控、告警、運維相結合的生態平臺,在絕大多數情況下 Kafka 都能 做到很大程度上的負載均衡。

總的來說,Kafka 只支持主寫主讀有幾個優點:

可以簡化代碼的實現邏輯,減少出錯的可能;將負載粒度細化均攤,與主寫從讀相比,不僅負載效能更好,而且對用戶可控;沒有延時的影響;

在副本穩定的情況下,不會出現數據不一致的情況。為此,Kafka 又何必再去實現對它而言毫無收益的主寫從讀的功能呢?這一切都得益于 Kafka  優秀的架構設計,從某種意義上來說,主寫從讀是由于設計上的缺陷而形成的權宜之計。

上述內容就是Kafka為什么不支持讀寫分離,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高尔夫| 潍坊市| 金昌市| 彭州市| 克拉玛依市| 张家口市| 桃园市| 娱乐| 大邑县| 资兴市| 连城县| 武平县| 来安县| 新昌县| 钟山县| 塔河县| 堆龙德庆县| 莎车县| 蒙城县| 富源县| 扎兰屯市| 广丰县| 剑河县| 平遥县| 阳江市| 林周县| 怀仁县| 建瓯市| 尤溪县| 福鼎市| 和顺县| 尚义县| 涿州市| 特克斯县| 梨树县| 海阳市| 松原市| 抚顺县| 德令哈市| 无极县| 梁平县|