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 來指定事件擷取的擷取屬性。 您可以設定下列屬性:
注意
屬性名稱會區分大小寫。
屬性 | 說明 |
---|---|
資料庫 | 目標資料庫區分大小寫的名稱。 根據預設,數據會內嵌至與數據連線相關聯的目標資料庫。 使用這個屬性來覆寫預設資料庫,並將數據傳送至不同的資料庫。 若要這樣做,您必須先 將連線設定為多資料庫連線。 |
Table | 現有目標數據表的區分大小寫名稱。 覆 Table 寫窗格上的 Data Connection 集合。 |
格式 | 資料格式。 覆 Data format 寫窗格上的 Data Connection 集合。 |
IngestionMappingReference | 要使用的現有 擷取對應 名稱。 覆 Column mapping 寫窗格上的 Data Connection 集合。 |
壓縮 | 資料壓縮、 None (預設值)或 gzip 。 |
編碼方式 | 數據編碼,預設值為UTF8。 可以是任何 .NET 支援的編碼方式。 |
標籤 | 要與內嵌數據產生關聯的標記清單,格式化為 JSON 陣列字串。 使用標記時會有 效能影響 。 |
RawHeaders | 指出事件來源是 Kafka,而 Azure 數據總管必須使用位元組陣列還原串行化來讀取其他路由屬性。 值會被忽略。 |
注意
除非您提供自定義擷取開始日期,否則只會在建立數據連線之後加入佇列的事件。 在任何情況下,回溯期間不能超過實際的事件中樞保留期間。
事件路由
當您建立叢集的數據連線時,您可以指定要傳送內嵌數據的位置路由。 預設路由會傳送至與目標資料庫相關聯之 連接字串 中指定的目標數據表。 數據的預設路由也稱為 靜態路由。 您可以藉由設定上一個段落中所述的一或多個事件數據屬性,來指定數據的替代路由和處理選項。
注意
事件中樞數據聯機會嘗試處理它從事件中樞讀取的所有事件,而且因為任何原因而無法處理的事件都會回報為擷取失敗。 請閱讀如何在這裡監視 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);
事件中樞系統屬性對應
系統屬性是事件中樞服務在加入佇列時所設定的欄位。 Azuer 資料總管事件中樞數據連線可以根據指定的對應,將預先定義的系統屬性集合內嵌至數據表中的數據。
注意
- json 和表格式格式格式支援內嵌系統屬性(例如
JSON
,、MultiJSON
、、CSV
、、PSV
TSV
、SCsv
、SOHsv
、TSVE
。 - 使用不支援的格式時,數據仍會擷取 i.e. 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
事件數據物件的 區段。 不過,事件中樞 自定義屬性 是在 物件的 區段中定義 properties
,而且不會內嵌。 若要內嵌客戶屬性,您必須將其內嵌至 物件區段中的數據 body
。
下列範例會比較事件數據物件,其中包含事件中樞所定義的自定義屬性customProperty
,以及擷取所需的內嵌屬性(右)。
{
"body":{
"value": 42
},
"properties":{
"customProperty": "123456789"
}
}
{
"body":{
"value": 42,
"customProperty": "123456789"
}
}
您可以使用下列其中一種方法,將自訂屬性內嵌至事件資料物件的 區段中的數據 body
:
- 在事件中樞中,建立事件數據物件時,將自定義屬性內嵌為物件 區段中數據的
body
一部分。 - 使用 Azure 串流分析來處理 事件中樞的事件,並在事件數據中內嵌自定義屬性 。 從 Azure 串流分析,您可以使用 Azure 數據總管輸出連接器原生擷取數據,或將數據路由傳送到另一個事件中樞,然後從該處擷取到叢集。
- 使用 Azure Functions 新增自訂屬性,然後內嵌數據。
建立事件中樞
如果您還沒有事件中樞, 請建立事件中樞。 連線至事件中樞可以透過 Azure 入口網站、以程序設計方式使用 C# 或 Python,或使用 Azure Resource Manager 範本來管理。
注意
- 建立事件中樞之後動態新增分割區的能力僅適用於事件中樞進階層和專用層。 設定分割區計數時,請考慮長期調整。
- 取用者群組 每個取用者都必須 是唯一的。 建立專用於 Azure 數據總管連線的取用者群組。
跨區域事件中樞數據連線
為了獲得最佳效能,請在與叢集相同的區域中建立事件中樞。 如果無法這樣做,請考慮使用 進階 或 專用 事件中樞層。 如需階層的比較,請參閱比較 Azure 事件中樞 層。
傳送事件
請參閱產生數據的範例應用程式,並將其傳送至事件中樞。
設定異地災害復原解決方案
事件中樞提供 異地災害復原 解決方案。
Azure 數據總管不支援 Alias
事件中樞命名空間。 若要在解決方案中實作異地災害復原,請建立兩個事件中樞數據連線:一個用於主要命名空間,另一個用於次要命名空間。 Azure 數據總管會接聽這兩個事件中樞連線。
注意
用戶必須負責實作從主要命名空間故障轉移到次要命名空間。