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