무엇을 선택 해야 할까?
AWS 서비스를 이용 하면서 대기열 매세지 처리를 위해 어떤 서비스를 사용 하는 것이 효율적인지 고민 할 때가 있습니다. 그래서 요즘 Architecture에 가장 많이 사용 되고 있는 Apache kafka 와 Amazon Kinesis 를 비교 해보았습니다.
Kafka
고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션을 위해 수천 개의 회사에서 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼 입니다.
Kafka 장점
- 성능 : 엄청난 양의 실시간 데이터 스트림과 함께 작동합니다.
- 확장성 : 생산자, 프로세서, 소비자 및 커넥터의 4가지 차원 모두에서 다운 타임 없이 분산 시스템을 고도로 확장합니다.
- 내결함성 : 제로 다운 타임 및 제로 데이터 손실로 마스터 및 데이터베이스의 장애 처리가 가능합니다.
- 데이터 변환 : 생산자의 데이터 스트림을 사용하여 새로운 데이터 스트림을 유도하기 위한 규정을 제공합니다.
- 내구성 : 분산 커밋 로그를 사용하여 디스크에 지속되는 메시지를 지원 합니다.
- 복제 : 여러 가입자를 지원하기 위해 클러스터 전체에 메시지를 복제합니다.
Kinesis Data Stream
실시간으로 비디오 및 데이터 스트림을 손쉽게 수집, 처리 및 분석을 위해 Amazon 에서 제공하는 스트리밍 플랫폼 입니다.
Kinesis Data Stream 장점
- 완전 관리형 : Kinesis는 완전 관리형이며 인프라를 관리할 필요가 없습니다.
- 확장성 : 스트리밍 데이터의 양에 관계없이 처리하고 수 십만 소스의 데이터를 매우 짧은 대기 시간으로 처리합니다.
- 내구성 : Kinesis Data Streams 애플리케이션은 데이터가 추가된 후 거의 즉시 스트림의 데이터 사용을 시작할 수 있습니다.
- 탄력성 : 스트림을 확장 또는 축소하여 데이터 레코드가 만료되기 전에 손실되지 않도록 합니다.
- 내결함성 : Kinesis 클라이언트 라이브러리는 스트림의 내결함성 데이터 소비를 활성화하고 Kinesis Data Streams 애플리케이션에 대한 확장 지원을 제공합니다.
- 보안 : Kinesis Data Streams 내의 민감한 데이터에 대해 서버 측 암호화 및 AWS KMS 마스터 키를 사용하여 저장 데이터를 보호할 수 있습니다. VPC를 통해 비공개로 데이터에 액세스 가능합니다.
Apache Kafka vs AWS Kinesis Data Streams
Concepts | Apache Kafka | AWS Kinesis Data Stream |
---|---|---|
Data Storage | Partitions | Shards |
Data Ordering | In partition level | In shard level |
Data Retention | 최대 보관 기간 없음 (구성 가능) | 최대 7일 (기본 24시간) |
Data Size Per Blob | 기본 1MB (구성 가능) | 최대 1 MB |
Partition/Shard Modification | 데이터 분할 불가능 (증설만 가능) | Shard 병합 혹은 분할 가능 |
Partition/Shard Limitation | 제한 없음 | Region에 따라 차이가 있음샤드 500개 : US East (N. Virginia), US West (Oregon), EU (Ireland)샤드 200개 : 나머지 Region |
Data Replication/DR | Cluster 미러링 | 3개의 A-Z 에서 자동 |
Message Delivery Semantics | 기본 최소 한번 Delivery 보장 Kafka Streams 에서 정확히 1번 Delivery 지원 | 적어도 1번 Delvery 지원 |
Security | 클라이언트 에서 브로커로 SSL or SASL 연결 인증브로커에서 주키퍼로 SSL/TLS 데이터 암호화 | AWS KMS 를 이용해 데이터 암호화VPC를 통해 Private 엑세스 |
Monitoring | 서버에서 Yammer Metrics 을 이용해서 모니터링 | AWS CloudWatchCloudTrail |
Dependency | ZooKeeper | DynamoDB |
Cost | 설치, 설정, 구성, 관리에 많은 인적 자원이 필요 | 사용한 만큼 지불 |
간단한 비교
비교 항목 | Apache Kafka | AWS Kinesis Data Stream |
---|---|---|
소프트웨어 | 없음 | 온디맨드 또는 프로비저닝 |
인프라 | EC2 혹은 물리적 인프라 최적화 가능 | AWS 요금 기준 |
엔지니어링 | 높음 | 낮음 |
보안 | 안전하지만 수동 구성으로 사람이 실수할 여지가 있음 | 다른 AWS 제품과 유사한 보안 |
지속적인 관리 | 엔지니어링 노력 필요 | AWS에서 관리 |
데이터 보존 | 사용자 정의 | 최대 7일 |
성능 튜닝 | 특히 고가용성과 같은 기능의 경우 구성 및 수동 조정에 따라 다름 | 구성을 위한 공간은 적지만 AWS에서 어느 정도의 성능을 보장 |
결론
두가지 솔루션 모두 안정적인 실시간 데이터 스트리밍 플랫폼 입니다. Apache Kafka 는 비용, 설정을 사용자가 최적화 할 수 있다는 장점을 가지고 있으나 구성, 관리에 인적 자원이 많이 필요 하다는 단점이 있습니다. AWS Kinesis Data Stream 은 구성, 관리에 노력과 인력이 많이 필요 없다는 장점이 있지만, 커스텀 설정이나 기존 Kafka의 기능보다 제한적이고 비용을 최적화 할 수 없는 단점이 있습니다. 인프라를 관리 할 수 있는 인력이 충분 하지 않다면 AWS Kinesis Data Stream 플랫폼이 유리 할 것이고, Kafka의 기능을 많이 사용하는 서비스를 운영 한다면 Apache Kafka 를 선택하는 것이 적합할 것입니다.
참고 사이트
- https://kafka.apache.org/
- https://devidea.tistory.com/68
- https://www.softkraft.co/aws-kinesis-vs-kafka-comparison/
- http://www.itcheerup.net/2019/01/kafka-vs-kinesis/