AWS(Amazon Web Service)

[AWS] AWS Integration & Messaging - Kinesis Data Streams

yunseohhe 2024. 11. 26. 14:00

Kinesis Data Streams

  • Kinesis Data Stream은 시스템에서 큰 규모의 데이터 흐름을 다루는 서비스이다.
  • Kinesis Data Stream은 여러 개의 샤드로 구성되어 있고, 이 샤드는 1번, 2번에서 N번까지 번호가 매겨진다.
      - 이 부분은 사전에 우리가 프로비저닝해야 한다.
      - Kinesis Data Stream을 시작할 때 스트림을 여섯 개 샤드로 구성하겠다고 결정해야 한다.
  • 데이터가 모든 샤드에 분배가 되면, 샤드는 데이터 수집률이나 소비율 측면에서 스트림의 용량을 결정한다.
  • 위의 이미지 왼쪽에 생산자는 데이터를 Kinesis Data Stream으로 보낼 것이다. 생산자는 다양하고, 애플리케이션일 수도 있다. 데스크톱이나 휴대전화와 같은 클라이언트 일 수도 있고, 매우 낮은 수준에서 AWS SDK를 활용하거나 더 높은 수준에서 Kinesis Producer Library (KPL)을 활용하기도 한다.
  • Kinesis Agent를 활용해서 스트리밍할 서버, 예를 들면 Kinesis 스트림에서 애플리케이션 로그를 처리할 수도 있다.
    이 모든 생산자는 정확히 동일한 작업을 한다. 매우 낮은 수준에서 SDK에 의존하며 Kinesis Data Stream에 레코드를 전달한다.
      - 레코드는 근본적으로 2가지 요소로 구성된다. 파티션 키와 최대 1MB 크기의 데이터 블롭으로 구성된다. 파티션 키는 레코드가 이용할 샤드를 결정하는 데 사용되고 데이터 블롭은 값 자체를 의미한다.
  • 생산자는 데이터를 스트림으로 보낼 때 초당 1MB를 전송하거나 샤드당 1초에 천 개의 메시지를 전송할 수 있다. 
    따라서 여섯 개의 샤드가 있다면 초당 6MB를 얻거나 총 6천 개의 메시지를 얻을 수 있다.
  • 데이터가 스트림에 들어가면 많은 소비자가 이 데이터를 사용한다.
    먼전 SDK에 의존하거나 높은 수준에서는 Kinesis Client Library(KCL)에 의존하는 애플리케이션이 있고, Kinesis 스트림에서 서버리스로 처리하려는 경우, Lambda 함수도 가능하다. 이러한 소비자가 레코드를 받으면 여기에는 파티션 키, 샤드에서 레코드의 위치를 나타내는 시퀀스 번호, 데이터 자체를 의미하는 데이터 블롭이 있다.
  • Kinesis Data Stream에는 여러 소비 유형이 존재한다. 
    샤드마다 초당 2MB의 처리량을 모든 소비자가 공유할 수도 있고, 아니면 소비자마다 샤드당 1초에 2MB씩 받을 수도 있다. 효율성을 높인 소비유형, (즉 효율성을 높인 팬아웃 방식이라면)
  • 다시 정리하자면, 생산자가 Kinesis Data Stream에 데이터를 전송하고 데이터는 잠시 거기에 머물면서 여러 소비자에게 읽힌다.

 

Kinesis Data Streams의 특징

  • 보존 기간은 1일에서 365일 사이로 설정할 수 있으며 기본적으로 데이터를 다시 처리하거나 확인할 수 있다는 뜻이다.
  • 데이터가 일단 Kinesis로 들어오면 삭제할 수 없으며 이러한 특징을 '불변성'이라고 한다.
  • 데이터 스트림으로 메시지를 전송하면 파티션 키가 추가되고 파티션 키가 같은 메시지들은 같은 샤드로 들어가게 되어 키를 기반으로 데이터를 정렬할 수 있다.
  • 생산자는 SDK, Kinesis Producer Library(KPL), Kinesis Agent를 사용하여 데이터를 전송할 수 있고 소비자는 Kinesis Client Library(KCL)나 SDK를 써서 직접 데이터를 작성할 수 있다.
  • AWS에서 관리하는 Lambda나 Kinesis Data Firehose, Kinesis Data Analytics를 활용할 수도 있다.

 

Kinesis Data Streams - Capacity Modes

  • Provisioned mode
      - 프로비저닝할 샤드 수를 정하고 API를 활용하거나 수동으로 조정한다.
      - Kinesis Data Stream에 있는 각 샤드는 초당 1MB나 1천 개의 레코드를 받아들이고 출력량의 경우에는 각 샤드가 초당 2MB를 받아들인다. 이는 일반적인 소비 유형이나 효율성을 높인 팬아웃 방식에 적용할 수 있다.
      - 샤드를 프로비저닝할 때마다 시간당 비용이 부과되므로 사전에 심사숙고해야 한다.
  • On-demand mode
      - 시간에 따라 언제든 용량이 조정된다.
      - 기본적으로는 초당 4MB 또는 초당 4천 개의 레코드를 처리하지만 이 용량은 지난 30일 동안 관측한 최대 처리량에 기반하여 자동으로 조정된다.
      - 시간당 스트림당 송수신 데이터양(GB 단위)에 따라 비용이 부과된다.
      - 사전에 사용량을 예측할 수 없다면 온디맨드 유형을 선택하는 것이 좋다.

 

Kinesis Data Streams Security

  • 리존에 배포가 되고 위에처럼 샤드가 있다.
  • IAM 정책을 사용하여 샤드를 생성하거나 샤드에서 읽어 들이는 접근 권한을 제어할 수 있다.
  • HTTPS로 전송 중 데이터를 암호화할 수 있으며 미사용 데이터는 CMS로 암호화할 수 있다.
  • 클라이언트 측에서 데이터를 암호화하거나 해독할 수 있으며 이를 '클라이언트 측 암호화'라고 한다.
  • 직접 데이터를 암호화하고 해독해야 하기 때문에 수행하기 더 어렵다.
  • Kinesis에서 VPC 엔드포인트를 사용할 수 있는데, 이를 이용하면 Kinesis에 인터넷을 거치지 않고 프라이빗 서브넷의 인스턴스에서 직접 손쉽게 접근할 수 있다.
  • 모든 API 요청은 CloudTrail로 감시할 수 있다.