【Azure 事件中心】在Service Bus Explorer工具種查看到EventHub數據在分區中的6種屬性問題

問題描述

通過Service Bus Explorer工具,查看到Event Hub的屬性值,從而產生的問題及討論:

  1. Size in Bytes:   這個是表示當前分區可以存儲的最大位元組數嗎?
  2. LastEnqueuedOffset:   這個是表示是最後一條消息在這個分區上的位元組偏移量嗎?
  3. Incoming / OutgoingBytesPerSecond:   這兩個值是0,是按照多長的時間跨度算的這個值?
  4. Begin Sequence Number:  這個是在這個消費者組的視角下未被消費的消息的起始消息號嗎?
  5. End Sequence Number:   這個是在這個消費者組的視角下未被消費的消息的結束消息號?
  6. 如果Event Hub下有兩個消費者組,一個Default,一個是自建的,兩個消費者組看到的內容是一樣的嗎?

 

問題回答

Size in Bytes:   這個是表示當前分區可以存儲的最大位元組數嗎?

【答】:Size in Bytes是指事件分區的大小

 

LastEnqueuedOffset:   這個是表示是最後一條消息在這個分區上的位元組偏移量嗎?

【答】:LastEnqueuedOffset 是指最後一個進入隊列的事件的偏移量

 

Incoming / OutgoingBytesPerSecond:   這兩個值是0,是按照多長的時間跨度算的這個值?

【答】:Incoming / OutgoingBytesPerSecond是指此使用者組中分區的事件的大致傳入/傳出速率(非100%精確,僅供參照)

 

Begin Sequence Number:  這個是在這個消費者組的視角下未被消費的消息的起始消息號嗎?

【答】:Begin Sequence Number分區數據中開始獲取的第一個事件的序列號(因為Event Hub中的數據會過期清理,所以裏面會不會永久保存),所以該值也表示當前分區中現存事件的第一條消息序列號。

 

End Sequence Number:   這個是在這個消費者組的視角下未被消費的消息的結束消息號?

【答】: End Sequence Number分區數據中開始獲取的最後一個事件的序列號就是結束序列號,所以該值也表示當前分區中現存事件中最後一條消息的序列號。

註:End Sequence Number – Begin Sequence Number =  Total Message

 

如果Event Hub下有兩個消費者組,一個Default,一個是自建的,兩個消費者組看到的內容是一樣的嗎?

【答】:多個消費組所消費的EventHub數據是一樣的。

 

衍生問題:

1) 在代碼中設置了消費者組的 Checkpoint 保存位置,官方文檔說EventHub的 Checkpoint  不保存在 Broker (服務端)上,由客戶端指定保存位置。那是不是如果用多個客戶端使用同一個消費者組消費,但是每個客戶端設置的checkpoint存儲位置都不一樣,那麼每個客戶端都能成功消費到事件,但是實際還是各自消費,消費的事件是重複的?

【答】:是的,消費者組都是分別處理的,消費的事件是重複的。

 

2)消費端消費的時候,有一個start-position,可以取值EARLIEST和LATEST,如果消費端已經有了 Checkpoint  ,這個start-position具體時什麼時候起作用?

start-position:Whether the consumer receives messages from the beginning or end of event hub. if EARLIEST, from beginning. If LATEST, from end. Default: LATEST

【答】:Checkpoint  存儲在 Storage Account中。它的目的是:如果讀取者與分區斷開連接,當它重新連接時,將開始讀取前面由該使用者組中該分區的最後一個讀取者提交的檢查點(Checkpoint), 它會將此偏移量傳遞給事件中心,以指定要從其開始讀取數據的位置。

start-position 連接分區進行消費時候,開始使用使用這個參數,如果設置為EARLIEST,就從start-position這個位置往前讀,設置為LATEST就從start-position這個位置往後讀。

Checkpoint  和 start-position 有個互斥關係,如果配了其中的某一個,另一個會被忽略。即

  • 如果沒有分區的checkpoint值,則從該事件位置開始接收也就是從start-position開始。
  • 如果有,將使用checkpoint值開始再次消費事件。

 

 

參考資料:

Event Hub Consumer Properties://docs.microsoft.com/en-us/java/api/overview/azure/spring-cloud-stream-binder-eventhubs-readme?view=azure-java-stable#event-hub-consumer-properties