NextShardIterator никогда не возвращает ноль при чтении данных из потока kinesis - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь прочитать записи из потока kinesis после определенной метки времени в лямбда-функции. Я получаю осколки, итераторы осколков, а затем данные.
Когда я получаю первый итератор, я получаю данные и продолжаю рекурсивно вызывать ту же функцию, используя NextShardIterator (присутствует в возвращаемых данных). Согласно документации, NextShardIterator вернет значение null, когда больше нет данных для чтения, и оно достигло $ last.
Но оно никогда не возвращает значение null, и функция продолжает вызываться, и в итоге я получаю исключение Provisioned Throughput Exceeded.
Я также пытался использовать MillisBehindLatest, чтобы остановить чтение, когда значение равно нулю, но в некоторых случаях также происходит сбой.

Существует ли правильный способ получения данных из кинезиса на основе метки времени?

1 Ответ

0 голосов
/ 08 марта 2020

NextShardIterator вернет ноль только тогда, когда достигнет конца закрытого шарда (в случаях, когда количество шардов обновляется с помощью UpdateShardCount, SplitShard или MergeShard)

"NextShardIterator Следующая позиция в шарде, с которой начинается последовательное чтение записей данных. Если установлено значение null, шард был закрыт, и запрошенный итератор больше не возвращает данных."

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

...