如何並行化Kafka消費者

Kafka是一個異步消息傳遞隊列。 Kafka使用者,使用來自Kafka的消息並進行一些處理,例如更新數據庫或進行網絡呼叫。 如果您剛接觸Kafka概念,請閱讀我的有關Kafka基本概念的博客。

如我們所見,Kafka消費者可能會花一些時間進行操作。 這意味著消費者可能無法跟上消息生成的速度,從而增加了延遲。 滯後是尚未讀取的新消息的數量。

我們使用Kafka等異步消息傳遞隊列獲得的好處之一是,生產者和消費者可以以自己的速度進行讀寫。 但是,處理速度慢的消費者可能會導致卡夫卡的滯後時間過長。 卡夫卡(Kafka)解決此問題的方法是利用消費者群體。

什麼是消費者組?

消費者群是一個小組中多個消費者的分組機制。 數據在組的所有使用者之間平均分配,組中沒有兩個使用者接收相同的數據。 讓我們查看有關它的更多詳細信息。

從Kafka消費時,消費者可以向Kafka註冊一個特定的組ID。 使用相同組ID註冊的消費者將屬於一個組。 組ID在卡夫卡消費中起著至關重要的作用。 消費者將只能從Kafka分配給該主題的分區中消費。

Kafka如何將分區分配給使用者?

在將分區分配給使用者之前,Kafka首先會檢查是否存在具有給定組ID的現有使用者。

如果不存在具有給定組ID的現有使用者,它將為該新使用者分配該主題的所有分區。 如果已經有兩個使用給定組ID的消費者,而第三個消費者想使用相同的組ID消費。 它將在所有三個使用者之間平均分配分區。 不會將具有相同組ID的兩個使用者分配到同一分區。

假設有一個包含4個分區和兩個使用者的主題,使用者A和使用者B希望通過組ID" app-db-updates-consumer"從中使用。

如何並行化Kafka消費者

Kafka consumer group


如圖所示,Kafka將分配:

· 分區1和分區2到使用者A

· 消費者3的分區3和分區4。

這意味著,同一組中的消費者不會使用相同的數據。

如何決定要使用相同還是不同的消費群體? 用例取決於用例。 讓我們更詳細地瞭解這一點。

何時使用相同的消費群體?

當需要擴大執行操作的消費者以並行處理時,消費者應屬於同一組。 同一組的消費者部分將分配有不同的分區。 如前所述,不會有兩個具有相同組ID的使用者分配到同一分區。 因此,組中的每個消費者部分將比同一個組中的其他消費者處理不同的數據。 導致並行處理。 這是Kafka建議在消費者中實現並行處理的方法之一。

什麼時候使用不同的消費群體?

當消費者執行不同的操作時,消費者不應位於同一組中。 一些使用者可能會更新數據庫,而其他一些使用者可能會對消耗的數據進行一些計算。 在這種情況下,我們肯定希望所有這些不同的使用者從所有分區讀取所有數據。 因此,在這種從所有分區讀取數據的用例中,我們應該使用不同的group-id註冊這些使用者。

如何並行化Kafka消費者

如何為不同群體的消費者維持補償?

偏移量(指示消費者已讀取多少條消息)將按消費者組ID和分區維護。 當有兩個不同的使用者組時,每個分區將保留2個不同的偏移量。 不同消費群體的消費者可以獨立於其他消費群體繼續/暫停。 因此,在不同群體的消費者之間不存在依賴關係。

讓我嘗試考慮您可能仍然遇到的一些問題。

讓我們再次使用相同的用例。 當有一個包含4個分區和兩個使用者的主題時,使用者A和使用者B已經使用組ID" app-db-updates-consumer"從中使用。

問:如果消費者B下降了怎麼辦? 答:Kafka將進行重新平衡,並將所有四個分區分配給使用者A。

問:如果新消費者,消費者C和消費者D開始使用相同的組ID" app-db-updates-consumer"進行消費怎麼辦? 答:Kafka將再次進行重新平衡,它將為每個消費者平均分配一個分區。

問:如果新的使用者Consumer-E加入相同的組ID" app-db-updates-consumer",該怎麼辦? 總共有5個消費者,其中分區為4A。 Kafka將為4個消費者分配1個分區,而5個消費者中有1個將處於閒置狀態。

問:Kafka可以將相同的分區分配給兩個使用者嗎? Kafka無法將相同的分區分配給同一組中的兩個使用者。 那不同的消費者群體呢? 分區僅在同一組的使用者之間劃分。 這意味著Kafka會將相同的分區分配給不同組的兩個使用者。

問:同一組中的最佳消費者數量是多少? 一個組中的使用者數量最多可以是分區的數量。 Kafka最多可以將一個分區分配給一個使用者。 如果使用方數量大於分區數量,則Kafka將無法分配給使用方。 並非該組的所有使用者都將分配給一個分區,因此該組的某些使用者將處於空閒狀態。

結論:

我們已經瞭解了Kafka消費者組的工作方式,以及如何通過共享相同的組ID來使消費者並行化。 但是,採用這種方法,使用者的擴展規模不能超過分區數。 我們可以使Kafka消費者的數量超出分區數量嗎? 閱讀我的博客,瞭解如何實現這一目標。

(本文翻譯自Jhansi Karee的文章《How to parallelise Kafka consumers》,參考:https://medium.com/@jhansireddy007/how-to-parallelise-kafka-consumers-59c8b0bbc37a)


分享到:


相關文章: