2015-03-30 1 views
2

Я хотел бы получить самую последнюю запись из потока Amazon Kinesis. Я намерен извлечь временную метку из этой записи и сравнить ее с меткой времени последней записи, зарегистрированной потребительским приложением, чтобы проверить, отстает ли потребитель.Как я могу получить самую последнюю запись из потока Amazon Kinesis?

Я не могу использовать тип итератора осколков LATEST. Это связано с тем, что LATEST указывает сразу после самой последней записи, поэтому ее нельзя использовать для доступа к самой последней записи.

Есть ли простой способ получить самую последнюю запись?

Подход, который я рассматриваю, заключается в том, чтобы получить итератор осколков для порядкового номера самой последней записи, обработанной потребителем, сделать запрос GetRecords с использованием этого итератора осколков, получить следующий итератор осколков из результата запроса, и повторяйте, пока запрос GetRecords не возвращает никаких записей.

Этот подход предполагает чтение всех записей с контрольно-пропускного пункта потребителя, что кажется излишним расточительным. Есть ли способ обойти все эти записи?

ответ

1

Вы можете использовать метрику: GetRecords.IteratorAgeMilliseconds из показателей CloudWatch для Kinesis. См. Здесь: http://docs.aws.amazon.com/kinesis/latest/dev/monitoring_with_cloudwatch.html

Обратите внимание, что это среднее число нескольких итераторов на разных осколках. Если вам нужно получить более мелкозернистый вид этой метрики на каждом из ваших осколков, вы можете рассчитать ее как часть процессора.

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

Еще одно важное замечание состоит в том, что вы можете иметь несколько процессов для потока кинезий. Можно включить события в Redshift, и можно обработать события для создания счетчиков реального времени в вашей операционной панели. Это означает, что вы можете иметь различное отставание для каждого типа процессора, а не только для каждого осколка.

+0

Спасибо за объяснение Гай! Похоже, эти метрики - все для потока в целом. Я хотел бы получить самую последнюю запись в определенном осколке без необходимости проходить через все записи в этом осколке - знаете ли вы, возможно ли это? – fblundun

+0

В настоящее время нет. Вероятно, вы можете добавить свою собственную метку времени для каждого события и рассчитать разницу, когда вы ее читаете. – Guy