我創建其中前端服務推消息到卡夫卡請求「主題並監聽另一「響應」主題對於一些下游後端消費者(實際上是一個複雜的系統中的系統,該系統最終推回卡夫卡),對「請求」消息進行處理,最終推到「響應」主題。匹配卡夫卡消費者和生產者分區
我想弄清楚最優雅的方式,以確保消費者偵聽適當的分區並接收響應,並且後端推到前端使用者正在偵聽的分區。我們總是需要確保響應發送給產生初始消息的相同消費者。
我有兩個解決方案,截至目前,但也不是特別令人滿意。任何想法或想法將不勝感激:
- 有每個前端決定它將偵聽哪個分區,並通過該消息傳遞給'request'主題的分區。當後端處理完成時,它將查看消息的分區成員並推送到相應的分區。這裏最直接的問題是如何協調前端服務,以便每個分區具有均勻分佈(隨機分配?)。
- 每個消息具有相關性ID,一個GUID,所以爲每個請求我們的前端,我們可以開始監聽基於散列的GUID來分區的總數分區然後按消息發送到所述「請求」的主題。後端會查看關聯ID以確定要推送到的適當分區。這裏的一個問題是,對於每個請求,前端必須在新分區上建立新的使用者(這裏是否有開銷?),並且可能會在同一分區上有多個活動使用者,以及跨多個活動使用者許多分區。
- 有同等數量的消費者和分區的一個消費羣,然後用類似的方法(1),但允許卡夫卡去應付這是消費者在哪個分區。但是,我們需要弄清楚重新平衡發生時會發生什麼情況,特別是對於已經在後端運行的消息(因爲可能所有分區都可能發生變化?)。
這似乎應該是一種常見的模式,所以我想知道別人怎麼解決這個問題。
謝謝 - 每個前端的單個主題似乎可能是一個可行的解決方案。我們在後臺大量使用Kafka,但我想我們總是可以找到與前端直接通信的其他方式,而不是在後端處理完成時通過Kafka進行通信。 – David