리샤딩, 크기 조정 및 병렬 처리 - Amazon Kinesis Data Streams

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

리샤딩, 크기 조정 및 병렬 처리

리샤딩을 사용하면 스트림을 통과하는 데이터의 속도 변화에 맞게 스트림의 샤드 수를 늘리거나 줄일 수 있습니다. 일반적으로 샤드 데이터 처리 측정치를 모니터링하는 관리 애플리케이션에서 리샤딩을 수행합니다. KCL 자체는 리샤딩 작업을 시작하지 않지만 리샤딩으로 인한 샤드 수 변화에 맞게 조정됩니다.

에 명시된 바와 같이임대 테이블을 사용하여 KCL 소비자 애플리케이션에서 처리된 샤드 추적을 선택하면 KCL이 Amazon DynamoDB 테이블을 사용하여 스트림의 샤드를 추적합니다. 리샤딩으로 인해 새 샤드가 생성되면 KCL이 새 샤드를 찾아 테이블의 새 행을 채웁니다. 작업자가 자동으로 새로운 샤드를 찾고 프로세서를 생성하여 데이터를 처리합니다. 또한 KCL은 사용 가능한 모든 작업자 및 레코드 프로세서에 스트림의 샤드를 배포합니다.

KCL은 리샤딩 전에 샤드에 있던 모든 데이터가 먼저 처리되도록 합니다. 해당 데이터가 처리된 후 새로운 샤드의 테이터가 레코드 프로세서로 전송됩니다. 이러한 방식으로 KCL은 특정 파티션 키의 스트림에 데이터 레코드가 추가되는 순서를 유지합니다.

예: 리샤딩, 크기 조정 및 병렬 처리

다음 예에서는 KCL이 크기 조정 및 리샤딩을 처리하는 방법을 보여줍니다.

  • 예를 들어, 애플리케이션이 하나의 EC2 인스턴스에서 실행 중이고 4개의 샤드가 있는 하나의 Kinesis Data Streams를 처리하는 경우를 생각해 봅니다. 이 인스턴스 하나에는 KCL 작업자 1개와 레코드 프로세서 4개 (샤드마다 레코드 프로세서 1개) 가 있습니다. 이 레코드 프로세서 4개가 같은 프로세스에서 병렬로 실행됩니다.

  • 그 다음 다른 인스턴스를 사용하기 위해 애플리케이션 크기를 조정하면 인스턴스 2개에서 샤드가 4개인 스트림 하나를 처리합니다. KCL 작업자가 두 번째 인스턴스에서 시작될 때 첫 번째 인스턴스와 로드 밸런싱하여 각 인스턴스가 샤드 2개를 처리합니다.

  • 샤드 4개를 5개로 분할합니다. KCL은 인스턴스 간 처리를 다시 조정합니다. 하나는 샤드 3개를 처리하고 나머지 인스턴스는 샤드 2개를 처리합니다. 샤드를 병합할 때도 비슷하게 조정됩니다.

일반적으로 KCL을 사용할 때 인스턴스 수가 샤드 수를 초과하지 않도록 해야 합니다 (장애 대기 용도 제외). 각 샤드는 정확히 KCL 작업자 하나에 의해 처리되며 해당하는 레코드 프로세서를 하나만 있으므로 샤드 하나를 처리하기 위해 여러 인스턴스가 필요하지 않습니다. 그러나 한 작업자가 처리할 수 있는 샤드 수에는 제한이 없으므로 샤드 수가 인스턴스 수를 초과해도 괜찮습니다.

애플리케이션에서 처리를 확장하려면 다음 방법을 조합해 테스트해야 합니다.

  • 인스턴스 크기 늘리기(모든 레코드 프로세서가 프로세스에서 병렬로 실행되기 때문)

  • 최대 열린 샤드 수까지 인스턴스 수 늘리기(샤드를 독립적으로 처리할 수 있기 때문)

  • 샤드 수 늘리기(병렬 처리 수준 향상)

Auto Scaling을 사용하여 적절한 측정치에 따라 자동으로 인스턴스 크기를 조정할 수 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서를 참조하세요.

리샤딩으로 스트림의 샤드 수를 늘리면 해당 레코드 프로세서의 수가 증가하여 이를 호스팅하는 EC2 인스턴스의 로드가 커집니다. 인스턴스가 Auto Scaling 그룹의 일부이고 로드가 충분히 커지면 Auto Scaling 그룹이 인스턴스를 추가하여 증가한 로드를 처리합니다. 시작할 때 Amazon Kinesis Data Streams 애플리케이션을 실행하도록 인스턴스를 구성하여 추가 작업자 및 레코드 프로세서를 새로운 인스턴스에서 즉시 활성화해야 합니다.

리샤딩에 대한 자세한 내용은 스트림 리샤딩을 참조하십시오.