2016-02-26 101 views
2

我們正在製作一個卡夫卡隊列,消息從源系統發佈到該卡夫卡隊列中。現在多個消費者可以連接到這個隊列來閱讀消息。在卡夫卡實施唯一的消費者羣組編號

雖然這樣的消費者在此基礎上的消息被分配到指定的groupId,如果兩個應用程序具有相同的groupId他們都不會得到的消息。

有沒有一種方法,我可以強制每一個應用程序。有一個獨特的消費者組織ID?

回答

0

不,如果不更改Kafka源代碼,沒有辦法做到這一點,因爲消費者組是Kafka的一個主要(也是非常有價值的)功能,允許您避免使用v0.8中的低級消費者。當你想並行消耗單個主題時(通常來自不同的主機)。

但你也許可以成立一個獨立的服務發出的名稱給消費者。或者你可以指示所有消費者客戶使用隨機數作爲名稱後綴,或類似的東西。

+1

在想這會是一個常見的問題。另外,我想要一種有效的自動化方式,而不是僅僅告訴人們使用某些東西。 – nikel

+0

是的,AFAIK沒有這樣的東西存在,所以這些是我可以提供的最好的。你可以關閉這個問題嗎? –

5

卡夫卡是不是一個命名註冊表,但也有可能使用到沒有協調分配唯一的組名其他許多策略:

  • 名稱基於應用程序的組。兩個應用程序將分別獲取所有數據,因爲它們的名稱是唯一的。
  • 根據它們正在寫入的數據存儲命名該組(例如,jdbc連接字符串)。如果你開始一個應用程序實例不同的數據庫,這將有它自己的偏移
  • 名稱基礎上實現了消費者(規範)類名的組。如果您的應用程序在不同的Java類中實現了兩個消費者,他們會得到不同的組id
  • 一個隨機值(例如UUID)分配給該組。在重新啓動後,將創建一個新組。