시나리오 5: Apache Kafka를 사용한 실시간 원격 측정 데이터 모니터링
ABC1Cabs는 온라인 택시 예약 서비스 회사입니다. 모든 택시에는 차량에서 원격 측정 데이터를 수집하는 IoT 디바이스가 있습니다. 현재 ABC1Cabs는 실시간 이벤트 사용을 위해 설계된 Apache Kafka 클러스터를 실행하고 있으며 시스템 상태 지표를 수집하고, 활동을 추적하며, 온프레미스 Hadoop 클러스터에 구축된 Apache Spark Streaming 플랫폼에 데이터를 공급합니다.
ABC1Cabs는 비즈니스 지표, 디버깅, 알림 및 기타 대시보드 생성을 위해 OpenSearch Dashboards를 사용합니다. 이 회사는 Amazon MSK, Spark Streaming을 지원하는 Amazon EMR 및 OpenSearch Dashboards가 있는 OpenSearch Service에 관심이 있습니다. 이 회사의 요구 사항은 Apache Kafka 및 Hadoop 클러스터 유지 관리 오버헤드를 줄이는 동시에 익숙한 오픈 소스 소프트웨어와 API를 사용하여 데이터 파이프라인을 오케스트레이션하는 것입니다. 다음 아키텍처 다이어그램은 AWS 기반 솔루션을 보여 줍니다.

