2017-08-28 108 views
0

可以來自不同組的兩位消費者從同一主題和分區x中讀取並且寫入另一個主題和分區y?kafka消費者讀取和寫入同一分區

我會實施消費者策略,其中一位消費者放棄其他消費者處理的數據。 生產者將數據保存到共享分區的順序並不重要。

我只是想知道這是否可能

+2

消費者只讀和不寫。但是,你肯定可以讓兩位消費者從同一主題中讀取,並將他們的結果傳遞給另一個共同話題的製作人。他們每個人都會讀取每條輸入記錄(所有內容都被讀取兩次,每個消費者組讀取一次,但是您可以實現自定義邏輯,讓他們忽略只有其他人才能看到的內容 - 儘管取決於您要跳過多少內容這樣兩個獨立的輸入主題或者一個消費者組可以做更好的方式)。 – Thilo

+0

對不起,我的意思是生產者寫入主題。 thx幫助 – user817795

+0

如果您希望一位消費者忽略來自第二位消費者的輸入,爲什麼不使用同一組?這將避免你在處理同步時遇到麻煩。 如果你的問題是輸入數據是在一個單獨的分區(並且你不能改變它),只需使用kafka流(或簡單的客戶端)將你的數據從你的主題/分區分發到一個新的主題/ 2 *分區,循環方式。那麼你可以有效地擁有兩個消費者。 – Treziac

回答

1

你可以在這裏有兩種不同的方法:

  • 消費者在不同的消費羣體。這意味着兩者都會收到所有消息,並且取決於您的業務邏輯,以便在消費者處理消息時忽略某些消息。
  • 消費者位於同一個消費羣組,因此他們將收到不同的分區,並且您擁有消息傳遞給消費者而不是其他消息。您正在利用Kafka功能,但這取決於如何使用默認循環方式或使用每條消息或自定義分區程序的密鑰對數據進行「分區」。

我在第二個解決方案中看到的唯一問題是重新平衡。如果消費者脫機然後回來,重新平衡發生並且分區可能以不同的方式分配。即您開始從分區P1和P2讀取消費者C1,並從分區P3和P4讀取C2。想象一下,C2離線。首先,如果它離線了更多時間,C1將獲得所有分區(我不知道它是否適合您的場景),但是當C2重新聯機時,重新平衡發生並且分配的分區可能會不同,即分配了P1和P2到C2(不再是C1),P3和P4到C1(不再是C2);這取決於這種消費者在分區上交換是否是您的應用程序邏輯的問題。