2015-10-20 114 views
3

請只幫我澄清一下。Azure EventHub和ConsumerGroups之間的關係

  • 在處理從Azure的事件中心的事件,並使用ConsumerGroupName X.如果我做這在多進程(線程不)創建EventProcessorHost,我創建多個EventProcessorHost所有ConsumerGroupName X.他們會然後讀來自同一個分區,從而多次獲得相同的事件(在賽車情況下)?
  • 使用ConsumerGroupName X和另一個ConsumerGroupName Y處理事件時,兩個ConsumerGroups是否都獲取所有事件,還是每個事件都只能從某個分區獲取事件?
  • 處理IEventProcessor的ProcessEventsAsync中的事件時。什麼await context.CheckpointAsync();實際上呢?它是僅爲ConsumerGroup設置檢查點還是爲EventHub設置全局設置,以避免再次查看這些事件。這裏的上下文是租用的分區嗎?

編輯:好的,所以我已經取得了一些進展(糾正我,如果我錯了):

  1. 每個消費者將獲得所有信息。
  2. 租約被分配了一個EventProcessorHost,所以它需要一個唯一的名稱,所以這裏的消費者組名稱並不真正相關。
  3. 仍然不是100%確定的context.CheckpointAsync,但我相信它只是爲ConsumerGroup?
+0

這可能會部分重複http://stackoverflow.com/questions/27789320/azure-event-hubs-and-multiple-consumer-groups –

回答

3

是的,如果你給多個EventProcessorHosts同一消費羣的名稱,然後他們將協調使用BLOB租賃(假設你已經給了他們不同的唯一標識符),那麼只有一個會在一次一個分區工作。通常,您可以在多臺機器上安裝多個進程以並行化工作。隨着進程重新啓動(分區有延遲),分區可以並且將在計算機之間移動。

如果您使用不同的消費者組名稱X和Y,則X上的處理器將僅與X上的處理器協調,而Y上的處理器將只與Y上的處理器協調。如果使用兩個不同的處理器,則可以使用相同的名稱每個人都在不同的消費羣體中。那就是你可以在X中有EventProcessorHost「one」,而在Y中有另一個EventProcessorHost「two」,它們不應該干涉。

檢查點進度時,它確實只是在該ConsumerGroup中。正如我所提到的here我相信在用於協調租賃的blob內部正在追蹤抵消。因此,每個ConsumerGroup都可以在不知道其他任何信息的情況下檢查點(但可能不應使用每條消息的檢查點)。