IBM InfoSphere Streams 是高可靠、高擴展、分散式流計算平台,支援每秒 6GB 資料處理。應用由運算子經輸入/輸出埠連接組成,核心概念:流(元組序列)、運算子(處理單元)、處理元素 PE(物理部署單位,動態連結庫)、運算子融合(將多運算子合併為單 PE 減少傳輸開銷)。Java 以開發效率、平台可攜性、健壯沙箱著稱,Streams 提供 Java 運算子模型描述檔(XML) 與 Java 運算子 API 兩大支柱支援 Java 開發。
採用 XSD 定義,涵蓋四大區塊:
className、JVM 參數 vmArgs)、庫依賴(libraryDependencies 含自有與第三方 JAR 路徑)。inputPortOpenSet),指定視窗模式、標點符號處理模式。outputPortOpenSet)。範例 DBPersist 運算子模型展示 JDBC 連線參數、依賴 test_util.jar 與 db2jcc4.jar、單一輸入埠無視窗模式。
位於 com.ibm.streams.operator 套件,依賴 commons-math-2.1.jar。關鍵介面/類別:
| 介面/類別 | 用途 |
|---|---|
Operator | 運算子介面,定義初始化、處理元組/標點、關閉生命週期方法。 |
AbstractOperator | 抽象基類,提供便利方法,建議繼承實作。 |
OperatorContext | 提供運行時上下文:參數、流描述、ScheduledExecutorService/ThreadFactory(非同步操作必須使用以確保關閉時清理)。 |
StreamSchema | 埠結構描述:屬性名稱、型別(Java/SPL 對應)。 |
StreamingInput/Output | 輸入/輸出埠操作:取得元組、提交元組、建立輸出元組。 |
Tuple / OutputTuple | 不可變輸入元組、可變輸出元組,提供 JDBC 風格 getInt/setString 等存取器,assign 支援同名同型屬性批量複製。 |
ProcessingElement | PE 資訊查詢:輸出目錄、資料目錄、作業/PE ID、埠數量、運行模式。 |
OperatorMetrics / PEMetrics | 系統/自訂 Metrics(COUNTER/GAUGE/TIME),供外部監控讀取。 |
StreamWindow | 視窗構成策略:時間、計數、標點、資料增量變化。 |
initialize(OperatorContext) → 所有埠就緒呼叫 allPortsReady() → 並發處理 process(StreamingInput, Tuple)、processPunctuation → 關閉時呼叫 shutdown()(需確保非同步任務完成與資源釋放)。allPortsReady 前元組可能已到達;多輸入埠元組/標點並發;關閉請求可在任何時刻發生。synchronized(效能較差)、提交元組時同步(影響融合後下游)、細粒度 java.util.concurrent 鎖/原子類別(推薦,僅在必要時同步)。系統 Metrics 由運行時維護,自訂 Metrics 由運算子建立(createCustomMetric() 或模型宣告),均為 Metric 實例。OperatorContext.getMetrics() 取得 OperatorMetrics,getPE().getMetrics() 取得 PEMetrics。Streams Studio 提供三類視圖:
基於 JPDA,步驟:
LD_LIBRARY_PATH 包含 IBM JDK jre/lib/amd64。vmArgs 加入 -Xdebug -Xrunjdwp:transport=dt_socket,address=127.0.0.1:8765,server=y,suspend=y(JVM 掛起等待除錯連線)。logLevel=trace),Eclipse 建立 Remote Java Application 除錯配置(Host localhost, Port 8765),設定原始碼路徑,連線後在斷點停住。多運算子除錯可配置不同連接埠。
Streams 完整的 Java 運算子模型與 API,涵蓋元資料描述、生命週期管理、執行緒安全、Metrics 監控與除錯支援,讓 Java 開發者專注業務邏輯,高效構建大規模即時流應用。