[英]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 個來源?
您可以創建一個自定義EitherOfFive
class,其中包含五個不同的 stream 值之一(我假設它們都不同)。 對於兩種情況之一,請參見 Flink 的Either
class。
每個輸入 stream 將使用 Map function 將輸入 class 類型轉換為EitherOfFive
類型。
將有一個getKey()
方法可以確定(基於實際設置了五個值中的哪一個)要返回的鍵。 然后您可以有一個 KeyedProcessFunction 將此EitherOfFive
類型作為輸入。
如果 output 始終相同,那么一切就緒。 否則,您將需要側輸出,每種類型一個,為五個不同的接收器供電。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.