Осколок [shardId-000000000000] не закрыт. Это может произойти, если мы создали список фрагментов во время выполнения операции повторного анализа.

Я получаю эту ошибку при получении данных из Amazon Kinesis Stream. Я делаю ниже шаги

  1. создание амазонки кинезис Steam
  2. положить данные с помощью putRecord API AmazonKinesisClient,
  3. Затем с помощью библиотеки Worker Of KCL получить данные из потока.

1 ответ

Решение

Есть несколько возможностей.

  1. После того, как вы приказали создать поток, вы подождали достаточно времени для завершения? Иногда создание осколка может занять 10 минут. Так как вам удалось использовать putRecord метод, поток и осколок должны быть активны.
  2. Вы правильно настроили 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/

Другие вопросы по тегам