Azure 串流分析) (事件傳遞保證
Azure 串流分析查詢語言會擴充 SQL 語法,以透過事件串流啟用複雜的計算。 使用串流分析時,有一些與事件傳遞相關的概念值得討論:
- 剛好處理一次
- 傳遞確切一次
- 重複的記錄
除了下面詳述的這些概念之外,請務必考慮 作業的開始選項 ,以確保不會發生任何資料遺失。
完全一次處理
完全一次的處理保證表示指定一組輸入,系統一律會傳回相同的結果。 這對於可重複性而言非常重要,即使在重新開機作業時,或同時在相同輸入上執行的多個作業都適用。 Azure 串流分析保證只會處理一次。
完全一次傳遞
完全一次傳遞保證表示只會將一次處理的所有輸出傳遞至輸出接收一次,因此沒有重複的輸出。 這需要達到輸出配接器上的交易功能。
Azure 串流分析保證至少一次傳遞至輸出接收,這可確保輸出所有結果,但可能會發生重複的結果。 不過,可以透過數個輸出來達成一次傳遞,例如 Azure Cosmos DB 或Azure SQL。
重複的記錄
由於至少一次傳遞保證,當串流分析作業執行時,可能會偶爾在輸出資料中注意到重複的記錄。 預期會有這些重複的記錄,因為 Azure 串流分析輸出配接器不會以交易方式寫入輸出事件。 如果發生下列其中一個情況,可能會產生此「重複記錄」案例:
- 當作業正在執行時,Azure 實例會升級
- 串流分析作業已升級,或作業輸出的連線能力或可靠性發生問題
- 執行作業的 Azure 實例發生中斷
- 串流分析作業會以 上次停止時 選項啟動
輸出事件的下游取用者需要使用事件的邏輯身分識別來清除事件。 例如,如果您要依輪轉視窗中的群組匯總事件,事件的邏輯識別就是群組和輪轉視窗的結束時間。 如果您正在執行傳遞查詢,您可能需要在事件上執行唯一識別碼,才能進行重復資料刪除。
使用 Azure 串流分析支援確切傳遞的輸出
Azure Cosmos DB
使用 Azure Cosmos DB,Azure 串流分析保證一次完全一次傳遞。 由於 Azure 串流分析會使用 upsert,因此使用者不需要採取任何動作。 如需 Azure 串流分析輸出至 Azure Cosmos DB的詳細資訊,請參閱。
SQL
使用 SQL 輸出時,如果符合下列需求,使用者可以完全達到一次傳遞:
- 所有輸出串流事件都有自然索引鍵,也就是可由欄位或欄位組合唯一識別。
- 輸出 SQL 資料表具有唯一的條件約束 (或主鍵) 使用輸出事件的自然索引鍵所建立。
這足以避免重複專案,因為 SQL 輸出會略過任何造成唯一條件約束違規的事件,以接受資料表上放置的任何條件約束。
Azure 資料表
Azure 儲存體資料表中的所有實體都是由 和 PartitionKey
欄位的 RowKey
串連所唯一識別。 Azure 串流分析 upserts 實體,因此資料表實體的值將會是具有對應 RowKey
/PartitionKey
組合的最新輸出事件。 因此,若要完全達到一次傳遞,請確定每個輸出事件都有唯 RowKey
/PartitionKey
一的組合。 如果這樣做,重複的事件將會覆寫舊版。 (系統定義的 Timestamp
欄位,這是實體上次修改的時間,在此案例中仍會變更。)