RocketMQ Streams 簡介
RocketMQ Streams 是基於 RocketMQ 的輕量級串流運算引擎。它可以作為 SDK 相依性套用,無需部署複雜的串流運算伺服器,使其資源有效率、易於擴充且擁有豐富的串流運算運算子。
架構
資料由 RocketMQ-streams 從 RocketMQ 接收,經過處理,最後寫回 RocketMQ。
資料由 RocketMQ Consumer 接收,進入處理拓撲結構,由運算子處理。如果串流處理任務包含 keyBy 運算子,則資料需要按 Key 分組並寫入 shuffle 主題。後續運算子從 shuffle 主題接收。如果還有狀態運算子,例如計數,則計算需要讀取和寫入狀態主題。計算完成後,結果會寫回 RocketMQ。
接收模型
計算執行個體實際上取決於 Rocket-streams SDK 的用戶端。因此,計算執行個體接收 MQ,取決於 RocketMQ 重新平衡配置。計算執行個體的總數不能大於接收 MQ 的總數,否則某些計算執行個體將處於等待狀態,無法接收資料。
一個計算執行個體可以接收多個 MQ,且在一個執行個體內,只有一個計算拓撲結構圖。
狀態
對於有狀態運算子,例如計數,必須先進行分組,然後才能進行求和。分組運算子 keyBy 會根據分組鍵將資料重新寫入 RocketMQ,並確保具有相同鍵的資料寫入同一個分區(此程序稱為洗牌),以確保具有相同鍵的資料由同一個使用者端使用。狀態由 RocksDB 在本地加速,並由 RocketMQ 遠端持續保存。
擴充/縮減容量
當計算執行個體從 3 個減少到 2 個時,在 RocketMQ 集群使用模式下的重新平衡功能的協助下,已使用的 MQ 將在計算執行個體之間重新分配。Instance1 使用的 MQ2 和 MQ3 分配給 Instance2 和 Instance3,而這兩個 MQ 的狀態資料也需要移轉到 Instance2 和 Instance3。這也表示狀態資料會根據原始資料分區 MQ 儲存;擴充只是相反的程序。