[英]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.