【Azure 事件中心】在Service Bus Explorer工具種檢視到EventHub資料在分割槽中的6種屬性問題

路邊兩盞燈發表於2021-07-02

問題描述

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

【Azure 事件中心】在Service Bus Explorer工具種檢視到EventHub資料在分割槽中的6種屬性問題

  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:https://docs.microsoft.com/en-us/java/api/overview/azure/spring-cloud-stream-binder-eventhubs-readme?view=azure-java-stable#event-hub-consumer-properties

 

相關文章