Обработка сообщения Flink ровно один раз

Я установил автономный кластер Flink 1.2 с 2 диспетчерами заданий и 3 диспетчера задач, и я использую JMeter для его нагрузочного тестирования, создавая сообщения / события Kafka, которые затем обрабатываются. Задание обработки выполняется в диспетчере задач и обычно занимает около 15 000 событий в секунду.
Задание установило контрольную точку EXACTLY_ONCE и сохраняет состояние и контрольные точки в Amazon S3. Если я закрываю TaskManager, выполняющий задание, которое занимает немного, несколько секунд, тогда задание возобновляется в другом TaskManager. Задание в основном регистрирует идентификаторы событий, которые являются последовательными целыми числами (например, от 0 до 1200000).
Когда я проверяю вывод в TaskManager, я закрываю последний счетчик, например, 500000, затем, когда я проверяю вывод на возобновленном в другом TaskManager он начинается с ~ 400000. Это означает ~ 100К дублированных событий. Это число зависит от скорости теста, может быть больше или меньше.
Не уверен, что я что-то упускаю, но я ожидаю, что задание отобразит следующий последовательный номер (например, 500001) после возобновления в другом TaskManager.
Кто-нибудь знает, почему это происходит / мне нужно настроить дополнительные параметры, чтобы получить их ровно один раз?


person razvan    schedule 16.04.2017    source источник
comment
Ровно-однократно не означает, что каждое событие будет обработано один раз. When we say “exactly-once semantics”, what we mean is that each incoming event affects the final results exactly once. Even in case of a machine or software failure, there’s no duplicate data and no data that goes unprocessed.   -  person Ricardo Alvaro Lohmann    schedule 03.02.2020


Ответы (1)


Вы видите ожидаемое поведение ровно один раз. Flink реализует отказоустойчивость посредством комбинации контрольных точек и воспроизведения в случае сбоев. Гарантия заключается не в том, что каждое событие будет отправлено в конвейер ровно один раз, а в том, что каждое событие повлияет на состояние вашего конвейера только один раз.

Контрольная точка создает согласованный моментальный снимок для всего кластера. Во время восстановления состояние оператора восстанавливается, и источники воспроизводятся с самой последней контрольной точки.

Для более подробного объяснения см. Это сообщение в блоге Artisans: Высокая пропускная способность, низкая задержка и однократная потоковая обработка с Apache Flink ™ или документы Flink.

person David Anderson    schedule 16.04.2017