Ровно-один раз: кто хранит исторические данные, флинк или источник данных

Я знал, что Apache Flink имеет емкость «Ровно один раз», которая полагается на механизм контрольной точки и источник данных, подлежащих повторной отправке.

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

Говоря, что источником данных является Apache Kafka, могу ли я позволить Kafka хранить исторические данные? Могу ли я позволить Flink хранить исторические данные? Или я могу позволить им обоим сделать это? Если они оба могут делать это вместе, означает ли это, что я могу позволить Kafka хранить одну часть исторических данных, а Flink - другую часть исторических данных, чтобы я мог сохранить больше исторических данных?


person Yves    schedule 11.05.2020    source источник
comment
Думаю, вам будет интересно прочитать этот документ: vldb.org/pvldb/vol10 /p1718-carbone.pdf   -  person damjad    schedule 11.05.2020


Ответы (1)


Flink следует подходу потока данных для потоковой обработки. Каждый оператор обрабатывает некоторые элементы и отправляет их вниз по потоку, как только они будут обработаны.

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

Каналы, используемые для передачи данных между операторами, также надежны. Таким образом, всякий раз, когда оператор терпит неудачу, ему просто нужно воспроизвести записи в канале, которые были отправлены последним оператором с последней успешной контрольной точки. Поскольку межоператорские каналы долговечны (хранят записи по дизайну) и гарантируют FIFO, вам не нужно никуда хранить их вручную. (Мне еще предстоит найти подробности того, как они это делают.)

Если вы используете Kafka в качестве источника, Flink позаботится и о семантике «ровно один раз». (Из-за долговечности Kafka записи хранятся и могут быть прочитаны снова.)

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

person damjad    schedule 11.05.2020