繁体   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