当前位置: 首页 > 知识库问答 >
问题:

Kinesis Binder发电机数据库表上的默认读取容量和写入容量

晋骏喆
2023-03-14

根据Spring Aws Kinesis Binder中的留档,读取容量和写入容量的默认值为1

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

readCapacity DynamoDb表的读取容量。请参阅运动配置吞吐量

默认值:1

writeCapacity DynamoDb表的写入容量。请参阅Kinesis配置的吞吐量默认值:1

从Kinesis Client代码中,我可以看到默认值为10。

https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/src/main/java/software/amazon/kinesis/leases/dynamodb/TableConstants.java

Spring动觉活页夹有定制吗。

编辑

我有读和写容量为40的锁表。

我这样配置了活页夹

spring: 
  cloud:
    stream:
      kinesis:
        binder:
          locks:
            table: customLocks
            readCapacity: 5
            writeCapacity: 2
          checkpoint:
            table: customCheckPoints
            readCapacity: 5
            writeCapacity: 2
        bindings:
          inputone:
            consumer:
              listenerMode: batch
              idleBetweenPolls: 500
              recordsLimit: 50
          inputtwo:
            consumer:
              listenerMode: batch
              idleBetweenPolls: 500
              recordsLimit: 50
      bindings:
        inputone:
          group: my-group-1
          destination: stream-1
          content-type: application/json
        inputtwo:
          group: my-group-2
          destination: stream-2
          content-type: application/json

我有三个容器运行这些配置。

我看到针对customLocks表的ProvisionedthroughoutExceededexception。

不确定绑定器是否试图使dynamo db locks表过载。

2019-05-05 07:49:52.216  WARN --- [-kinesis-shard-locks-1] ices.dynamodbv2.AmazonDynamoDBLockClient : Could not acquire lock because of a client side failure in talking to DDB
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; Request ID: 94CURTLH858HM3RRELMSB6J817VV4KQNSO5AEMVJF66Q9ASUAAJG)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1632)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1304)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1058)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:3452)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:3428)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.executeGetItem(AmazonDynamoDBClient.java:1789)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.getItem(AmazonDynamoDBClient.java:1764)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBLockClient.readFromDynamoDB(AmazonDynamoDBLockClient.java:997)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBLockClient.getLockFromDynamoDB(AmazonDynamoDBLockClient.java:743)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBLockClient.acquireLock(AmazonDynamoDBLockClient.java:402)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBLockClient.tryAcquireLock(AmazonDynamoDBLockClient.java:567)
    at org.springframework.integration.aws.lock.DynamoDbLockRegistry$DynamoDbLock.doLock(DynamoDbLockRegistry.java:504)
    at org.springframework.integration.aws.lock.DynamoDbLockRegistry$DynamoDbLock.tryLock(DynamoDbLockRegistry.java:478)
    at org.springframework.integration.aws.lock.DynamoDbLockRegistry$DynamoDbLock.tryLock(DynamoDbLockRegistry.java:452)
    at org.springframework.integration.aws.inbound.kinesis.KinesisMessageDrivenChannelAdapter$ShardConsumerManager.lambda$run$0(KinesisMessageDrivenChannelAdapter.java:1198)
    at org.springframework.integration.aws.inbound.kinesis.KinesisMessageDrivenChannelAdapter$ShardConsumerManager.dt_access$257(KinesisMessageDrivenChannelAdapter.java)
    at java.util.Collection.removeIf(Collection.java:414)
    at org.springframework.integration.aws.inbound.kinesis.KinesisMessageDrivenChannelAdapter$ShardConsumerManager.run(KinesisMessageDrivenChannelAdapter.java:1191)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

共有1个答案

越姚石
2023-03-14

在我看来,容量越大,您在AWS帐户中支付的费用就越多。这种配置确实可以通过应用程序更改。属性:

spring.cloud.stream.kinesis.binder.locks.readCapacity = 10
spring.cloud.stream.kinesis.binder.locks.writeCapacity = 10

这正是Kinesis Binder文档中解释的内容。

 类似资料:
  • 我正试图通过spring boot应用程序中的键表连接到Kerberized oracle服务器。我有键盘和krb5。resources下的conf和application下的jaas conf字符串。yml-like: 使用keytab和principal替换的最终结果如下所示: 我已经验证了我可以通过在日志中打印文件内容从资源中读取keytab内容(尽管它是编码的)。 我将此jaas设置为:

  • 我有一个js文件,其中包含一些字典结构,如下例- 文件:read_js。js公司 我想使用typecript在此字典中添加一些数据。如何实现这一点?我尝试了,但这返回文件中存在的所有文本,因此无法读取字典并附加我自己的键值并重新写入js文件。

  • 我应该设计一个组件,该组件应该通过在Java中使用多线程来实现以下任务,因为文件非常大/多,而且任务必须在很短的窗口内完成: 读取多个csv/xml文件并将所有数据保存在数据库中 读取数据库并将数据写入单独的csv文件 我对多线程很陌生 请告诉我您建议在Java或Spring Batch中使用传统的多线程。这里的输入源是多个的,输出源也是多个的。

  • 问题内容: 有一个库可以导出文件,但是我想捕获文件的内容。我想将一个作者传递到库中,并能够读取该作家写到文件中的内容。最终,我想扩充该库以跳过编写此文件的过程。io.Copy或io.Pipe是否可能? 库代码创建一个* File并将此句柄用作io.Writer。我尝试使用io.Copy,但只读取了0个字节。 问题答案: 如果要在写入字节时捕获字节,请使用带有的a 作为第二个写入器。 或在写入时在s

  • 我对微服务最佳实践方法有点困惑。 以下场景: 来自mqtt设备的大量传入消息。一个rest api,客户可以在其中读取消息(大部分只是其中的一部分)。 我的想法是,创建一个用于将消息存储在数据库表中的微服务。还有第二个带有rest api的微服务来读取这些消息。我想这样做,因为缩放问题。(传入的存储部分比读取rest api需要更多的电力) 我读到“完美”的微服务应该是唯一一个在数据库中访问其数据

  • 我需要使用单独的读者/作者MySQL服务器。一个写入程序和一个(或多个)读取复制副本。 最好的方法是什么? 我发现了很多例子: http://www.dragishak.com/?p=307 使用特殊的 JDBC 驱动程序: 用法是: https://stackoverflow.com/a/33169879/1974494 使用Spring < code > AbstractRoutingData