2017-08-17 62 views
0

在閱讀flink文檔(相關部分在下面註明)之後,我仍然沒有完全理解原子性和密鑰分佈。Flink狀態後端鍵atomicy和分配

即考慮由keyby-> flatmap(含有映射的狀態)的設置爲1與4個任務槽的曲線圖,和平行度,並確保弗林克每個鍵只存在一次(在一個任務時隙)在分佈式環境中,它是原子單位嗎? 在此先感謝所有幫手。

您可以將鍵控狀態視爲操作員狀態,該狀態已被分區或分區,每個鍵只有一個狀態分區。每個鍵控狀態都邏輯上綁定到一個唯一的組合<parallel-operator-instance, key>,並且由於每個鍵「屬於」一個鍵控運算符的並行實例,我們可以簡單地將其想象爲<operator, key>

鍵控狀態被進一步組織成所謂的密鑰組。密鑰組是Flink可以重新分配鍵控狀態的原子單位;有確定的最大並行度的密鑰組數量完全相同。在執行過程中,鍵控操作符的每個並行實例都與一個或多個鍵組的鍵一起工作。

回答

2

對於任何給定的並行運算符,具有相同鍵的所有事件都由相同的運算符實例處理 - 即在同一個任務槽中。

Flink將密鑰組織成密鑰組,並且每個密鑰(及其狀態)都與特定密鑰組永久關聯。此外,每個任務槽都負責處理一個或多個密鑰組的密鑰。

您引用的文檔使用短語「原子單位」表示「不可分割」,並且在考慮Flink作業重新縮放時(即並行性發生變化時)會發生什麼情況時,這變得相關。

當Flink作業重新調整大小時,並行運算符的實例數量將發生變化,這需要重新分配狀態。狀態重新分配(或重新分配)的粒度不是按鍵的關鍵,而是更大 - 它是在關鍵組的級別完成的。因此,密鑰組是重新分配鍵控狀態的原子單位。請參閱the section of a data Artisans blog post about "State in Flink and Rescaling Stateful Streaming Jobs"

+0

真棒,這清除它。非常感激。 – Eliran