Проблема неактивного раздела коннектора источника Apache Beam Kafka с «CustomTimeStampPolicyWithLimitedDelay»
Источник - кафка для нашего лучевого трубопровода. Коннектор ввода-вывода kafka в Apache Beam поддерживает перемещение водяного знака (в случае flink runner), даже если какой-либо раздел неактивен. Приложения, которые хотели бы обрабатывать пакеты на основе метки времени пакета, включенного в полезную нагрузку, хотели бы использовать «CustomTimestampPolicyWithLimitedDelay». Мы используем ФИКСИРОВАННЫЕ ОКНА в течение минуты для агрегирования, которое зависит от понятия времени. Поэтому, если время не идет должным образом, функция агрегирования не вызывается, и данные теряются.
У этого API есть проблемы с функциональностью. Итак, когда приложение инициализировано, давайте, например, используем тему a в качестве источника с тремя разделами. Эти шаги были предприняты для воспроизведения проблемы:
- Закачка данных только в один раздел с частотой с любыми x секундами, а функция агрегирования наблюдения не вызывается даже через несколько минут.
- Теперь перекачивайте данные во все разделы, и, как и ожидалось, в конце минуты вызывается функция агрегирования.
- Теперь перекачивайте данные только в один раздел, и это тоже не раньше конца минуты непосредственно перед этим, чтобы мы могли сгенерировать сценарий бездействующего раздела и наблюдать, работает ли он, как ожидалось, СЕЙЧАС.
Итак, своего рода сводка заключается в том, что существует проблема инициализации с этим api, когда время не увеличивается, но после шага 2 оно стабилизируется и работает должным образом.
Это легко воспроизвести, и для исправления потребуется Apache Beam.
На данный момент временное исправление, которое мы использовали, касается LogAppendTime, который работает безупречно, но мы не хотим обрабатывать пакеты во время брокера из-за различных потребностей приложений.