為什麼kafka不支援主從分離?

2021-10-12 07:23:07 字數 671 閱讀 9577

為什麼不像redis和mysql可以支援主從分離呢,是因為什麼原因要這麼設計呢?

首先明確一下:主從分離與否沒有絕對的優劣,它僅僅是一種架構設計,各自有適用的場景。

第二、如你所說,redis和mysql都支援主從讀寫分離,我個人覺得這和它們的使用場景有關。對於那種讀操作很多而寫操作相對不頻繁的負載型別而言,採用讀寫分離是非常不錯的方案——我們可以新增很多follower橫向擴充套件,提公升讀操作效能。反觀kafka,它的主要場景還是在訊息引擎而不是以資料儲存的方式對外提供讀服務,通常涉及頻繁地生產訊息和消費訊息,這不屬於典型的讀多寫少場景,因此讀寫分離方案在這個場景下並不太適合。

第三、kafka副本機制使用的是非同步訊息拉取,因此存在leader和follower之間的不一致性。如果要採用讀寫分離,必然要處理副本lag引入的一致性問題,比如如何實現read-your-writes、如何保證單調讀(monotonic reads)以及處理訊息因果順序顛倒的問題。相反地,如果不採用讀寫分離,所有客戶端讀寫請求都只在leader上處理也就沒有這些問題了——當然最後全域性訊息順序顛倒的問題在kafka中依然存在,常見的解決辦法是使用單分割槽,其他的方案還有version vector,但是目前kafka沒有提供。

最後、社群正在考慮引入適度的讀寫分離方案,比如允許某些指定的follower副本(主要是為了考慮地理相近性)可以對外提供讀服務。當然目前這個方案還在討論中。

kafka不支援讀寫分離

在 kafka 中,生產者寫入訊息 消費者讀取訊息的操作都是與 leader 副本進行互動的,從 而實現的是一種主寫主讀的生產消費模型。資料庫 redis 等都具備主寫主讀的功能,與此同時還支援主寫從讀的功能,主寫從讀也就是讀寫分離,為了與主寫主讀對應,這裡就以主寫從讀來稱呼。kafka 並不支援主...

為什麼模板不支援分離編譯?

在c 中,為了乙個專案的規範化我們通常把 歸類為三類 宣告檔案 實現檔案 測試檔案。比如,我們要實現乙個順序表,那麼規範化就是建立3個檔案 seqlist.h 順序表相關宣告 seqlist.cpp 順序表相關實現 test.cpp 順序表測試檔案 那麼普通順序表這樣寫一點問題都沒有,用模板實現成這...

為什麼模板不支援分離編譯

在c 中,為了乙個專案的規範,我們通常把 歸為三類 宣告檔案 實現檔案 測試檔案.比如,我要用c 實現乙個鍊錶,那麼就會建立這3個檔案 linklist.h 鍊錶的相關宣告 linklist.cpp 鍊錶的實現 test.cpp 鍊錶測試 本文忽略 那麼問題來了,普通鍊錶這樣寫起來一點問題都沒有 如...