簡體   English   中英

在 Kafka 中有單個分區時是否存在可伸縮性問題?

[英]Are there scalability problems when having single partitions in Kafka?

如果我有一個在 kafka 主題上發布事件的應用程序,並且我的消費者需要按照發布的順序讀取數據,那么我的主題只能有一個分區,因為 kafka 保證只在分區內排序。

但是,我讀到 kafka 使用分區來提供可伸縮性,即通過將一個主題的分區放置在多個代理上。 我還讀到,分區本身不能拆分。

由於只能在分區內進行排序,因此可擴展性對我的應用程序來說是個問題嗎? 有沒有辦法處理這個問題還是我對卡夫卡的理解不對?

想象一下我的應用程序有成千上萬的消費者(每個消費者都在一個組中,所以每個人都消費已發布的事件)。 所有人都需要從具有該單個分區的單個主題讀取數據。

編輯:我想到的另一件事是:想象一下該主題有 5 個分區,並且所有消費者仍必須閱讀正確的順序。 如果發布者不指定分區 id 或鍵,那么 kafka 將在 5 個分區上循環發布信息,對嗎?

如果所有消費者都在一個組中並且都訂閱了該主題,那么每個消費者都會讀取所有主題的事件,這意味着他們仍然會收到訂購的消息,對嗎?

要點 1)如果您的要求是僅按順序處理所有記錄,那么使用並行處理是不可能的,因為並行處理無法保證順序。

Point 2) Yes in kafka sequence 只能保證所有記錄都使用相同的密鑰發送。 因此,如果可以在您真正需要序列處理的地方分離相關數據,那么分析數據。 並僅發送具有相同密鑰的那些相關數據。 並用另一個密鑰發送其他相關數據。

第 3 點)現在,如果您能夠使用不同的鍵來隔離數據,那么您將不得不增加分區數。 以及相應的消費者。 因此,例如,您有 3 個分區,而您可以使用 3 個消費者擴展您的應用程序。 (請注意,您正在生成帶有要遵守排序的密鑰的記錄)。 所有 3 個消費者分配 1 個分區,您的並行處理將實現。 (這只會保證按具有相同密鑰的記錄順序進行處理)。

第 4 點)

想象一下我的應用程序有成千上萬的消費者(每個消費者都在一個組中,所以每個人都消費已發布的事件)。 所有人都需要從具有該單個分區的單個主題讀取數據。

如果您的所有(數千)消費者在同一組中閱讀並從單個分區主題讀取,那么只有一個消費者將被分配一個分區,而 rest 所有(數千 - 1)消費者將無所事事。

如果您將不同的組分配給所有消費者,那么所有消費者都將分配有該單個分區主題,並且所有消費者單獨處理所有記錄,因此將進行重復處理。

第5點)

如果所有消費者都在一個組中並且都訂閱了該主題,那么每個消費者都會讀取所有主題的事件,這意味着他們仍然會收到訂購的消息,對嗎?

不,如第 4 點所述)它不能保證所有記錄在由不同的消費者處理時都是有序的。

摘要:如果您可以收集記錄並使用相同的密鑰將其發送到您實際需要排序的地方,那么這將保證排序。 如果你的需求是只順序消費所有的記錄,那么它的問題就是只順序處理,這里無法實現並行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM