Azure 事件中樞資料連線
Azure 事件中樞是一個巨量資料串流平台與事件擷取服務。 Azure 數據瀏覽器提供從由客戶管理的事件中樞的持續擷取。
事件中樞擷取管線會以數個步驟將事件傳輸至 Azure 數據總管。 首先,您會在 Azure 入口網站 中建立事件中樞。 然後在 Azure 數據總管中建立目標數據表,特定格式的數據將使用所提供的匯入屬性進行匯入。 事件中樞連線必須注意 事件路由。 根據事件系統屬性,數據可能會內嵌在選取的屬性中。 建立事件中樞的連線,以 建立事件中樞 並 傳送事件。 此程式可以透過 Azure 入口網站、以 C# 或 Python 程式設計方式,或使用 Azure Resource Manager 範本來管理。
如需 Azure 數據總管中數據擷取的一般資訊,請參閱 Azure 數據總管數據擷取概觀。
Azure 數據總管數據連線驗證選項
受控識別型數據連線(建議):使用受控識別型數據連線是聯機至數據源的最安全方式。 它提供從數據源擷取數據的能力的完整控制權。 使用受控識別設定數據連線需要下列步驟:
- 將受控識別新增至叢集。
- 賦予受控識別對數據源的權限。 若要從 Azure 事件中樞 擷取數據,受控識別必須具有 Azure 事件中樞 數據接收器許可權。
- 在目標資料庫上設定受控識別原則。
- 使用受控識別驗證建立數據連線以擷取數據。
警告
如果從數據源移除受控識別許可權,數據連線將無法再運作,而且無法從數據源擷取數據。
金鑰型資料連線:如果未為數據連線指定受控識別驗證,則聯機會自動預設為密鑰型驗證。 索引鍵型連線使用資源連接字串來擷取資料,例如 Azure 事件中樞連接字串。 Azure 數據總管會取得指定資源的資源 連接字串,並安全地加以儲存。 接著會使用 連接字串 從數據源擷取數據。
警告
如果輪替密鑰,數據連線將無法再運作,而且無法從數據源擷取數據。 若要修正此問題,請更新或重新建立數據連線。
資料格式
注意
- 從事件中心的擷取不支援RAW格式。
- 不支援 Azure 事件中樞 架構登錄和無架構 Avro。
- 可以使用
gzip
壓縮演算法來壓縮資料。 您可以在靜態資料連線設定中,或使用擷取屬性動態指定Compression
。 - 二進位格式不支持數據壓縮(Avro、ApacheAvro、Parquet、ORC 和W3CLOGFILE)。
- 二進位格式和壓縮數據不支援自定義編碼和內嵌 系統屬性 。
- 使用二進位格式(Avro、ApacheAvro、Parquet、ORC 和 W3CLOGFILE)和資料映射時,資料映射定義中的欄位順序必須符合表中對應欄的順序。
事件中樞屬性
Azure 數據總管支援下列事件中樞屬性:
攝取屬性
擷取屬性會指示擷取程式、將數據路由傳送到何處,以及如何處理數據。 您可以使用 EventData.Properties 來指定事件擷取的擷取屬性。 您可以設定下列屬性:
注意
屬性名稱會區分大小寫。
屬性 | 說明 |
---|---|
資料庫 | 目標資料庫區分大小寫的名稱。 根據預設,數據會內嵌至與數據連線相關聯的目標資料庫。 使用這個屬性來覆寫預設資料庫,並將數據傳送至不同的資料庫。 若要這樣做,您必須先 將連線設定為多資料庫連線。 |
表格 | 現有目標數據表的區分大小寫名稱。 覆寫窗格上的 Data Connection 集合中的 Table 。 |
格式 | 資料格式。 覆寫在 Data Connection 窗格上的 Data format 設定。 |
IngestionMappingReference | 要使用的現有 擷取對應 名稱。 覆寫 Data Connection 窗格上的 Column mapping 設定。 |
壓縮 | 資料壓縮、 None (預設值)或 gzip 。 |
編碼方式 | 數據編碼,預設值為UTF8。 可以是任何 .NET 支援的編碼方式。 |
標籤 | 要與內嵌數據產生關聯的標記清單,格式化為 JSON 陣列字串。 使用標記時會有 效能影響 。 |
RawHeaders | 指出事件來源是 Kafka,而 Azure 數據總管必須使用位元組陣列還原串行化來讀取其他路由屬性。 值會被忽略。 |
注意
只有在您建立數據連線之後加入佇列的事件會被攝取,除非您提供自定義的擷取開始日期。 在任何情況下,回溯期間不能超過實際的事件中樞保留期間。
事件路由
當您建立叢集的數據連線時,您可以指定要傳送內嵌數據的位置路由。 預設路由會傳送至與目標資料庫相關聯之 連接字串 中指定的目標數據表。 數據的預設路由也稱為 靜態路由。 您可以藉由設定上一個段落中所述的一或多個事件數據屬性,來指定數據的替代路由和處理選項。
注意
事件中樞資料連線會嘗試處理它從事件中樞讀取的所有事件,且無法因任何原因處理的事件都會被回報為擷取失敗。 了解如何監視 Azure 數據總管資料擷取,請閱讀這裡。
將事件數據路由傳送至替代資料庫
預設為關閉將數據路由到替代資料庫的功能。 若要將數據傳送至不同的資料庫,您必須先將連接設定為多資料庫連接。 此功能可以在 Azure 入口網站、C# 或 Python 管理 SDK,以及 ARM 範本中啟用。 用來允許資料庫路由的使用者、群組、服務主體或受控識別,至少必須具有 叢集的參與者 角色和寫入許可權。
若要指定替代資料庫,請設定資料庫擷取屬性。
警告
指定替代資料庫而不將連接設定為多資料庫數據連線,會導致擷取失敗。
將事件數據傳送至替代資料表
若要為每個事件指定替代數據表,請設定 Table、Format、Compression 和 映射擷取屬性。 連線會動態路由傳送 EventData.Properties 中指定的匯入數據,覆蓋該事件的靜態屬性。
下列範例示範如何設定事件中樞詳細數據,並將氣象計量數據傳送至替代資料庫 (MetricsDB) 和數據表 (WeatherMetrics)。 數據是 JSON 格式, 而 mapping1 是在數據表 WeatherMetrics 上預先定義。
// This sample uses Azure.Messaging.EventHubs which is a .Net Framework library.
await using var producerClient = new EventHubProducerClient("<eventHubConnectionString>");
// Create the event and add optional "dynamic routing" properties
var eventData = new EventData(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(
new { TimeStamp = DateTime.UtcNow, MetricName = "Temperature", Value = 32 }
)));
eventData.Properties.Add("Database", "MetricsDB");
eventData.Properties.Add("Table", "WeatherMetrics");
eventData.Properties.Add("Format", "json");
eventData.Properties.Add("IngestionMappingReference", "mapping1");
eventData.Properties.Add("Tags", "['myDataTag']");
var events = new[] { eventData };
// Send events
await producerClient.SendAsync(events);
事件中樞系統屬性對應
系統屬性是由事件中樞服務在事件排入佇列時所設定的欄位。 Azure 數據總管事件中樞數據連線可以根據指定的對應,將預先定義的系統屬性集合嵌入至表中所引入的數據。
注意
- json 和表格式支援內嵌系統屬性(例如
JSON
、MultiJSON
、CSV
、TSV
、PSV
、SCsv
、SOHsv
、TSVE
)。 - 使用不支援的格式 (例如 TXT 或壓縮格式如
Parquet
,Avro
等) 時,數據仍會被擷取,但屬性將被忽略。 - 設定事件中樞訊息壓縮時,不支援內嵌系統屬性。 在這種情況下,會發出適當的錯誤訊息,並且不會匯入數據。
- 針對表格式數據,系統屬性僅支援單一記錄事件訊息。
- 針對 json 數據,系統屬性也支援多重記錄事件訊息。 在這種情況下,系統屬性只會新增至事件訊息的第一筆記錄。
- 針對
CSV
對應,屬性會按照建立資料連接時所列的順序,在記錄開頭加入。 請勿依賴這些屬性的順序,因為未來可能會變更。 - 針對
JSON
對映,會根據 系統屬性 資料表中的屬性名稱來新增屬性。
事件中樞服務會公開下列系統屬性:
財產 | 資料類型 | 說明 |
---|---|---|
x-opt-enqueued-time | datetime |
事件被加入佇列時的 UTC 時間 |
x-opt-sequence-number | long |
事件中心的分區數據流中事件的邏輯序號 |
x-opt-offset | string |
事件在事件中心分區串流中的偏移。 位移標識碼在事件中樞流的分區內是唯一的 |
x-opt-publisher | string |
如果訊息已傳送至發行者端點,則發行者名稱 |
x-opt-partition-key | string |
對應儲存區儲存事件的分割鍵 |
當您使用IoT Central事件中樞時,您也可以在承載中內嵌 IoT 中樞 系統屬性。 如需完整清單,請參閱 IoT 中樞 系統屬性。
如果您在數據表的 [數據源] 區段中選取 [事件系統屬性],則必須在數據表架構和對應中包含屬性。
架構對應範例
數據表架構對應範例
如果您的資料報含三個資料列 (TimeStamp
、 MetricName
和 Value
) 以及您包含的屬性是 x-opt-enqueued-time
和 x-opt-offset
,請使用此命令來建立或改變資料表架構:
.create-merge table TestTable (TimeStamp: datetime, MetricName: string, Value: int, EventHubEnqueuedTime:datetime, EventHubOffset:string)
CSV 對應範例
執行下列命令,將數據新增至記錄的開頭。 請注意序數值。
.create table TestTable ingestion csv mapping "CsvMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Ordinal":"2"}},'
' { "column" : "MetricName", "Properties":{"Ordinal":"3"}},'
' { "column" : "Value", "Properties":{"Ordinal":"4"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Ordinal":"0"}},'
' { "column" : "EventHubOffset", "Properties":{"Ordinal":"1"}}'
']'
JSON 對應範例
通過系統屬性對應來新增數據。 執行以下命令:
.create table TestTable ingestion json mapping "JsonMapping1"
'['
' { "column" : "TimeStamp", "Properties":{"Path":"$.TimeStamp"}},'
' { "column" : "MetricName", "Properties":{"Path":"$.MetricName"}},'
' { "column" : "Value", "Properties":{"Path":"$.Value"}},'
' { "column" : "EventHubEnqueuedTime", "Properties":{"Path":"$.x-opt-enqueued-time"}},'
' { "column" : "EventHubOffset", "Properties":{"Path":"$.x-opt-offset"}}'
']'
事件中樞擷取 Avro 檔案的架構對應
取用事件中樞資料的一個方法是透過 Azure Blob 儲存體或 Azure Data Lake Storage 中的 Azure 事件中樞擷取事件。 接著,您可以在 Azure 數據總管中使用 事件網格數據連線來擷取這些被撰寫的擷取檔案。
擷取檔案的結構描述與傳送至事件中樞之原始事件的結構描述不同。 您應該考慮到這個差異來設計目的地資料表結構描述。 具體來說,事件有效負載在擷取檔案中會以位元組陣清單示,而事件網格 Azure 資料總管資料連線不會自動解碼此陣列。 如需事件中樞 Avro 擷取數據檔案架構的詳細資訊,請參閱在 Azure 事件中樞 中探索擷取的 Avro 檔案。
若要正確解碼事件有效負載:
- 將
Body
擷取事件的欄位對應至目的地資料表中類型的dynamic
資料行。 - 套用更新原則,其會使用 unicode_codepoints_to_string() 函式,將位元組陣列轉換成可讀取的字串。
內嵌自定義屬性
從事件中樞擷取事件時,數據取自 body
事件數據物件的 區段。 不過,Event Hubs 自定義屬性 是在物件的 properties
區段中定義,且不會被匯入。 若要嵌入客戶屬性,您必須將它們嵌入至數據物件的body
區段中。
下列範例比較事件數據物件,左側包含由事件中樞定義的自定義屬性
{
"body":{
"value": 42
},
"properties":{
"customProperty": "123456789"
}
}
{
"body":{
"value": 42,
"customProperty": "123456789"
}
}
您可以使用下列其中一種方法,將自訂屬性內嵌至事件資料物件的 body
區段中的數據:
- 在事件中樞中,建立事件數據物件時,將自定義屬性內嵌為物件 區段中數據的
body
一部分。 - 使用 Azure 串流分析來處理 事件中樞的事件,並在事件數據中內嵌自定義屬性 。 從 Azure Stream Analytics 開始,您可以使用原生的 Azure 數據總管輸出連接器引入數據,或將數據路由至另一個事件中樞,再從該處引入至叢集。
- 使用 Azure Functions 新增自訂屬性,然後內嵌數據。
建立事件中樞
如果您還沒有事件中樞, 請建立事件中樞。 連線至事件中心可以透過 Azure 入口、使用程式碼以 C# 或 Python,或使用 Azure Resource Manager 範本來管理。
注意
- 建立事件中樞之後動態新增分割區的能力僅適用於事件中樞進階層和專用層。 設定分區數量時,請考慮長遠規模。
- 取用者群組 每個取用者都必須 是唯一的。 建立專用於 Azure Data Explorer 連線的使用者群組。
跨區域事件中樞數據連線
為了獲得最佳效能,請在與叢集相同的區域中建立事件中樞。 如果無法這樣做,請考慮使用 進階 或 專用 事件中樞層。 如需階層的比較,請參閱比較 Azure 事件中樞 層。
傳送事件
請參閱產生數據的範例應用程式,並將其傳送至事件中樞。
設置地理災害復原解決方案
事件中樞提供 異地災害復原 解決方案。
Azure 數據總管不支援 Alias
事件中樞命名空間。 若要在解決方案中實作異地災害復原,請建立兩個事件中樞數據連線:一個用於主要命名空間,另一個用於次要命名空間。 Azure Data Explorer 會接聽這兩個事件中心的連線。
注意
使用者有責任執行主要命名空間到次要命名空間的故障轉移。