Зачем нам нужно несколько клавиш в операторах flink? - PullRequest
0 голосов
/ 02 июля 2019

KeyedProcessFunction требует, чтобы предыдущий оператор был оператором keyedBy

Когда я пытаюсь обработать поток с ключами с помощью двух KeyedProcessFunctions, почему вторая функция требует, чтобы я снова применил операцию 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 Ответ

2 голосов
/ 02 июля 2019

С некоторыми операциями Flink, такими как окна и функции процесса, между входными и выходными записями происходит своего рода разъединение, и Flink не может гарантировать, что создаваемые записи все еще следуют за первоначальным разбиением ключа.Если вы уверены, что это безопасно, вы можете использовать reinterpretAsKeyedStream вместо второго keyBy, чтобы избежать ненужного перестановки в сети.

...