[AWS] 메세지 브로커를 이용한 비동기식 통신

xgro·2022년 6월 20일
0

AWS

목록 보기
5/18

[C817] 메시지 서비스로는 대표적으로 Apache Kafka와 Amazon SQS, Amazon Kinesis가 있습니다. 각각은 어떤 차이가 있나요?

📌 정리

Kafka

  • Kafka는 상당히 확장 가능한 시스템이며 일괄 처리로 메시지를 보내려는 경우(좋은 메시지 처리량을 갖기 위해) 높은 워크로드에 적합합니다.
  • Kafka 주제는 하나의 소비자 그룹에 있는 여러 소비자가 완전히 병렬로 읽을 수 있는 몇 개의 파티션으로 구성되어 있습니다.
  • 매우 좋은 성능을 제공합니다.
  • 예를 들어, 로드가 높은 스트리밍 시스템을 구축해야 하는 경우 Kafka가 정말 적합하다.

SQS

  • 개별 메시지 별로 확인/실패가 필요한 경우
  • 소비자의 처리량을 동적으로 증가하고자 할 경우(Kinesis 는 샤드를 동적으로 추가하는것이 까다롭기 때문에 적합하지 않음)
  • SQS는 Amazon 관리형 서비스입니다(따라서 스스로 인프라를 지원할 필요가 없습니다.).
  • SQS는 일부 클라이언트의 메시지(이벤트)를 잡아야 할 때 이벤트에 더 적합하며 이 메시지는 대기열에서 자동으로 표시됩니다.
  • SQS는 Kafka만큼 빠르지 않으므로 작업 부하가 큰 워크로드에 적합하지 않습니다.
  • 초당 이벤트 수가 많지 않은 이벤트에 훨씬 더 적합합니다.
  • 예를 들어 일부 S3 파일 업로드에 반응하려는 경우 (이 파일의 일부 처리를 시작하기 위해) SQS는 매우 좋습니다.

KDS

  • 처리된 메시지를 다른 application이 다시 처리해야하는 경우 사용하기 좋다.
  • 대규모 데이터의 실시간 처리를 위한 스트리밍 데이터 수집 서비스이다.
  • 하나의 샤드가 마치 하나의 SQS와 같이 일을 한다.
  • Data Stream 내의 Shard를 늘려서 처리량 확장 가능하다.
  • 기본적으로 메시지는 24시간 보관하며, 최대 7일까지 보관 한다.
  • Stream당 Shard 수 제한은 없음, 하지만 리전당 Shard의 최대 개수제한이 있다.(AWS 요청시 확장 가능)
  • Shard당 1MiB/s 또는 1000개/s 쓰기 가능
  • Shard당 초당 5회의 GetRecords 호출 가능, 각각의 GetRecords는 10MiB/s 또는 10000개 읽기 가능, 최대 2MiB/s 읽기 가능하므로 GetRecords 10MiB 읽을 시 5초간 활성

📌 서비스 특징

👉 Apache Kafka

Apache Kafka는 Linkedin에서 개발하고 Apache Software Foundation에 기부하고 Scala 및 Java로 작성된 오픈 소스 스트림 처리 소프트웨어 플랫폼입니다.

API를 통해 생산자는 데이터 스트림을 주제에 게시할 수 있습니다.

주제는 각 파티션이 정렬되고 변경할 수 없는 분할된 레코드 로그입니다.

소비자는 주제를 구독할 수 있습니다.

Kafka는 클러스터 노드에 분할된 파티션이 있는 브로커 클러스터에서 실행할 수 있습니다.

Apache Kafka is an open-source stream-processing software platform developed by Linkedin, donated to Apache Software Foundation, and written in Scala and Java. APIs allow producers to publish data streams to topics. A topic is a partitioned log of records with each partition being ordered and immutable. Consumers can subscribe to topics. Kafka can run on a cluster of brokers with partitions split across cluster nodes.

