Я пытаюсь захватить изменения таблицы DynamoDB с использованием потоков DynamoDB, а AWS предоставил Java DynamoDB потоки Kinesis-адаптера. Я работаю с SDK Java AWS в приложении Scala.Обработка потоков DynamoDB с использованием потоков AWS Java DynamoDB Адаптер Kinesis
Я начал с просмотра AWS guide и просмотрел опубликованный AWS code example. Однако у меня возникают проблемы с получением собственного опубликованного кода Amazon в моей среде. Моя проблема связана с объектом KinesisClientLibConfiguration
.
В примере кода KinesisClientLibConfiguration
сконфигурирован с потоком ARN, предоставленным DynamoDB.
new KinesisClientLibConfiguration("streams-adapter-demo",
streamArn,
streamsCredentials,
"streams-demo-worker")
Я последовал за аналогичную картину в моем приложении Scala от первого местоположения текущего ARN из моего Динамо стола:
lazy val streamArn = dynamoClient.describeTable(config.tableName)
.getTable.getLatestStreamArn
А потом создавать KinesisClientLibConfiguration
с обеспеченным ARN:
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.
Я не могу найти что-либо на KinesisClientLibConfiguration
, что связано с ARN. Поскольку я работаю с потоком DynamoDB, а не с потоком Kinesis, я также не уверен, как найти имя моего потока.
На данный момент я не уверен, что мне не хватает в опубликованном примере AWS, похоже, что они могут использовать гораздо более старую версию KCL. Я использую версию 1.7.0 amazon-kinesis-client.
Вы должны улучшить свой ответ, добавив здесь пример и краткое объяснение. Возможно, чтение [this] (https://stackoverflow.com/help/how-to-answer) помогает вам улучшить ваш ответ. – Markus