최근 사용자 관련 이벤트를 수집하는 로직에서 문제가 보여서 해당 로직을 개선하기 위해서 방법을 찾아보니 Kinesis를 이용하는 것이 제일 좋아 보였다. 하지만 Kinesis에 관해서 잘 모르기 때문에 한번 정리해 보았다.
Kinesis 란?
실시간으로 데이터 스트림을 수집 및 처리할 수 있는 시스템이다. Kinesis에는 총 4가지의 기능이 있다. Video Stream, Data stream, Data Firehose, Data Analytics 가 있다.
Data stream
데이터를 실시간 스트림으로 받아서 수집 및 저장을 할 수 있는 서비스. Kinesis Data Analytics, spark, ec2, lambda 등의 서비스로 전송할 수 있다.
Data Firehose
데이터를 실시간 스트림으로 받아서 처리 및 전송을 할 수 있는 서비스. S3, Redshift 등의 저장소로 데이터를 전송할 수 있다.
Video Streams
비디오에 관한 데이터를 수집하여 여러 서비스로 전송할 수 있음.
Data Analytics
여러 데이터를 수집하여 분석 도구에 사용할 수 있게 한다.
Data stream vs Data Firehose
사실 이 글을 쓴 목적이다. 둘의 차이를 알 수가 없어서 정리하려고 한 글이다. 단순히 정리하면 Data stream은 말 그대로 데이터를 수집하여 손실 없이 다른 곳으로 전송하기 위한 서비스이고, Data Firehose는 데이터를 ElasticSearch, S3, Redshift 등의 저장 장치로 전송하기 위한 서비스이다. 각 서비스의 차이점은 아래에 정리해 두었다.
Kinesis Data Stream | Kinesis Data Firehose | |
관리 | 샤드에 대한 구성 필요 | 완전관리형 시스템 |
데이터 저장 | 일주일까지 저장 가능 | 데이터 저장x |
처리 | 클래식 : 200ms, 향상 | 거의 실시간 |
Kafka 와 차이점
오케이, 어쨋든 목적은 실시간 데이터 처리가 목적이고 Data stream은 데이터 전송에, Data Firehose는 데이터 저장에 목적을 둔 서비스 같다. 여기서 생각하면 실시간 데이터 처리라고 하면, Kafka가 먼저 떠오를 것이다. 여기에다 아마존은 MSK라는 서비스를 출시해서 Kafka를 아마존 관리형 버전으로 운영중이다. 이것에 대한 정리도 해봐야 할 것 같다.
Kafka
카프카는 메시지 스트림 서비스이며, 이벤트는 각 토픽에 쌓이게 된다. 토픽은 여러개의 브로커에 분산되어 저장하며, 분산된 토픽은 파티션 이라고 한다.
Kinesis
키네시스는 데이터 스트리밍 서비스이다. 데이터 처리는 샤드라는 단위에서 시작되며, 각각의 샤드는 병렬로 연결된 ec2 인스턴스에서 데이터의 소비자한테 데이터를 전달한다.
그니까 결론은, 둘다 비슷한 서비스이다. 스트리밍 작업에 대해서 데이터를 적절히 전송하거나 저장할 수 있는 서비스이다. 그렇다면 이 둘의 차이점은 무엇인가? 바로 관리형 서비스의 차이이다.
kinesis는 아마존 자체적으로 개발한 서비스임과 동시에 고가용성을 보장하는 서비스이므로, 따로 인프라 관리자가 없으면 kinesis를 사용해서 시간을 줄일 수 있다. 하지만 kafka는 사용자가 직접 관리해야 하는 불편함이 있다. 대용량 데이터에 대해서는 kafka가 더 빠르다고는 하나, 대부분의 경우에서는 속도는 비슷하다고 한다. 이에 대해서 간단히 표로 정리해 보았다.
Kafka | Kinesis | |
소프트웨어 비용 | 오픈소스 (비용없음) | 온디맨드 OR 프로비저닝 |
엔지니어링 공수 | 높음 | 낮음 |
데이터 보존 | 사용자 정의 | 최대 일주일 |
데이터 처리 속도 | 약간 빠름 | 빠름 |
세부설정 | 수동으로 일일이 조작 가능 | 아마존에서 대부분 관리 |
위에서 정리한 내용을 통해서 데이터 파이프라인을 구축해야겠다.
참고자료
https://www.upsolver.com/blog/comparing-apache-kafka-amazon-kinesis
https://docs.aws.amazon.com/ko_kr/kinesis/index.html
'서버 인프라 > Aws' 카테고리의 다른 글
이벤트 데이터 파이프라인 제작하기 (0) | 2022.09.07 |
---|---|
AWS Chatbot으로 서버 상태 모니터링하기 (0) | 2022.09.05 |
AWS Lambda에서 고정 IP 사용하기 (0) | 2022.08.04 |
서버 상태 Lambda와 Slack으로 실시간 확인하기 (6) | 2022.07.27 |
AWS Amplify를 이용하여 기존의 react app 배포하기 (0) | 2022.07.13 |