Осколок [shardId-000000000000] не закрыт. Это может произойти, если мы создали список фрагментов во время выполнения операции повторного анализа.
Я получаю эту ошибку при получении данных из Amazon Kinesis Stream. Я делаю ниже шаги
- создание амазонки кинезис Steam
- положить данные с помощью
putRecord
APIAmazonKinesisClient
, - Затем с помощью библиотеки Worker Of KCL получить данные из потока.
1 ответ
Решение
Есть несколько возможностей.
- После того, как вы приказали создать поток, вы подождали достаточно времени для завершения? Иногда создание осколка может занять 10 минут. Так как вам удалось использовать
putRecord
метод, поток и осколок должны быть активны. - Вы правильно настроили DynamoDB? Я предполагаю, что вы используете его для синхронизации вашего приложения Kinesis. Смотрите внутри записи таблицы DynamoDB. Правильно ли заполнены все столбцы (т.е. leaseKey, checkpoint, leaseOwner, parentShardId и т. Д.)? Может быть, данные в базе данных старые, поэтому вы можете получить доступ к закрытому фрагменту?
Исключение, о котором вы упоминаете, находится здесь: https://github.com/awslabs/amazon-kinesis-client/blob/master/src/main/java/com/amazonaws/services/kinesis/clientlibrary/lib/worker/ShardSyncer.java#L193
Попробуйте удалить таблицу DynamoDB и позвольте приложению Kinesis (KCL) создать новую. Ссылка: https://console.aws.amazon.com/dynamodb/