Amazon MSK, Amazon EMR 기반 Apache Spark Streaming을 사용한 스트림 처리 및 OpenSearch Dashboards가 있는 Amazon OpenSearch Service를 통한 실시간 처리
택시 IoT 디바이스는 원격 측정 데이터를 수집하여 소스 허브로 전송합니다. 소스 허브는 Amazon MSK에 실시간으로 데이터를 전송하도록 구성되어 있습니다. Amazon MSK는 Apache Kafka 생산자 라이브러리 API를 사용하여 데이터를 Amazon EMR 클러스터로 스트리밍하도록 구성됩니다. Amazon EMR 클러스터에는 데이터 스트림을 사용하고 처리할 수 있도록 Kafka 클라이언트와 Spark Streaming이 설치되어 있습니다.
Spark Streaming에는 Elasticsearch의 정의된 인덱스에 직접 데이터를 쓸 수 있는 싱크 커넥터가 있습니다. OpenSearch Dashboards가 있는 Elasticsearch 클러스터를 지표 및 대시보드에 사용할 수 있습니다. Amazon MSK, Spark Streaming을 지원하는 Amazon EMR 및 OpenSearch Dashboards가 있는 OpenSearch Service는 모두 관리형 서비스로, AWS가 다양한 클러스터의 인프라 관리라는 획일적인 부담을 덜어주므로 몇 번의 클릭만으로 친숙한 오픈 소스 소프트웨어를 사용하여 애플리케이션을 구축할 수 있습니다. 다음 단원에서는 이러한 서비스에 대해 자세히 살펴보겠습니다.
Amazon Managed Streaming for Apache Kafka(Amazon MSK)
Apache Kafka는 고객이 클릭스트림 이벤트, 트랜잭션, IoT 이벤트, 애플리케이션 및 시스템 로그와 같은 스트리밍 데이터를 캡처할 수 있도록 지원하는 오픈 소스 플랫폼입니다. 이 정보를 사용하여 실시간 분석을 수행하고 지속적인 변환을 실행하며 이 데이터를 데이터 레이크 및 데이터베이스에 실시간으로 배포하는 애플리케이션을 개발할 수 있습니다.
Kafka를 스트리밍 데이터 스토어로 사용하여 생산자와 소비자로부터 애플리케이션을 분리하고 두 구성 요소 간에 안정적으로 데이터를 전송할 수 있습니다. Kafka는 널리 사용되는 엔터프라이즈 데이터 스트리밍 및 메시징 플랫폼이지만 프로덕션 환경에서 설정, 크기 조정 및 관리하기가 어려울 수 있습니다.
Amazon MSK는 이러한 관리 작업을 처리하고 고가용성 및 보안을 위한 모범 사례에 따라 Apache Zookeeper와 함께 Kafka를 쉽게 설정, 구성 및 실행할 수 있도록 지원합니다. 여전히 Kafka의 제어 영역 운영 및 데이터 영역 운영을 사용하여 데이터 생산 및 소비를 관리할 수 있습니다.
Amazon MSK는 오픈 소스 Apache Kafka를 실행하고 관리하기 때문에 고객은 애플리케이션 코드를 변경할 필요 없이 AWS에서 기존 Apache Kafka 애플리케이션을 손쉽게 마이그레이션하고 실행할 수 있습니다.
크기 조정
Amazon MSK는 사용자가 클러스터를 실행하는 동안 적극적으로 크기를 조정할 수 있도록 크기 조정 작업을 제공합니다. Amazon MSK 클러스터를 생성하는 경우 클러스터 시작 시 브로커의 인스턴스 유형을 지정할 수 있습니다. Amazon MSK 클러스터 내에서 몇 개의 브로커로 시작할 수 있습니다. 그런 다음 AWS Management Console 또는 AWS CLI를 사용하여 클러스터당 수백 개의 브로커로 확장할 수 있습니다.
Apache Kafka 브로커의 크기 또는 패밀리를 변경하여 클러스터 크기를 조정할 수도 있습니다. 브로커 크기 또는 패밀리를 변경하면 워크로드의 변화에 맞게 Amazon MSK 클러스터의 컴퓨팅 용량을 유연하게 조정할 수 있습니다. Amazon MSK 크기 조정 및 요금 스프레드시트
Amazon MSK 클러스터를 생성한 후 스토리지를 줄이는 경우를 제외하고 브로커당 EBS 스토리지의 양을 늘릴 수 있습니다. 스토리지 볼륨은 이 확장 작업 중에 계속 사용할 수 있습니다. 자동 크기 조정과 수동 크기 조정이라는 두 가지 유형의 크기 조정 작업을 제공합니다.
Amazon MSK는 애플리케이션 자동 크기 조정 정책을 사용하여 사용량 증가에 대응하여 클러스터 스토리지의 자동 확장을 지원합니다. 자동 크기 조정 정책은 대상 디스크 사용률과 최대 크기 조정 용량을 설정합니다.
스토리지 사용률 임계값은 Amazon MSK가 자동 크기 조정 작업을 트리거하는 데 도움이 됩니다. 수동 크기 조정을 사용하여 스토리지를 늘리려면 클러스터가 ACTIVE
상태가 될 때까지 기다립니다. 스토리지 크기 조정의 휴지 기간은 이벤트 간에 최소 6시간입니다. 작업을 통해 추가 스토리지를 즉시 사용할 수 있지만 서비스는 클러스터에서 최대 24시간 이상 걸릴 수 있는 최적화를 수행합니다.
이러한 최적화 시간은 스토리지 크기에 비례합니다. 또한 AWS 리전 내에서 다중 가용 영역 복제를 제공하여 고가용성을 제공합니다.
구성
Amazon MSK는 브로커, 주제 및 Apache Zookeeper 노드의 기본 구성을 제공합니다. 또한 사용자 정의 구성을 생성하고, 이를 사용해 새 Amazon MSK 클러스터를 생성하거나 기존 클러스터를 업데이트할 수 있습니다. 사용자 정의 Amazon MSK 구성을 지정하지 않고 MSK 클러스터를 생성하면 Amazon MSK가 기본 구성을 생성하여 사용합니다. 이러한 기본값 목록은 Apache Kafka Configuration(Apache Kafka 구성)을 참조하세요.
모니터링을 위해 Amazon MSK는 Apache Kafka 지표를 수집하여 Amazon CloudWatch로 전송하고 사용자가 확인할 수 있습니다. MSK 클러스터에 대해 구성한 지표는 자동으로 수집되어 CloudWatch에 푸시됩니다. 소비자 지연을 모니터링하면 주제에서 사용 가능한 최신 데이터를 따라가지 못하는 느리거나 멈춘 소비자를 식별할 수 있습니다. 그런 다음 필요한 경우 해당 소비자에 대해 크기 조정 또는 재부팅과 같은 수정 조치를 취할 수 있습니다.
Amazon MSK로 마이그레이션
다음 방법 중 하나를 사용하여 온프레미스에서 Amazon MSK로 마이그레이션할 수 있습니다.
-
MirrorMaker2.0 - MirrorMaker2.0(MM2)은 Apache Kafka Connect 프레임워크를 기반으로 하는 다중 클러스터 데이터 복제 엔진입니다. MM2는 Apache Kafka 소스 커넥터와 싱크 커넥터의 조합입니다. MM2 클러스터 하나를 사용하여 여러 클러스터 간에 데이터를 마이그레이션할 수 있습니다. MM2는 새 주제와 파티션을 자동으로 검색하는 동시에 주제 구성이 클러스터 간에 동기화되도록 합니다. MM2는 마이그레이션 ACL, 주제 구성 및 오프셋 변환을 지원합니다. 마이그레이션과 관련된 자세한 내용은 Migrating Clusters Using Apache Kafka's MirrorMaker(Apache Kafka의 MirrorMaker를 사용하여 클러스터 마이그레이션)를 참조하세요. MM2는 주제 구성 복제 및 오프셋 변환과 관련된 사용 사례에 자동으로 사용됩니다.
-
Apache Flink - MM2는 최소 한 번 의미 체계를 지원합니다. 레코드는 대상에 복제될 수 있으며 소비자는 중복 레코드를 처리하기 위해 멱등성이 있어야 합니다. 정확히 한 번 시나리오에서는 고객이 Apache Flink를 사용할 수 있는 의미 체계가 필요합니다. MM2는 정확히 한 번 의미 체계를 달성할 수 있는 대안을 제공합니다.
Apache Flink는 대상 클러스터에 제출하기 전에 데이터에 매핑하거나 변환하는 작업이 필요한 시나리오에도 사용할 수 있습니다. Apache Flink는 하나의 Apache Kafka 클러스터에서 데이터를 읽고 다른 클러스터에 쓸 수 있는 소스 및 싱크와 함께 Apache Kafka용 커넥터를 제공합니다. Apache Flink는 Amazon EMR 클러스터를 시작하거나 Amazon Kinesis Data Analytics를 통해 Apache Flink를 애플리케이션으로 실행하여 AWS에서 실행할 수 있습니다.
-
AWS Lambda - AWS Lambda
에 대한 이벤트 소스로 Apache Kafka를 지원하므로 이제 고객이 Lambda 함수를 통해 주제의 메시지를 사용할 수 있습니다. AWS Lambda 서비스는 이벤트 소스에서 새 레코드나 메시지를 내부적으로 폴링한 다음 대상 Lambda 함수를 동기적으로 호출하여 이러한 메시지를 사용합니다. Lambda는 배치로 메시지를 읽고 처리를 위해 이벤트 페이로드의 함수에 메시지 배치를 제공합니다. 그런 다음 사용된 메시지를 대상 Amazon MSK 클러스터로 변환하거나 직접 쓸 수 있습니다.
Spark Streaming을 지원하는 Amazon EMR
Amazon EMR
Amazon EMR은 Spark의 기능을 제공하며 Spark Streaming을 시작하여 Kafka의 데이터를 사용할 수 있습니다. Spark Streaming은 라이브 데이터 스트림의 확장 가능하고 처리량이 높으며 내결함성을 갖춘 스트림 처리를 가능하게 하는 핵심 Spark API의 확장형입니다.
AWS Command Line Interface
처리된 데이터는 파일 시스템, 데이터베이스 및 라이브 대시보드로 푸시할 수 있습니다.

