为什么我们需要在flink中由运算符键入多个键?

时间:2019-07-02 09:13:21

标签: apache-flink flink-streaming

KeyedProcessFunction要求前一个运算符为keyedBy运算符

当我尝试使用两个KeyedProcessFunction处理键控流时,为什么第二个功能要求我再次应用keyedBy操作。流不应该已经被键分区了吗?

var stream = env.addSource(new FlinkKafkaConsumer[Event]("flinkkafka", EventSerializer, properties))


var processed_stream_1 = stream
                         .keyBy("keyfield") 
                         .process(new KeyedProcess1())

var processed_stream_2 = processed_stream_1
                         .process(new KeyedProcess2()) //this doesn't work

1 个答案:

答案 0 :(得分:2)

对于某些Flink操作(例如窗口和流程功能),输入记录和输出记录之间存在某种断开连接,并且Flink无法保证发出的记录仍遵循原始键分区。如果您确信这样做是安全的,则可以使用reinterpretAsKeyedStream而不是第二个keyBy来避免不必要的网络改组。