First Look: Amazon MSK

First Look: Amazon MSK

Distributed Log란 무엇이며, 어떠한 대안들이 있으며, 특히 Amazon MSK는 어떠한가?
2019년 1월 10일, Kurly 발표.

Comparing various choices to Distributed Log technologies.
Presented in Kurly (www.kurly.com), January 10th 2019.

Slides: Korean. Presentation: Korean.

143f88e8c2b2a1123e87c81d9bbefa02?s=128

Lee Dongjin

January 10, 2019
Tweet

Transcript

  1. First Look: Amazon MSK 이동진 | dongjin@apache.org

  2. • Re:invent 2018 이후 자주 나오는 이야기 ◦ “AWS MSK

    어떤가? 쓸 만 한가?” ◦ “Kafka가 좋다는데 왜 그렇지?” ◦ “Kinesis 버리고 옮겨가야 하나?” • 하지만 본질적으로는… ◦ “이 기술들이 서로 어떻게 다른가?” 오늘의 주제: AWS MSK Kinesis MSK Kafka (“구체적으로 뭐가 다르지?”)
  3. … 생각 이상으로 복잡한 이야기 Kinesis Pub/Sub Event Hub MSK

    CC HDInsight Kafka Cloud Distributed Log Open Source Message Broker ActiveMQ ZeroMQ RabbitMQ ...
  4. 결론부터 말씀드리자면... • Kafka는 대세가 맞습니다. ◦ 믿으실지는 모르겠지만... •

    하지만 굳이 Kafka를 쓰실 필요는 없습니다. ◦ On-premise Kafka: 쓰지 마. ◦ Amazon Kinesis, Google Pub/Sub, ...: 어지간해서는 그냥 이거 써도 상관 없음. • MSK 제대로 쓰려면 거의 1년은 기다려야 할 겁니다. (중요) ◦ 다른 걸 쓰는 게 더 나을 수도 있습니다. (역시 중요)
  5. Message Broker vs. Distributed Log (1) • Message Broker ◦

    Process 간 메시지 교환 • Distributed Log ◦ 변경 사항 누적 및 처리 Process (Sender) Process (Receiver) Broker Process (Sender) Process (Receiver) Broker Log Broker
  6. Message Broker vs. Distributed Log (2) Message Broker Distributed Log

    목적 Message 교환 변경 사항 누적/처리 설계 사상 flexibility/configurable delivery guarantee persistency/scalability/thro ughput 구현체 ActiveMQ, RabbitMQ, ... Kafka 관련 서비스 AWS SQS, GCP Task Queue, Azure Service Bus AWS Kinesis, GCP Pub/Sub, Azure Event Hubs
  7. Managed Service vs. Open Source (Kafka) (1) • 2013.11 -

    Kafka 0.8 released. • 2013.12 - AWS Kinesis released. • 2014.06 - GCP Pub/Sub released. • 2014.11 - Azure Event Hub released. • 2015.11 - Kafka 0.9.0 released. (Security Feature, Kafka Connect) • 2016.05 - Kafka 0.10.0 released. (Kafka Streams) • 2017.06 - Kafka 0.11.0 released. (Exactly-once Semantic) 2013~2014: 비슷비슷, 고만고만. 2015~2017: Kafka 고유의 생태계 형성.
  8. Managed Service vs. Open Source (Kafka) (2) • 사고 실험

    ◦ 수집된 log의 일부를 지워야 한다면? ◦ 시간의 흐름에 따라 변하는 record schema에 맞춰서 stream을 읽거나 쓰려면? ◦ 수집되고 있는 record를 실시간으로 처리하려면? ◦ Stream의 내용을 microservice에서 가져다 쓰려면? ◦ Storage의 변경 사항을 event stream으로 바꾸거나, 반대로 event stream의 내용을 storage에 반영하려면?
  9. Managed Service vs. Open Source (Kafka) (2) • 해답 ◦

    수집된 log의 일부를 지워야 한다면? ▪ Log Retention Policy ◦ 시간의 흐름에 따라 변하는 record schema에 맞춰서 stream을 읽거나 쓰려면? ▪ Schema Registry ◦ 수집되고 있는 record를 실시간으로 처리하려면? ◦ Stream의 내용을 microservice에서 가져다 쓰려면? ▪ Kafka Streams (Interactive Query) ◦ Storage의 변경 사항을 event stream으로 바꾸거나, 반대로 event stream의 내용을 storage에 반영하려면? ▪ Kafka Connect
  10. Managed Service vs. Open Source (Kafka) (4) Kinesis Pub/Sub Event

    Hub Kafka Persistency Policy Coarse Coarse Coarse Fine Streaming Support Amazon Kinesis Analytics External Framework External Framework Kafka Streams, KSQL Semantics At Least Once At Least Once At Least Once At Least Once, Exactly Once Ecosystem Medium Small Small Rich Protocol HTTP(S) HTTP(S) HTTP(S) / AMQP / TCP (Kafka) TCP
  11. Managed Service vs. Open Source (Kafka) (5) • “그럼, 그냥

    Kafka를 쓰는 게 낫겠네요?” / “아뇨.” • Kafka는 가장 관리하기 까다로운 시스템 중 하나 ◦ Zookeeper 관리 ◦ Kafka Broker 관리 ◦ 중단되면 안 됨: Rolling Upgrade • 결론: “골치 아프니까 그냥 Cloud Service 쓰자.” or “골치 아파도 쓴다!”
  12. Managed Service vs. Open Source (Kafka) (6)

  13. 2018: Kafka in the Cloud! • 2018.05 ◦ Confluent Cloud

    on GCP. • 2018.07 ◦ Kafka 1.1.1 released. ◦ Kafka on Azure HDInsight. • 2018.11 ◦ Kafka 2.0.1, 2.1.0 released. ◦ Azure Event Hub for Kafka released. ◦ AWS MSK announced. • 2018.12 ◦ Confluent, 자사 Kafka Ecosystem Project들에 대해 Open Source License 변경. (Cloud Service 불가) • GCP를 시작으로 Kafka가 Cloud에 올라가기 시작. AWS를 마지막으로 모두 올라왔음. • GCP, Azure는 Confluent가 직접 작업. AWS는 아님. • 반면, Confluent가 제공하던 Kafka Ecosystem Tool들은 Cloud 상에서 제공하는 것이 금지됨. ◦ cf) Redis (2018.09), Mongodb (2018.10) [#]
  14. Preview: AWS MSK (1) • Amazon re:invent 2018에서 발표된 Managed

    Kafka 서비스 • AWS 상에 생성된 VPC 안에 가상 Kafka Cluster를 생성할 수 있음. ◦ Zookeeper: 설정할 필요 없음. (자동으로 생성) ◦ Broker: EC2 instance (단, 가격은 약 2배.) ▪ Storage: EBS
  15. Preview: AWS MSK (2) • 제한 조건 ◦ 최소 3개

    Availability Zone(에 설정된 subnet들)이 필요. ▪ cf) Aurora: 2개 Availability Zone 필요. ▪ 서울에서는 당장 나와도 못 씀. Singapore나 Tokyo면 모를까. ◦ ${Cluster 크기} = ${Availability Zone} x ${AZ별 Broker 수} ▪ ex) us-east-[1,2,3] x AZ별 Broker 2대 = Broker 6대짜리 Cluster.
  16. Preview: AWS MSK (3) • 1.1.1 구현체 ◦ “This release

    of Amazon MSK supports Apache Kafka version 1.1.1.” • Security Feature (0.9.0)가 빠져 있음 (e.g., SSL) ◦ 민감한 데이터를 전송하기 어려움. • Elastic Scale 기능도 빠져 있음. • 총평: 발표일에 맞춰서 서둘러서 만든 듯한 느낌.
  17. Confluent Cloud on GCP, Azure HDInsight • Confluent Cloud on

    GCP ◦ GCP에서 제공 (2.1.0 - 최신!) ◦ Confluent Tools + BigQuery, Dataflow 등과의 통합을 지원 ◦ AWS와의 연결 지원: 단, ap-northeast 미지원 • Azure HDInsight ◦ Azure에서 제공 (1.1.0) ◦ Elastic Scale, Mirrormaker 등의 기능 + 다른 HDInsight component와의 통합을 지원
  18. 결론 • Kafka는 대세가 맞습니다. ◦ Google, MS가 모두 기존

    서비스에서 Kafka 쪽으로 방향을 틀 정도로. ◦ Amazon이 서둘러서 Managed Kafka Service를 내놓을 정도로. • 하지만 굳이 바꾸실 필요는 없습니다. ◦ Kafka의 장점은 다양한 툴들과의 연동을 지원하는 생태계. ◦ 다른 시스템과의 연동이 딱히 필요 없다면 그냥 계세요. • MSK가 나올 때까지 기다리셔도 되고, 다른 걸 쓰셔도 됩니다. ◦ GCP Confluent Cloud도 있고, Azure HDInsight도 있고. ◦ 어차피 한국 입장에서는 딱 맞는 게 아직 없음.
  19. Questions? • 질문 있으신 분?