MSK (Amazon Managed Streaming for Apache Kafka) vs EC2 직접 설치 비교
이번 글에서는 Amazon에서 제공하는 카프카 관리 서비스인 MSK와 EC2에서 직접 카프카를 설치했을 때의 장단점을 평가한다. 비교를 하게 된 목적은 AWS에서 데이터 처리를 위해 카프카가 필요할 때, 관리형 서비스인 MSK를 쓰면 편리하겠지만 가성비 관점도 포함하여 서비스 선택 시 도움이 되었으면 해서였다.
먼저 MSK를 생성하면 어떤 구조로 이루어져 있는지 보고 동일한 고가용성(HA)으로 EC2에 직접 카프카를 설치하는 방법을 소개한다.
그리고 구축한 MSK, EC2에서 동일한 트래픽의 데이터를 처리할 때 비용 계산을 한다. 마지막으로 운영 효율성 측면에서 비교한다.
1. 아키텍처
1.1 MSK
먼저 MSK의 아키텍처를 보자. MSK도 결국은 카프카이기 때문에 AWS 상에서의 네트워크 구조만 보면 된다. AWS는 리젼, 가용영역으로 크게 구분하고 고가용성을 위해 멀티 가용영역을 기반으로 한 아키텍처를 추천한다. 아래 [그림 1]은 MSK 문서에 포함된 인데, MSK의 네티워크 구조를 이해하는데 도움이 된다.
그림을 보면 크게 MSK, Client VPC로 나누어져 있고, MSK VPC는 3개의 서브넷으로 구성되었다. 그리고 각 서브넷 안에 하나씩 브로커가 위치한다. AWS는 동일한 VPC라도 가용영역 별로 서브넷을 분리한다. 서브넷 3개는 별도의 가용영역으로 구성되었다고 이해해도 된다. 참고로 MSK를 생성할 때, 가용영역의 수를 입력받을 수 있다. 주의할 점은 전체 생성할 브로커 수로 입력받지 않고 가용영역 당 브로커 수로 생성된다. (이 부분은 운영 측면에서 비교할 때 차이점을 더 설명하겠다)
MSK 이용 시 가장 큰 장점 중 하나는 주키퍼(zookeeper) 지원에 있다. MSK는 자체적으로 관리하는 주키퍼를 사용한다. 그리고 무엇보다 주키퍼 비용이 발생하지 않는다. EC2에 직접 구축할 때는 주키퍼도 관리해야 하는 부담이 존재한다.
1.2 EC2 직접 설치
MSK에서 가용영역 3개에 설치한 것과 동일하게 EC2에 직접 설치하면 아래 [그림 2]와 같이 구성된다. 대신 직접 관리해야 하는 주키퍼는 각 가용영역 별로 하나씩 배치했다. 참고로 3대의 주키퍼를 사용할 경우 1대의 주키퍼 장애만 허용한다. 그래서 5대가 권장사항이다.
브로커도 역시 각 가용영역 별로 1대씩 위치한다. 카프카에 접근하는 클라이언트를 ap-northeast-2a에 있다고 가정했다. 이때 클라이언트에서 다른 가용 영역의 브로커에 접근하는 화살표를 파란색으로 다르게 했는데 비용이 달라지기 때문이다. 그리고 붉은색 화살표는 데이터 복제를 표시했다(ap-northeast-2a에 파티션 리더가 있다는 가정).
EC2에 직접 설치할 때 참고할 설정을 하나 소개한다. broker.rack 이다. broker.rack을 동일 가용영역에 있는 브로커 별로 다르게 설정한다. 그럼 토픽의 복제 파티션이 여러 가용영역에 분산되어 생성된다. KIP-36: Rack aware replica assignment 문서에 설명이 되어 있으니 참고하면 좋다.
2. 비용
글의 메인 주제인 비용에 대해서 알아보자. 비용은 크게 3가지 관점으로 분류해서 계산한다. (브로커 인스턴스, 스토리지, 네트워크)
2.1 브로커 인스턴스
MSK는 m5 인스턴스를 제공한다. 가장 범용적인 인스턴스 타입이다. 하지만 Confluent에서 추천하는 인스턴스는 r5 타입니다. r5는 메모리 최적화 인스턴스이다. 카프카는 CPU는 많이 사용하지 않고, 메모리가 성능에 더 큰 영향을 미친다. 아래는 MSK와 EC2의 인스턴스 비용을 비교한 표이다(ap-northeast-2 기준, 시간당 금액).
Type | Spec | MSK Price | EC2 Price | Content |
m5.large | vCPU: 2, memory: 8 GiB | 0.258 USD | 0.118 USD | Confluent zookeeper 추천 장비 |
m5.xlarge | vCPU: 4, memory: 16 GiB | 0.516 USD | 0.236 USD | |
m5.2xlarge | vCPU: 8, memory: 32 GiB | 1.033 USD | 0.472 USD | |
m5.4xlarge | vCPU: 16, memory: 64 GiB | 2.065 USD | 0.944 USD | |
r5.large | vCPU: 2, memory: 16 GiB | X | 0.152 USD | |
r5.xlarge | vCPU: 4, memory: 32 GiB | X | 0.304 USD | Confluent broker 추천 장비 |
동일 타입의 MSK의 인스턴스 비용이 2배 비싸다. confluent 추천 장비인 r5.xlarge와 동일한 메모리와 동일한 m5 장비를 쓸 경우 3배 이상 차이가 난다. 대신 MSK는 주키퍼 비용이 없으나 직접 설치 시에는 주키퍼 서버가 고정 비용으로 발생한다. 추천 장비는 m5.large이다.
인스턴스 비용만 비교하면 다음과 같다.
- MSK (m5.2xlarge)
- 1.033 * 3(대) = 3.099 USD/hour
- EC2 (r5.xlarge)
- 0.304 * 3(대) + 0.118 * 3(대) = 1.28 USD/hour
- 주키퍼 서버의 경우 고정비용이라서 스토리지 (50G) 비용까지 포함했다.
2.2 스토리지 비용
MSK는 gp2 타입의 EBS로 제공된다. 그래서 EC2에서 gp2 타입을 쓸 경우 비용이 동일하다.
GB당 월 0.114 USD이다.
그런데 최근에 gp3 타입의 EBS가 추가됐다. 성능은 향상되고 더 저렴해졌다.
MSK는 아직 지원하지 않는 것으로 보이나 추후에는 지원하지 않을까 싶다.
GB당 월 0.0912 USD이다. 성능 높이면 비용이 추가되지만 그래도 gp2 타입보다는 싸다.
gp3에 대해서는 다음 블로그에서 참고하면 도움이 된다. (신규 발표된 EBS gp3로의 전환)
브로커 당 1.2T 기준 스토리지 비용 (hour)
- MSK (gp2) : 0.33 USD
- EC2 (gp3) : 0.26 USD
2.3 데이터 전송 요금
MSK와 EC2 사이의 데이터 전송 요금에 큰 차이점 하나가 있다. 그건 복제 비용이다.
MSK는 브로커 간의 복제 비용이 발생하지 않는다. 그리고 주키퍼와의 통신 비용도 발생하지 않는다. EC2는 복제할 브로커가 다른 가용영역에 있다면 비용이 발생한다.
주키퍼와의 데이터 통신은 크지 않지만 복제는 비용이 크다. 그래서 동일 고가용성 구성으로 여러 가용영역에 걸쳐 브로커를 구축하면 네트워크 비용은 MSK가 저렴하다. 그럼 네트워크 비용을 대략적으로 계산해보자.
가용영역 간의 데이터 전송 비용은 0.01 USD/GB이다.
replication factor가 3일 경우 트래픽의 2배 수로 복제 네트워크 비용이 발생한다(복제 파티션이 각 가용영역 당 1개씩).
그리고 클라이언트가 다른 가용 영역에서 데이터를 생산/소비할 때 비용이 발생한다.
1MB/sec의 트래픽 발생한다고 가정.
- MSK : 0.05 (데이터 전송) USD
- EC2 : 0.05 (데이터 전송) + 0.07 (복제) = 0.12 USD
MSK와 EC2 비용을 차이는 다음과 같이 추정할 수 있다. 비싼 MSK 인스턴스 비용보다 (복제 네트워크 + 주키퍼) 비용이 작다면 EC2가 비용적으로 유리하다. 그리고 사양이 좋은 인스턴스를 쓸수록 MSK가 비싸지기 때문에 차이가 벌어진다. 또한 주의할 점은 RI를 EC2에 적용한다면 차이가 더 벌어진다. 차이점을 한눈에 살펴보도록 특정 트래픽 가정하에 비용을 추산해 비교해 보자.
2.4 요금 예측
트래픽을 증가하면서 비용 차이를 계산해 보았다. MSK를 도입하기 전에 트래픽이 어느 정도로 발생할지 여부가 중요한 변수이다. 그리고 브로커는 3대로 했지만 복제 수와 전체 파티션 수를 고려해서 증가를 해야 한다.
트래픽 | MSK Type | EC2 Type | Broker 수 | MSK Price | EC2 Replication Price | EC2 Price | EC2 RI(1년) Price |
1MB/sec | m5.large | r5.large | 3 | $840 | $51.33 | $931 (11%) | $808 (-4%) |
1MB/sec | m5.xlarge | r5.xlarge | 3 | $1,405 | $51.33 | $1,264 (-10%) | $1,019 (-27%) |
3MB/sec | m5.xlarge | r5.xlarge | 3 | $1,954 | $153.98 | $1,916 (-2%) | $1,671 (-15%) |
5MB/sec | m5.xlarge | r5.xlarge | 3 | $2,503 | $256.64 | $2,568 (3%) | $2,323 (-7%) |
참고 - 스토리지는 gp2로 동일하게 설정.
요금을 예측할 때는 AWS에서 제공하는 비용 계산 Excel을 참고했다(링크). 직접 수식을 변경하면서 비용을 추정해보자.
3. 운영 효율성
MSK는 관리형 서비스이기 때문에 운영 효율성은 직접 EC2에 구축할 때와 비교해 많이 편리하다. 카프카 운영 인력이 없으나 AWS에 구축 후 사용해야 할 때 좋은 선택지이다. 앞서 설명한 대로 비용도 고려해서 선택하면 된다.
아래 표는 MSK와 EC2 직접 설치 시 운영상 차이점을 개인적으로 정리해 본 내용이다.
구분 | 내용 | MSK | EC2 |
편리성 | 서버 운영 | 기본적으로 Kafka 클러스터 구축 편리성이 좋다. 클러스터의 설정들은 CLI로 간편하게 변경할 수 있다. zookeeper 서버의 운영을 하지 않아도 된다. |
On Premise와 동일하다. |
네트워크 | 외부 인터넷 연결 | VPC의 가용영역별 서브넷을 선택하여 구성한다. 다만 private ip만 생긴다. On Premise 연결을 위해 VPN 설정 필요하다. 인터넷을 통한 직접 접근이 어려우므로 데이터 전송 시에 proxy(Kafka Rest Proxy)가 필요하다. |
EIP를 할당해서 외부 연결 가능. |
확장성 | 디스크 확장 | 브로커당 EBS 스토리지의 양을 늘리 수 있다. 스토리지를 줄일 수 없다. 최대용량 : 16T |
EC2 정지 없이 EBS 확장이 가능하다. 브로커 서버별로 확장이 가능해 용량을 다르게 할 수 있으나 추천하지 않음. 최대용량 : 16T |
확장성 | 브로커 확장 | 가용영역 당 브로커 수 설정. 가용영역 배수로만 브로커 추가. 가용영역별로 브로커 수를 조절할 수 없다. 장점 : 설정화면에서 브로커 수 조정만 하면 변경된다. |
가용영역 당 브로커 수를 자유롭게 조절할 수 있다. Replication에 영향을 미치지 않을 수 있다면 유연하게 조절할 수 있다. 증설을 위해서 EC2를 추가 설정해야 한다. |
모니터링 | JMX 지표 모니터링 | CloudWatch를 통한 기본적인 지표를 제공한다. 세부적인 지표인 PER_BROKER, PER_TOPIC_PER_BROKER 사용 시 추가 비용 발생한다. 설정만 추가하면 프로메테우스 exporter가 띄워진다. 유료 서비스로 DATADOG, LENSES 등을 사용할 수 있다. |
EC2 자체에 대한 모니터링은 CloudWatch On Premise처럼 JMX로 metric 수집한다. (프로메테우스 적용 등) |
보안 | TLS | 암호화에 사용하는 인증서를 자동으로 갱신해 준다. KMS (AWS Key Management Service)와 통합하여 관리형 고객 마스터 키 (CMK) 자동 생성하고 관리한다. |
TLS를 위해 인증서를 발급하고 설정을 추가해야 한다. AWS Certificate Manager를 통한 사설 인증서를 관리할 수 있다. 인증서의 교체를 위한 운영 비용이 매우 크다. (사설 인증서) |
보안 | 인증 | ACM (AWS certification manager)를 통해 생성한 인증서를 사용해서 인증을 적용할 수 있다. SASL/SCRAM AWS Secrets Manager와 통합되어 계정이 관리된다. AWS Secrets Manager도 비용이 발생한다. |
On Premise와 동일하다. |
확장성 | 제한사항 | 계정당 최대 90개 브로커, 클러스터당 최대 30개의 브로커 생성 가능. | 제한 없음. |
운영 | 업그레이드 | Management 콘솔 및 CLI를 활용하여 손쉽게 브로커 업그레이드 가능. | On Premise와 동일한 복잡한 과정이 필요함. |
4. 결론
AWS 카프카 관리형 서비스인 MSK와 EC2에 직접 카프카 설치 시 비용과 운영 효율성 측면에서 비교해보았다. 관리형 서비스의 존재로 개발 편의성을 높이는 선택지가 추가되었다. 하지만 클라우드는 사용에 따른 비용도 고려해서 선택해야 한다. 필자의 글이 MSK를 선택할 때 도움이 되었으면 한다.
참고 문서
- Amazon MSK이란 무엇입니까?
- KIP-36: Rack aware replica assignment
- 신규 발표된 EBS gp3로의 전환
- MSK_Sizing_Pricing.xlsx