it-swarm.com.ru

Amazon KCL Checkpoint и Trim Horizon

Как связаны контрольные точки и обрезка в библиотеке AWS KCL? 

Страница документации Обработка запуска, выключения и регулирования говорит:

По умолчанию KCL начинает читать записи с кончика stream ;, которая является последней добавленной записью. В этом конфигурации, если приложение, создающее данные, добавляет записи в поток, прежде чем какие-либо процессоры получения записи работают, записи не читаются процессорами записи после запуска.

Чтобы изменить поведение процессоров записи так, чтобы оно всегда читает данные с начала потока, установите следующее значение в файле свойств для вашего приложения Amazon Kinesis Streams:

initialPositionInStream = TRIM_HORIZON

Страница документации Разработка клиентской библиотеки Amazon Kinesis на Java говорит:

Для потоков требуется, чтобы процессор записей отслеживал записи которые уже были обработаны в осколке. KCL заботится о это отслеживание для вас, передав контрольную точку (IRecordProcessorCheckpointer) для обработки записей. Процессор записи вызывает метод контрольной точки на этом интерфейсе, чтобы сообщить KCL о том, как далеко он продвинулся в обработке записей в осколке. В В случае сбоя работника KCL использует эту информацию для перезапуска обработка осколка по последней известной обработанной записи.

Кажется, на первой странице говорится, что KCL возобновляется в конце потока, а вторая страница в последней известной обработанной записи (которая была помечена как обработанная RecordProcessor с использованием checkpointer). В моем случае мне определенно нужно перезапустить с последней известной обработанной записи. Нужно ли устанавливать initialPositionInStream в TRIM_HORIZON?

9
Edmondo1984

С потоком кинезиса у вас есть две опции, вы можете прочитать самые новые записи или начать с самой старой (TRIM_HORIZON).

Но, как только вы запустили свое приложение, оно просто читает с позиции, на которой оно остановилось, используя свои контрольные точки . Вы можете увидеть эти контрольные точки в DynamodB (обычно имя таблицы соответствует имени приложения) . Так что, если вы перезапустите свое приложение это обычно будет продолжаться с того места, где остановилось.

Ответ - нет, вам не нужно устанавливать initialPositionInStream в TRIM_HORIZON.

11
itai ariel

Когда вы читаете события из потока Kinesis, у вас есть 4 варианта:

TRIM_HORIZON - самые старые события, которые все еще находятся в потоковых осколках, прежде чем они будут автоматически обрезаны (по умолчанию 1 день, но могут быть продлены до 7 дней). Вы будете использовать эту опцию, если хотите запустить новое приложение, которое будет обрабатывать все записи, доступные в потоке, но потребуется некоторое время, пока оно сможет догнать и начать обработку событий в режиме реального времени.

ПОСЛЕДНИЕ - новейшие события в потоке, и игнорировать все прошедшие события. Вы будете использовать эту опцию, если запустите новое приложение, которое хотите немедленно обработать. 

AT/AFTER_SEQUENCE_NUMBER - порядковый номер обычно является контрольной точкой, которую вы сохраняете во время обработки событий. Эти контрольные точки позволяют вам надежно обрабатывать события, даже в случае сбоя считывателя или когда вы хотите обновить его версию и продолжить обработку всех событий и не потерять ни одно из них. Разница между AT/AFTER основана на времени вашей контрольной точки, до или после успешной обработки событий.

Обратите внимание, что это единственный параметр shard, так как все остальные параметры являются глобальными для потока. Когда вы используете KCL, он управляет таблицей DynamoDB для этого приложения с записью для каждого сегмента с «текущим» порядковым номером для этого фрагмента.

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

Подробности смотрите в документации по Kinesis здесь: https://docs.aws.Amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html

2
Guy

Вы должны использовать «TRIM_HORIZON». Это повлияет только на first , когда ваше приложение начнет читать записи из потока . После этого оно продолжит работу с последней известной позиции.

0
Roee Gavirel