При проверке записей с помощью Amazon KCL возникает исключение ProvisionedThroughputExceededException.

Мы столкнулись с ProvisionedThroughputExceededException при одновременном контроле множества событий.

Трассировка стека исключения следующая:

    com.amazonaws.services.kinesis.model.ProvisionedThroughputExceededException: Rate exceeded for shard shardId-000000000000 in stream mystream under account accountid. (Service: AmazonKinesis; Status Code: 400; Error Code: ProvisionedThroughputExceededException; Request ID: ea36760b-9db3-0acc-bbe9-87939e3270aa)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1529)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1167)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:948)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:635)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:618)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$300(AmazonHttpClient.java:586)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:573)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:445)
at com.amazonaws.services.kinesis.AmazonKinesisClient.doInvoke(AmazonKinesisClient.java:1645)
at com.amazonaws.services.kinesis.AmazonKinesisClient.invoke(AmazonKinesisClient.java:1621)
at com.amazonaws.services.kinesis.AmazonKinesisClient.getShardIterator(AmazonKinesisClient.java:909)
at com.amazonaws.services.kinesis.clientlibrary.proxies.KinesisProxy.getIterator(KinesisProxy.java:291)
at com.amazonaws.services.kinesis.clientlibrary.lib.worker.SequenceNumberValidator.validateSequenceNumber(SequenceNumberValidator.java:79)
at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.checkpoint(RecordProcessorCheckpointer.java:120)
at com.amazonaws.services.kinesis.clientlibrary.lib.worker.RecordProcessorCheckpointer.checkpoint(RecordProcessorCheckpointer.java:90)

Как вы можете видеть здесь, исключение возникает в

RecordProcessorCheckpointer.java:90

внутри библиотеки KCL. Какое отношение контрольные точки имеют к превышению пропускной способности?


person Edmondo1984    schedule 12.07.2017    source источник


Ответы (1)


Кинезис ограничен по частоте,

Запросы PutRecord могут обрабатываться только до предела предоставленной пропускной способности для задействованного сегмента. превышение этого значения вызовет ProvisionedThroughputExceededException

Очевидным решением было бы разделить осколок потока на два и равномерно разделить пространство хеш-ключа. Это может показаться ненужным, если ваши показатели находятся в пределах одного сегмента, но скажем, если вы используете свой предел 1000 transactions/sec емкости записи в первом 500ms, ваша активность для этого сегмента будет регулироваться для оставшейся половины, поэтому вы не сможете избежать дросселирование с помощью одного осколка.

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

person Ulug Toprak    schedule 12.07.2017
comment
Контрольная точка не выдает это исключение, вы только заполняете дополнительный столбец для каждой строки соответствующим порядковым номером с помощью контрольной точки... ProvisionedThroughputExceededException связано только с превышением пределов пропускной способности. - person Ulug Toprak; 12.07.2017
comment
лишняя строка где? мы на самом деле добавляем новую запись s в kinesis при постановке контрольных точек? - person Edmondo1984; 12.07.2017
comment
Трудно помочь, не видя вашего кода, вот пример кода процессора записи, написанный на python, он может вам помочь. kclpy - person Ulug Toprak; 12.07.2017
comment
Исключение возникает при вызове IRecordProcessorCheckpointer.checkpoint. - person Edmondo1984; 12.07.2017
comment
Извините, чувак, это превратилось в игру в угадайку, если вы не предоставите свой код или журналы ошибок, я не смогу вам помочь. - person Ulug Toprak; 12.07.2017
comment
Кажется, у меня такая же проблема. При попадании в ProvisionThroughputExceededException процесс записи KCL прекратит обработку до следующего перезапуска. Контрольная точка — проверка вызова, как показано в трассировке стека ниже: com.amazonaws.services.kinesis.clientlibrary.exceptions.ThrottlingException: Exceeded throughput while getting an iterator for shard shardId-000000000005 at com.amazonaws.services.kinesis.clientlibrary.lib.worker.SequenceNumberValidator.validateSequenceNumber(SequenceNumberValidator.java:89) ~[amazon-kinesis-client-1.9.0.jar:na] - person ethan; 01.06.2018