Spring Aws Kinesis Binder ProvisionedThroughputExceededException при использовании сообщений в пакетном режиме - PullRequest
0 голосов
/ 09 апреля 2019

Я использую пакетный режим для извлечения записей из потока кинезиса. Мы используем пружинный переплет Kinesis.

В большинстве случаев мы не можем получать сообщения из потока. Только несколько раз мы можем извлекать сообщения из потока.

Мой конфиг выглядит ниже

Мой конфиг

spring:
  cloud:
    stream:
      kinesis:
        binder:
          locks:
            leaseDuration: 30
            readCapacity: 1
            writeCapacity: 1
          checkpoint:
            readCapacity: 1
            writeCapacity: 1
        bindings:
          InStreamGroupOne:
            consumer:
              listenerMode: batch
              idleBetweenPolls: 30000
              recordsLimit: 5000
              consumer-backoff: 1000
      bindings:
        InStreamGroupOne:
          group: in-stream-group
          destination: stream-1
          content-type: application/json
        OutboundStreamOne:
          destination: stream-2
          content-type: application/json
        OutboundStreamTwo:
          destination: stream-3
          content-type: application/json
        OutboundStreamThree:
          destination: stream-4
          content-type: application/json

Когда я включаю ведение журнала отладки, я мог видеть это исключение

Received error response: com.amazonaws.services.dynamodbv2.model.ProvisionedThroughputExceededException: The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API. (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ProvisionedThroughputExceededException; 

Я попытался уменьшить размер пакета до 150 и idleBetweenPools до 1 секунды. Я также обновил readCapacity и writeCapacity до 10. Но та же ошибка.

Из консоли AWS я мог видеть, что SpringIntegrationLockRegistry превысил порог чтения.

Не могли бы вы помочь нам понять, что не так.

Работает несколько раз и не работает некоторое время.

1 Ответ

0 голосов
/ 09 апреля 2019

Вот что вы можете сделать в отношении DynamoDB на AWS: Как устранить ошибку пропускной способности для DynamodB?

С точки зрения приложения, вы можете играть с опциями для замков: https://github.com/spring-cloud/spring-cloud-stream-binder-aws-kinesis/blob/master/spring-cloud-stream-binder-kinesis-docs/src/main/asciidoc/overview.adoc#lockregistry

leaseDuration

Период времени, на который будет предоставляться аренда замка. Если для этого параметра установлено значение, например, 30 секунд, блокировка истечет, если сердцебиение не будет отправлено в течение, по крайней мере, 30 секунд (что может произойти, например, если ящик или нить сердцебиения умрут.)

По умолчанию: 20

heartbeatPeriod

Как часто нужно обновлять DynamoDB, чтобы отметить, что экземпляр все еще работает (рекомендуется сделать его как минимум в 3 раза меньше, чем leaseDuration - например, heartBeatPeriod = 1 секунда, leaseDuration = 10 секунд может быть разумной конфигурацией, убедитесь, что включить буфер для задержки сети.)

По умолчанию: 5

refreshPeriod

Сколько ждать, прежде чем пытаться снова получить блокировку (например, если установить значение 10 секунд, он будет пытаться делать это каждые 10 секунд)

По умолчанию: 1000

...