Apache Kafka에서 Hadoop 에코시스템으로의 실시간 스트리밍 흐름
기본적으로 Apache Spark Streaming에는 마이크로 배치 실행 모델이 있습니다. 그러나 Spark 2.3이 출시된 이후 Apache는 연속 처리라는 새로운 낮은 대기 시간 처리 모드를 도입했습니다. 이 모드는 최소 한 번 보장으로 1밀리초의 낮은 엔드 투 엔드 대기 시간을 달성할 수 있습니다.
쿼리에서 DataSet/DataFrame 작업을 변경하지 않고도 애플리케이션 요구 사항에 따라 모드를 선택할 수 있습니다. Spark Streaming의 몇 가지 이점은 다음과 같습니다.
-
Apache Spark의 언어 통합 API
를 스트림 처리에 제공하므로 배치 작업을 작성하는 것과 동일한 방식으로 스트리밍 작업을 작성할 수 있습니다. -
Java, Scala, Python을 지원합니다.
-
사용자가 추가 코드를 작성할 필요 없이 손실된 작업과 작업자 상태(예: 슬라이딩 창)를 모두 복구할 수 있습니다.
-
Spark에서 Spark Streaming을 실행하면 배치 처리에 동일한 코드를 재사용하거나, 기록 데이터에 스트림을 결합하거나, 스트림 상태에 대해 임시 쿼리를 실행하고, 분석뿐만 아니라 강력한 대화형 애플리케이션을 구축할 수 있습니다.
-
Spark Streaming으로 데이터 스트림을 처리한 후 OpenSearch Sink Connector를 사용하여 OpenSearch Service 클러스터에 데이터를 쓸 수 있으며 OpenSearch Dashboards를 소비 계층으로 사용할 수 있습니다.
OpenSearch Dashboards가 있는 Amazon OpenSearch Service
OpenSearch Service는 AWS 클라우드에서 OpenSearch 클러스터를 쉽게 배포, 운영 및 크기 조정할 수 있는 관리형 서비스입니다. OpenSearch는 로그 분석, 실시간 애플리케이션 모니터링, 클릭스트림 분석 같은 사용 사례를 위한 인기 있는 오픈 소스 검색 및 분석 엔진입니다.
OpenSearch Dashboards
OpenSearch Dashboards는 널리 사용되는 분석 및 검색 엔진인 OpenSearch
요약
AWS에서 관리형 서비스로 제공되는 Apache Kafka를 사용하면 브로커 간의 조정을 관리하는 대신 사용에 집중할 수 있습니다. 이를 위해서는 일반적으로 Apache Kafka에 대한 깊은 이해가 필요합니다. 고가용성, 브로커 확장성, 세분화된 액세스 제어와 같은 기능은 Amazon MSK 플랫폼에서 관리합니다.
ABC1Cabs는 이러한 서비스를 활용하여 인프라 관리 전문 지식 없이도 프로덕션 애플리케이션을 구축했습니다. Amazon MSK의 데이터를 소비하고 시각화 계층으로 전파하기 위해 처리 계층에 집중할 수 있었습니다.
Amazon EMR의 Spark Streaming은 스트리밍 데이터를 실시간으로 분석하고 시각화 계층에 대한 Amazon OpenSearch Service에 OpenSearch Dashboards