Я установил автономный кластер Flink 1.2 с 2 диспетчерами заданий и 3 диспетчера задач, и я использую JMeter для его нагрузочного тестирования, создавая сообщения / события Kafka, которые затем обрабатываются. Задание обработки выполняется в диспетчере задач и обычно занимает около 15 000 событий в секунду.
Задание установило контрольную точку EXACTLY_ONCE и сохраняет состояние и контрольные точки в Amazon S3. Если я закрываю TaskManager, выполняющий задание, которое занимает немного, несколько секунд, тогда задание возобновляется в другом TaskManager. Задание в основном регистрирует идентификаторы событий, которые являются последовательными целыми числами (например, от 0 до 1200000).
Когда я проверяю вывод в TaskManager, я закрываю последний счетчик, например, 500000, затем, когда я проверяю вывод на возобновленном в другом TaskManager он начинается с ~ 400000. Это означает ~ 100К дублированных событий. Это число зависит от скорости теста, может быть больше или меньше.
Не уверен, что я что-то упускаю, но я ожидаю, что задание отобразит следующий последовательный номер (например, 500001) после возобновления в другом TaskManager.
Кто-нибудь знает, почему это происходит / мне нужно настроить дополнительные параметры, чтобы получить их ровно один раз?
Обработка сообщения Flink ровно один раз
Ответы (1)
Вы видите ожидаемое поведение ровно один раз. Flink реализует отказоустойчивость посредством комбинации контрольных точек и воспроизведения в случае сбоев. Гарантия заключается не в том, что каждое событие будет отправлено в конвейер ровно один раз, а в том, что каждое событие повлияет на состояние вашего конвейера только один раз.
Контрольная точка создает согласованный моментальный снимок для всего кластера. Во время восстановления состояние оператора восстанавливается, и источники воспроизводятся с самой последней контрольной точки.
Для более подробного объяснения см. Это сообщение в блоге Artisans: Высокая пропускная способность, низкая задержка и однократная потоковая обработка с Apache Flink ™ или документы Flink.
person
David Anderson
schedule
16.04.2017
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