簡體   English   中英

Flink State 跨多個Transformer

[英]Flink State Across multiple Transformers

我如何在多個轉換器中使用相同的 ID 訪問 state,例如,以下通過 OrderMapper class 中的 ValueState 存儲訂單 object:

env.addSource(source1()).keyBy(Order::getId).flatMap(new OrderMapper()).addSink(sink1());

現在我想通過 SubOrderMapper class 訪問相同的訂單 object:

env.addSource(source2()).keyBy(SubOrder::getOrderId).flatMap(new SubOrderMapper()).addSink(sink2());

編輯:看起來不可能跨多個操作員維護 state,有沒有辦法讓一個操作員接受多個輸入,比如 5 個來源?

看看 CoProcessFunction

要實現對兩個輸入的低級操作,應用程序可以使用 CoProcessFunction 或 KeyedCoProcessFunction。 此 function 綁定到兩個不同的輸入,並針對來自兩個不同輸入的記錄分別調用 processElement1(...) 和 processElement2(...)。

側面輸出也可能對您有用。 側面 output

編輯:聯合運營商我是一個選擇。 聯盟

您可以創建一個自定義EitherOfFive class,其中包含五個不同的 stream 值之一(我假設它們都不同)。 對於兩種情況之一,請參見 Flink 的Either class。

每個輸入 stream 將使用 Map function 將輸入 class 類型轉換為EitherOfFive類型。

將有一個getKey()方法可以確定(基於實際設置了五個值中的哪一個)要返回的鍵。 然后您可以有一個 KeyedProcessFunction 將此EitherOfFive類型作為輸入。

如果 output 始終相同,那么一切就緒。 否則,您將需要側輸出,每種類型一個,為五個不同的接收器供電。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM