API를 통해 스트림 생성 - Amazon Kinesis Data Streams

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

API를 통해 스트림 생성

다음 단계에 따라 Kinesis 데이터 스트림을 생성합니다.

Kinesis Data Streams 클라이언트 구축

Kinesis 데이터 스트림 작업을 수행하기 전에 클라이언트 객체를 구축해야 합니다. 다음 Java 코드는 클라이언트 빌더를 인스턴스화하고 이를 사용하여 리전, 자격 증명 및 클라이언트 구성을 설정합니다. 그리고 클라이언트 객체를 구축합니다.

AmazonKinesisClientBuilder clientBuilder = AmazonKinesisClientBuilder.standard(); clientBuilder.setRegion(regionName); clientBuilder.setCredentials(credentialsProvider); clientBuilder.setClientConfiguration(config); AmazonKinesis client = clientBuilder.build();

자세한 내용은 AWS 일반 참조의 Kinesis Data Streams Regions and Endpoints를 참조하세요.

스트림 생성

Kinesis Data Streams 클라이언트를 생성했으므로 작업할 스트림을 생성할 수 있습니다. 이 스트림은 Kinesis Data Streams 콘솔을 통해 또는 프로그래밍 방식으로 완료할 수 있습니다. 프로그래밍 방식으로 스트림을 생성하려면 CreateStreamRequest 객체를 인스턴스화하고 스트림의 이름과 사용할 스트림에 대한 샤드 수(프로비저닝된 모드를 사용하려는 경우)를 지정합니다.

  • 온디맨드:

    CreateStreamRequest createStreamRequest = new CreateStreamRequest(); createStreamRequest.setStreamName( myStreamName );
  • 프로비저닝됨:

    CreateStreamRequest createStreamRequest = new CreateStreamRequest(); createStreamRequest.setStreamName( myStreamName ); createStreamRequest.setShardCount( myStreamSize );

스트림 이름은 스트림을 식별합니다. 이름의 범위는 애플리케이션에 의해 사용되는 AWS 계정으로 지정됩니다. 또한 리전에 의해서도 범위가 지정됩니다. 즉, 서로 다른 2개의 AWS 계정에 있는 2개의 스트림은 이름이 동일할 수 있으며, 동일한 AWS 계정에 있지만 다른 2개의 리전에 있는 2개의 스트림도 이름이 동일할 수 있지만, 동일한 계정과 동일한 리전에 있는 2개의 스트림은 이름이 동일할 수 없습니다.

스트림의 처리량은 샤드 수를 결정합니다. 프로비저닝된 처리량이 많을 수록 더 많은 샤드가 필요합니다. 샤드 수가 많을 수록 해당 스트림에 대해 AWS가 부과하는 비용도 증가합니다. 애플리케이션에 적절한 샤드 수 계산에 대한 자세한 내용은 데이터 스트림 용량 모드 선택 단원을 참조하십시오.

createStreamRequest 객체가 구성된 후 클라이언트에 대해 createStream 메서드를 호출하여 스트림을 생성합니다. createStream을 호출한 후, 스트림이 ACTIVE 상태에 도달할 때까지 기다린 다음 스트림에 대한 작업을 수행합니다. 스트림의 상태를 확인하려면 describeStream 메서드를 호출하십시오. 그러나 스트림이 존재하지 않는 경우 describeStream을 호출하면 예외가 발생합니다. 따라서 describeStream 호출을 try/catch 블록으로 묶으십시오.

client.createStream( createStreamRequest ); DescribeStreamRequest describeStreamRequest = new DescribeStreamRequest(); describeStreamRequest.setStreamName( myStreamName ); long startTime = System.currentTimeMillis(); long endTime = startTime + ( 10 * 60 * 1000 ); while ( System.currentTimeMillis() < endTime ) { try { Thread.sleep(20 * 1000); } catch ( Exception e ) {} try { DescribeStreamResult describeStreamResponse = client.describeStream( describeStreamRequest ); String streamStatus = describeStreamResponse.getStreamDescription().getStreamStatus(); if ( streamStatus.equals( "ACTIVE" ) ) { break; } // // sleep for one second // try { Thread.sleep( 1000 ); } catch ( Exception e ) {} } catch ( ResourceNotFoundException e ) {} } if ( System.currentTimeMillis() >= endTime ) { throw new RuntimeException( "Stream " + myStreamName + " never went active" ); }