Azure 串流分析的事件中樞輸出
Azure 事件中樞 服務是具高延展性的發佈-訂閱事件擷取器。 它每秒可以收集數百萬個事件。 當串流分析作業成為另一個串流作業的輸入時,就會使用事件中樞作為輸出。 如需訊息大小上限和批次大小最佳化的詳細資訊,請參閱輸出批次大小一節。
輸出設定
下表具有從事件中樞設定資料流程作為輸出所需的參數。
屬性名稱 | 描述 |
---|---|
輸出別名 | 此為易記名稱,用於在查詢中將查詢輸出指向這個事件中樞。 |
事件中樞命名空間 | 一組訊息實體的容器。 建立新的事件中樞時,也會建立事件中樞命名空間。 |
事件中樞名稱 | 事件中樞輸出的名稱。 |
事件中樞原則名稱 | 共用存取原則,您可以在事件中樞的 [設定] 索引標籤上建立。每一個共用存取原則都會有名稱、權限 (由您設定) 和存取金鑰。 |
事件中樞原則金鑰 | 用來驗證事件中樞命名空間存取權的共用存取金鑰。 |
分割區索引鍵資料行 | 選擇性。 資料行包含事件中樞輸出的分割區索引鍵。 |
事件序列化格式 | 輸出資料的序列化格式。 支援 JSON、CSV 和 Avro。 |
編碼方式 | 對於 CSV 和 JSON 而言,UTF-8 是目前唯一支援的編碼格式。 |
分隔符號 | 僅適用於 CSV 序列化。 串流分析可支援多種以 CSV 格式序列化資料常用的分隔符號。 支援的值是逗號、分號、空格、索引標籤和分隔號。 |
格式 | 僅適用於 JSON 序列化。 分隔的行會指定輸出的格式化方式為利用新行分隔每個 JSON 物件。 如果您選取分隔的行,JSON 會一次讀取一個物件。 整個內容本身不是有效的 JSON。 陣列會指定輸出將會格式化為 JSON 物件的陣列。 |
屬性資料行 | 選擇性。 以逗號分隔的資料行,必須附加為外寄郵件的使用者屬性,而不是承載。 如需這項功能的詳細資訊,請參閱輸出的自訂中繼資料屬性一節。 |
資料分割
資料分割會根據分割區對齊方式而有所不同。 當事件中樞輸出中的分割區索引鍵與上游 (先前的) 查詢步驟同等對齊時,寫入器的數目將會和事件中樞輸出中的分割區數目相同。 每個寫入器都會使用 EventHubSender 類別來將事件傳送至特定的分割區。 當事件中樞輸出中的分割區索引鍵沒有與上游 (先前的) 查詢步驟同等對齊時,寫入器的數目將會和先前步驟中的分割區數目相同。 每個寫入器會使用 EventHubClient 中的 SendBatchAsync 類別,將事件傳送至所有輸出分割區。
輸出批次大小
訊息大小上限為每則訊息 256 KB 或 1 MB。 如需詳細資訊,請參閱事件中樞限制。 當輸入/輸出資料分割沒有對齊時,每個事件會個別封裝於 EventData
中,並在以訊息大小上限為限的情況下,以批次的方式傳送。 如果使用自訂中繼資料屬性,也會發生這種情況。 當輸入/輸出資料分割有對齊時,多個事件會封裝為單一 EventData
執行個體,以訊息大小上限為限並傳送。
輸出的自訂中繼資料屬性
您可以將查詢資料行當做使用者屬性附加至外寄郵件。 這些資料行不會進入承載。 屬性會以輸出訊息上的字典形式呈現。 「索引鍵」是資料行名稱,「值」是屬性字典中的資料行值。 除了「記錄」和「陣列」以外,支援所有串流分析資料類型。
在下列範例中,將 DeviceId
和 DeviceStatus
欄位新增至中繼資料。
使用以下查詢:
select *, DeviceId, DeviceStatus from iotHubInput
將
DeviceId,DeviceStatus
設定為輸出中的屬性資料行。
下圖是使用 Service Bus Explorer 在事件中樞檢查的預期輸出訊息屬性。
傳遞確切一次
根據預設,事件中樞輸出支援傳遞確切一次。 無論您的輸入為何,串流分析保證在使用者起始的從上次輸出時間重新啟動過程中,不會遺失任何資料,且事件中樞輸出中也不會有任何重複項目,以防止產生重複項目。 這可大幅簡化串流管線,也就是不需監視、實作重複資料刪除邏輯並進行疑難排解。