我正在尝试使用DynamoDB流和AWS提供的Java DynamoDB流Kinesis适配器捕获DynamoDB表更改。我正在使用Scala应用程序中的AWS Java SDK。
我开始按照AWS指南 和通过AWS发布的代码示例进行操作。但是,我在我的环境中无法让Amazon自己发布的代码正常工作。我的问题出现在KinesisClientLibConfiguration
对象上。
在示例代码中,KinesisClientLibConfiguration
使用DynamoDB提供的流ARN进行配置。
new KinesisClientLibConfiguration("streams-adapter-demo",
streamArn,
streamsCredentials,
"streams-demo-worker")
在我的Scala应用程序中,我按照类似的模式首先从我的Dynamo表中定位当前的ARN:
lazy val streamArn = dynamoClient.describeTable(config.tableName)
.getTable.getLatestStreamArn
然后使用提供的 ARN 创建 KinesisClientLibConfiguration
:
lazy val kinesisConfig :KinesisClientLibConfiguration =
new KinesisClientLibConfiguration(
"testProcess",
streamArn,
defaultProviderChain,
"testWorker"
).withMaxRecords(1000)
.withRegionName("eu-west-1")
.withMetricsLevel(MetricsLevel.NONE)
.withIdleTimeBetweenReadsInMillis(500)
.withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON)
我已验证所提供的流ARN,一切都与我在AWS控制台中看到的相匹配。
但运行时出现异常,指出所提供的ARN不是有效的流名称:
com.amazonaws.services.kinesis.clientlibrary.lib.worker.ShardSyncTask call
SEVERE: Caught exception while sync'ing Kinesis shards and leases
com.amazonaws.services.kinesis.model.AmazonKinesisException: 1 validation
error detected: Value 'arn:aws:dynamodb:eu-west-1:STREAM ARN' at
'streamName' failed to satisfy constraint: Member must satisfy regular
expression pattern: [a-zA-Z0-9_.-]+ (Service: AmazonKinesis; Status Code:
400; Error Code: ValidationException; Request ID: )
通过查看提供的KinesisClientLibConfiguration
文档,第二个参数被列为streamName而没有提到ARN,这确实是有道理的。
我似乎找不到与ARN相关的KinesisClientLibConfiguration
内容。由于我正在使用DynamoDB流而不是Kinesis流,我也不确定如何找到我的流名称。
目前,我不确定我是否漏掉了发布的AWS示例中的任何内容,似乎他们可能在使用较旧版本的KCL。我正在使用amazon-kinesis-client的1.7.0版本。