Amazon Managed Streaming for Apache Kafka가 있는데요, Amazon MSK라고도 불립니다
그렇다면 Kafka는 어떤 서비스일까요?
Kafka는 아마존 Kinesis에 대한 대안으로 Kafka와 Kinesis를 사용해서 데이터를 스트리밍할 수 있습니다 AWS에서는 MSK를 사용해서 완벽하게 관리되는 Kafka 클러스터를 구축할 수 있으며, 클러스터를 생성하고 업데이트 및 삭제할 수 있습니다
MSK는 클러스터에서 Kafka 브로커 노드와 Zookeeper 노드를 생성하고 관리할 수 있습니다, 높은 가용성을 위해 최대 3개까지 VPC에서 멀티-AZ에 걸쳐 클러스터를 배치합니다 또한 일반적인 Kafka 오류로부터 자동 복구가 가능하며, 데이터는 EBS 볼륨에서 원하는 기간동안 저장 가능합니다
개인적인 경험으로 보면, Apache Kafka를 설정하는 것은 상당히 어렵습니다, 따라서 한 번 클릭만으로 AWS에 Kafka를 배포한다는 사실은 아주 훌륭합니다, 이것이 바로 아마존의 MSK 서비스입니다
거기에 더해 MSK 서버리스를 사용할 수 있는 옵션이 있는데요, 이것은 MSK에서 Apache Kafka를 실행하는 것인데 이번에는 서버를 프로비전하지 않고 용량을 관리하지도 않습니다
MSK가 자동으로 리소스를 프로비저닝하고 스토리지를 계산해서 확장합니다
그렇다면 Apache Kafka란 무엇일까요?
Apache Kafka는 데이터를 스트리밍하는 방법이며, 다수의 브로커로 구성됩니다
Apache Kafka at a high level
데이터를 생산하는 producer가 있는데 Kinesis, IoT, RDS같은 곳에서 데이터를 수집합니다. 그리고 Kafka 토픽에 데이터를 직접 보내고 다른 브로커들을 위해 완벽하게 복제될 것입니다
자, 이제 Kafka 토픽은 실시간 데이터스트리밍을 하게 되는데요 consumer들은 데이터 자체를 소비하기 위해 토픽으로부터 가져옵니다. 그런 다음 consumer는 원하는 대로 데이터를 처리하거나 다양한 목적지로 보내기도 합니다.
예를 들면 EMR, S3, Sagemaker, Kinesis, RDS 같은 곳으로요 Kafka는 kinesis와 상당히 유사하지만 주의해야 할 차이점이 있습니다
Kinesis Data Streams vs. Amazon MSK
Kinesis 데이터 스트림과 Amazon MSK은 어떤 차이점이 있을까요?
Kinesis 데이터 스트림에서는 1Mb 메시지 제한이 있습니다, 아마존 MSK에서는 1Mb가 기본이지만 더 높은 사양으로 메시지 보존을 구성할 수도 있습니다, 예를 들면 10Mb 정도로 말이죠.
Kinesis Data Steams에서는 Shards로 데이터를 스트리밍할 수 있는데, MSK에서는 Kafka topics with Partitions라고 부르고, 개념은 유사합니다, kinesis data stream에서 크기 조절을 위해 Shard 분할과 축소, 병합 등을 하는데요 Amazon MSK에서는 토픽 크기 조절을 위해, 파티션을 추가할수만 있고, 제거할 수는 없습니다.
Kinesis Data Stream에는 in-flight encryption이 있고, MSK에는 PLAINTEXT 또는 TLS in-flight encryption이 있습니다. 두 클러스터 모두 at-rest encryption이 있는데, 시험을 위해서는 이 정도 수준이면 충분합니다.
몇 가지 차이점이 있고 아마존 MSK에서는 원하는 만큼 데이터를 보존할 수 있습니다. 기본 EBS 스토리지에 대한 비용을 지불하기만 하면 1년 이상 사용 가능합니다.
Amazon MSK Consumers
MSK에 생성하기 위해서는 Kafka 프로듀서를 생성해야 하고 그런 다음 MSK로부터 소비해야 하는데 다양한 옵션들이 있습니다.
첫 번째는 Apache Flink를 위해 Kinesis Data Analytics를 사용하는 것으로 Flink 애플리케이션을 실행하고 MSK 클러스터에서 직접 읽도록 하는 것인데요 ETL 작업 스트리밍을 위해 AWS Glue를 사용할 수도 있는데 이번에는 Apache Spart Streaming에 의해 구동됩니다.
Lambda function을 사용해서 아마존 MSK를 이벤트 소스로 직접 사용할 수 있고 아니면 Kafka consumer를 직접 작성해서 원하는 플랫폼에서 실행하도록 만들 수도 있습니다. 예를 들면 Amazon EC2 인스턴스나, ECS 클러스터, EKS클러스터 같은 곳에서 말이죠.