동일한 Amazon DynamoDB 테이블로 다른 Amazon Kinesis Client Library 애플리케이션을 사용하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 5월 8일

동일한 Amazon DynamoDB 테이블로 다른 Amazon Kinesis Client Library(KCL) 애플리케이션을 사용하려고 합니다. 어떻게 해야 합니까? DynamoDB 외에 다른 것을 체크포인트 테이블로 사용하려면 어떻게 해야 합니까?

간략한 설명

KCL를 사용하기 위한 요구 사항은 두 가지가 있습니다.

  • 각 KCL 애플리케이션은 자체적인 DynamoDB 테이블을 사용해야 합니다.
  • KCL 체크포인트에는 DynamoDB 테이블을 사용해야 합니다.

해결 방법

동일한 DynamoDB 테이블로 다른 KCL 애플리케이션을 사용할 수 있습니까?

사용자가 동일한 DynamoDB 테이블로 다른 KCL 애플리케이션을 사용할 수 없는 이유는 다음과 같습니다.

  • 스캔 작업은 DynamoDB 테이블에서 리스를 얻는 데 사용합니다. 따라서 테이블에 다른 KCL 애플리케이션의 리스가 포함되어 있을 경우, 각 애플리케이션이 해당 애플리케이션과 관련이 없는 리스를 받을 수 있습니다. DynamoDB 리스 예외에 대한 자세한 내용은 Amazon Web Services - Labs GitHub 웹 사이트의 DynamoDBLeaseRefresher.java를 참조하십시오.
  • 스트림의 샤드 ID는 체크포인트 동안 DynamoDB 테이블의 기본 키로 사용됩니다. 서로 다른 KCL 애플리케이션이 동일한 DynamoDB 테이블을 사용하고 스트림에서 동일한 샤드 ID가 사용되면 체크포인트에서 불일치가 발생할 수 있습니다. DynamoDB 샤드 ID에 대한 자세한 내용은 애플리케이션 상태 데이터를 참조하십시오.

대신 애플리케이션 이름을 DynamoDB 테이블의 기본 이름으로 사용한 다음, KCL에서 수동으로 테이블 이름을 설정할 수 있습니다. KCL 버전 1.x에서 테이블 이름을 설정하는 방법의 예제는 다음과 같습니다.

KinesisClientLibConfiguration kinesisClientLibConfiguration = // KCL 1.x
        new KinesisClientLibConfiguration(...)
        .withTableName(<table_name>);

참고: KinesisClientLibConfiguration 코드 예제에 대한 자세한 내용은 Amazon Web Services - Labs GitHub 웹 사이트의 KinesisClientLibConfiguration.java를 참조하십시오.

KCL 버전 2.x에서 테이블 이름을 수동으로 설정할 수도 있습니다.

ConfigsBuilder configsBuilder = new ConfigsBuilder(...).tableName(<table_name>); // KCL 2.x

참고:ConfigsBuilder 코드 예제에 대한 자세한 내용은 Amazon Web Services - Labs GitHub 웹 사이트의 ConfigsBuilder.java를 참조하십시오.

DynamoDB 외에 다른 것을 체크포인트 테이블로 사용할 수 있습니까?

사용자는 DynamoDB를 KCL의 체크포인트 테이블로만 사용합니다. DynamoDB가 KCL의 필수 체크포인트 테이블인 이유는 KCL 동작과 구현이 다음과 같이 DynamoDB와 상호 연결되어 있기 때문입니다.

  • KCL에는 ShardSyncTask.java가 포함되는데, 이는 스트림의 샤드 리스가 반드시 DynamoDB 테이블에 포함되도록 보장합니다. 이 점검은 KCL에서 주기적으로 실행됩니다.
  • KCL에는 KCL에서 리스를 관리하고 업데이트하는 구성 요소인 DynamoDBLeaseTaker.javaDynamoDBLeaseRenewer.java가 포함됩니다. DynamoDBLeaseTaker.javaDynamoDBLeaseRenewer.javaDynamoDBLeaseRefresher.java와 작동하고, DynamoDB에 대한 API 요청을 자주 보냅니다.
  • KCL이 체크포인트를 생성하면 DynamoDBCheckpointer.javaDynamoDBLeaseCoordinator.java의 요청이 DynamoDB로 전달됩니다. 이러한 요청은 DynamoDBLeaseCoordinator.java, DynamoDBLeaseRenewer.java 또는 DynamoDBLeaseRefresher.java를 통해 전달됩니다.

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?