2017-09-05 137 views
2

是否可以讓應用程序的多個副本傾聽同一個Kafka羣組/主題,以便每次只有一個人正在閱讀它,但其他人將開始工作,如果主要崩潰/停止閱讀?Kafka - 同一羣組/主題上的多個消費者(只有一個活動人)

我需要使應用程序具有高度可用性,但無法容忍將應用程序另一端的數據存儲的流量翻倍,因爲有多個副本正在運行。

僅供參考 - 從技術上講,我使用MapR流,但它堅持Kafka API和功能,以防有人知道MapR流特定功能可以幫助解決問題。

回答

4

這是可能的。如果多個消費者在同一個消費羣體中,那麼當該羣體訂閱一個主題時,kafka將爲您的消費者執行分區分配工作:一個分區只能由同一組中的一個消費者消費。

所以你可以設置你的主題只有一個分區,那麼只有一個消費者使用消息,其他人將閒置。一旦消費者關閉,它將觸發組重新平衡操作:kafka將再次執行分區分配。然後就你的情況來說,一個新的消費者會繼續這項工作。它將處理來自舊消費者提交的上次提交的偏移的消息。

如果您的案例支持並行處理,您可以讓許多進程(應用程序)執行相同的工作並將主題設置爲多分區。他們將被分配使用不同的分區並處理不同的消息。所以它會加快你的流程,也可以容忍失敗。如上所述,如果一些消費者失敗了,卡夫卡會爲您保管它,它會將他們的分配分配給其他工作的消費者。所以一切都會好的。

+1

太棒了。我只是在我看到的這個匯合頁面上看到它:)。 https://cwiki.apache.org/confluence/display/KAFKA/Consumer+Group+Example。謝謝您的回答! –

相關問題