Kafka에는 5가지 핵심 API가 있습니다.

  • Producer API를 사용하면 애플리케이션에서 Kafka 클러스터의 Topic에 데이터 스트림을 보낼 수 있습니다.

    The Producer API allows applications to send streams of data to topics in the Kafka cluster.

  • 소비자 API를 사용하면 애플리케이션이 Kafka 클러스터의 Topic에서 데이터 스트림을 읽을 수 있습니다.

    The Consumer API allows applications to read streams of data from topics in the Kafka cluster.

  • Streams API를 사용하면 데이터 스트림을 입력 Topic에서 출력 Topic로 변환할 수 있습니다.

    The Streams API allows transforming streams of data from input topics to output topics.

  • Connect API를 사용하면 일부 소스 시스템 또는 애플리케이션에서 Kafka로 지속적으로 가져오거나 Kafka에서 일부 싱크 시스템 또는 애플리케이션으로 푸시하는 커넥터를 구현할 수 있습니다.

    The Connect API allows implementing connectors that continually pull from some source system or application into Kafka or push from Kafka into some sink system or application.

  • AdminClient API를 사용하면 Topic, 브로커, 기타 Kafka 개체를 관리하고 검사할 수 있습니다.

    The AdminClient API allows managing and inspecting topics, brokers, and other Kafka objects.

👉 AWS Kinesis Data Stream

✅ KDS 장점은?

  • Fully managed

    Kinesis는 완전 관리형이며 인프라를 관리할 필요 없이 스트리밍 애플리케이션을 실행합니다.

  • Scalability

    모든 양의 스트리밍 데이터를 처리하고 수십만 개의 소스에서 매우 짧은 대기 시간으로 데이터를 처리합니다.

  • Durability

    KDS 응용 프로그램은 데이터가 추가된 직후에 스트림에서 데이터 사용을 시작할 수 있습니다.

  • Elasticity

    스트림을 확장 또는 축소하여 데이터 레코드가 만료되기 전에 손실되지 않도록 합니다.

  • Fault tolerance

    Kinesis 클라이언트 라이브러리는 스트림에서 데이터의 내결함성 소비를 활성화하고 KDS 애플리케이션에 대한 확장 지원을 제공합니다.

  • Security

    KDS 내의 민감한 데이터에 대해 서버 측 암호화 및 AWS KMS 마스터 키를 사용하여 저장 데이터를 보호할 수 있습니다.

    Amazon Virtual Private Cloud(VPC)를 통해 비공개로 데이터에 액세스 할 수 있다.

👉 Amazon SQS

✅ SQS 장점은?

  • 적은 오버헤드

    이미 Amazon AWS를 사용하여 운영 및 운영을 지원하는 인프라를 관리하고 있다면 SQS는 선불 비용이 없고 타사 소프트웨어를 구입하거나 구성할 필요가 없는 고가용성 서비스를 약속합니다.

    SQS 대기열은 동적으로 생성되며 필요에 따라 자동으로 확장 또는 축소됩니다.

  • 신뢰성있는 전달

    하나의 서비스를 사용할 수 없어 메시지 손실이나 프로세스 중단에 대한 두려움 없이 SQS를 사용하여 원하는 양의 데이터를 전송할 수 있습니다.

    SQS는 응용 프로그램의 구성 요소를 분리하여 서로 독립적으로 실행 및 실패할 수 있도록 하여 시스템의 전반적인 내결함성을 향상시킵니다..

  • 민감한 데이터의 보안

    Amazon SQS를 사용하면 서버 측 암호화를 통해 중요한 데이터를 안전하게 교환할 수 있습니다.

    SQS는 또한 AWS의 Key Management Service와 통합되므로 암호화 키를 쉽고 중앙에서 관리할 수 있습니다.

  • 탄력적이고 비용 효율적

    Amazon이 자동으로 처리하므로 리소스를 미리 계획하거나 프로비저닝할 필요가 없습니다.

✅ SQS의 단점은?

대규모로 운영할 때의 높은 비용 외에 SQS에는 Lambda 함수를 트리거하는 메시지 기능과 같은 많은 기본 기능이 부족합니다. MQ 성능에 대한 제어가 감소하고 메시지 자체에 대한 제어가 부족하면 SQS를 사용할 때 방해가 될 수 있습니다.

✅ 레퍼런스 참조

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글