一款新的用 Rust 編寫的高效能流處理引擎 ArkFlow 的出現,在開發者中引發了關於構建資料處理管道的基本方法的熱烈討論。雖然該專案透過其 Rust 實現和 Tokio 非同步執行時承諾提供出色的效能,但社群討論的焦點較少集中在其技術能力上,而更多地關注架構理念。
ArkFlow 將自己定位為流處理的全面解決方案,支援包括 Kafka、MQTT 和 HTTP 在內的多種資料來源,同時提供強大的處理能力,包括 SQL 查詢和 JSON 處理。然而,其基於 YAML 的配置方法已成為開發者審視的焦點。
配置與程式碼的困境
圍繞 ArkFlow 最引人注目的討論之一涉及基於配置的管道系統的固有侷限性。有大型科技公司經驗的開發者指出,雖然 YAML 配置檔案最初看起來很優雅,但隨著專案需求變得更加複雜,它們往往會演變成笨重的偽程式語言。
「任何定義計算的邏輯都應該優先選擇明確的命令式程式碼(如 python)而非配置,因為你很可能最終會在該配置語言中實現一種命令式語言。」
這一見解引起了討論中許多人的共鳴,他們分享了類似的經歷。隨著管道複雜性的增加,團隊經常發現自己在配置檔案中實現條件邏輯、動態調整和元件組合——本質上是建立了一種臨時程式語言,但除錯工具有限且表達能力受限。
SQL 作為通用轉換語言
討論中另一個重要的線索集中在 SQL 在資料轉換管道中的作用。幾位經驗豐富的開發者認同這一觀點:SQL 仍然是資料轉換任務最有效的語言之一,特別是在相似系統之間移動資料時。
在處理結構化資料時,SQL 提供了一種宣告式方法,客戶和業務利益相關者通常可以直接理解和修改。在 B2B 環境中,這種可訪問性可能是一個主要優勢,因為客戶可能需要在沒有深入程式設計知識的情況下自定義資料轉換。
然而,即使是 SQL 在複雜場景中也有侷限性。開發者指出,隨著需求變得更加複雜,他們經常求助於動態 SQL 生成或類似宏的方法來處理引數化,這可能在長期內造成可維護性挑戰。
替代方法和現有解決方案
社群討論揭示了幾種替代方法來解決 ArkFlow 試圖解決的問題。一位開發者建議從配置檔案生成 Rust 程式碼,作為保持配置簡單性同時在需要時啟用命令式程式碼全部功能的一種方式。
其他人指出了該領域的現有解決方案,包括:
- Tremor - 另一個基於 Rust 的事件處理系統
- RisingWave - 一個 Rust 實現的流資料庫,據報道效能優於許多替代品
- Arroyo - 支援視窗、聚合和連線的有狀態流處理引擎
- Benthos/Redpanda Connect - 一個成熟的流處理工具,擁有豐富的生態系統
這些系統之間的效能比較成為另一個討論點,一位開發者指出,在他們的基準測試中,基於 Rust 的 RisingWave 在高吞吐量 JSON 轉換方面明顯優於 Bento 和 Spark Streaming。
討論中提到的流處理工具
工具 | 實現語言 | 顯著特點 | 社群備註 |
---|---|---|---|
ArkFlow | Rust | Tokio 非同步執行時,基於 DataFusion,YAML 配置 | 新專案,尚未生產就緒 |
RisingWave | Rust | 在基準測試中表現出高效能 | 據報道效能超過 Bento 和 Spark |
Arroyo | Rust(部分使用 DataFusion) | 有狀態處理,視窗,聚合,連線 | 自定義資料流和運算子 |
Tremor | Rust | 事件處理 | 成熟的專案 |
Benthos/RPCN | Go | 豐富的生態系統,眾多聯結器 | 被描述為"聯結器方面的2020年代的 Perl" |
Bento | Go | 基於 Benthos | - |
Spark Streaming | Scala/Java | - | 在基準測試中被提及效能較低 |
流處理的未來
ArkFlow 的建立者已經承認了這些反饋,並表示願意考慮替代方法。該專案仍被標記為不適合生產環境,這表明基於社群輸入有進行架構演進的空間。
展望未來,討論突出了資料工程工具中的一個重要張力:簡單性和表達性之間的平衡。雖然配置驅動的系統提供了可訪問性和快速設定,但程式碼驅動的方法為複雜的現實場景提供了所需的靈活性和能力。
隨著資料處理需求繼續增長複雜性,社群似乎正在趨向於混合方法,將配置檔案的宣告式簡單性與在需要時能夠使用完整程式語言的逃生艙口相結合。
目前,ArkFlow 代表了 Rust 基礎設施工具不斷增長的生態系統中的另一個有趣條目,反映了該語言在效能關鍵型應用中的日益採用,特別是在穩定性和資源效率至關重要的場合。