Я читаю данные из четырех потоков Kinesis. Данные в каждом потоке имеют разные типы данных. После считывания всех четырех потоков я назначаю временные метки и водяные знаки и собираю данные из каждого потока. Все результаты четырех агрегаций выводятся с использованием одного и того же объекта generi c. Я хочу объединить результаты из четырех потоков, чтобы я мог отправить объединенный поток в одну ProcessFunction. По сути, это позволило бы мне использовать ProcessFunction как CoProcessFunction, но я мог бы иметь дело с данными из более чем двух потоков (в этом случае ProcessFunction получит агрегации из всех четырех отдельных потоков).
Однако меня беспокоит то, что это может плохо сочетаться с водяными знаками. Если одному потоку требуется больше времени для обработки или он каким-то образом отстает, его агрегация может не попасть в функцию процесса, если все водяные знаки передаются в объединении и один из потоков опережает другие. Если это так, то водяной знак функции процесса будет максимальным из водяных знаков, которые он видит из четырех отдельных потоков.
Мой вопрос такой: Как обрабатываются водяные знаки в операторах объединения и как обрабатывают ли операторы после объединения эти водяные знаки?
Дополнительно: Если объединение объектов generi c не работает из-за проблем с водяными знаками, каков наилучший способ объединения результатов? из четырех различных агрегаций, когда Flink поддерживает только CoProcessFunction для двух потоков?