아래 mongodb korea 에서 주최한 webinar 에 대한 요약 내용입니다.

 

Kafka

  • 데이터 스트림을 위한 Modern Distributed Event Streaming Platform
  • Use Cases
    • Messaging(RabbitMQ or ActiveMQ)
    • Eventing (Logging 솔루션 부하 경감)
      • 주로 로그 분석에만 포커스 되어 있고, 대용량 로그 저장에는 어려움이 존재.
      • 로그 저장할 때, 앞단에 kafka 두고 정제한 다음 뒷단에서 로그 분석하는 형태로 많이 사용.
    • ETL (Extract, Transform, Load)
    • Stream Processing

사용 용도

  • 이벤트 전송(Publish & Subscribe) - 주로 이 목적으로 많이 사용
  • 이벤트 저장 - Apache Kafka 의 큰 특징.
  • 이벤트 처리 및 분석

Kafka 의 특징

  • 기존 메시징 관련 middleware 기능 모두 제공
    • Producer 가 여러 Topic에 비동기 방식으로 메시지를 보낸다
    • Consumer 는 메시지를 가져가서 필요할 때마다 메시지를 가져가고, Topic Offset 을 관리
  • Event Stream Processing
    • 실시간 이벤트 스트림 및 데이터를 분석해서, 해당 이벤트에 실시간 대응하기 위한 기술.
    • 아래 ETL 과 Messaging 의 장점들만 모아놓음.

ETL (Pros)

  • High scalable
  • Durable
  • Persistent
  • Ordered

ETL (Cons)

  • Batch
  • Time Consuming

Messaging (Pros)

  • Real-Time

Messaging (Cons)

  • Difficult to scale
  • No Replay

위에는 Kafka 를 언급했는데, 왜 Confluent 를 사용해야 되는가?

  • Confluent - 요약하자면 Kafka를 더 완벽하게 만들고 있는 업체

  • Confluent 개발자들은 Kafka 오픈소스 커밋 내역을 다수 가지고 있고, 이를 통해 이미 Apache Kafka 기본, High Level 에 대한 기술력을 가지고 있음

Customer Goal Enterprise Challenges Mission Critical Features
인기 있는 Data Sources 와 Sinks 를 연결 반복 가능한 방식으로 기존 데이터 시스템을 Kafka 에 연결 Kafka Connect, Java Client
인기 있는 Data Sources 와 Sinks 를 연결 기존 데이터 시스템을 Kafka 에 연결에 드는 비용 최소화 Confluent Club
Application 개발 호환성 활성화 메시지 보내고 가져가는 부분에서 Data Scheme 를 맞추는 것에 대한 이슈가 발생할 수 있는데. Risk 를 줄이고자 하는 목적 Schema Registry

Confluent Platform

각 사용자 역할에 맞게 아래와 같은 기능이 필요하고, 이에 대한 기능을 제공한다고 합니다.

Developer - 개발자 생산성 극대화 필요

 

  • 다양한 언어를 통한 개발 - Non-Java Clients | REST Proxy | Admin REST API
  • 풍부한 Pre-built Connectors - Connectors, Connector Hub
  • 이벤트 스트리밍 데이터베이스 - ksqlDB(캐시콜 DB 라고 부릅니다)

Operator - 대규모 운영 시 효율적인 운영 기능 필요

  • GUI 기반 관리 및 모니터링 - Control Center
  • DevOps 자동화 - Confluent Operator | Ansible
  • 동적 성능 및 유연성 - Self-Balancing Cluster | Tiered Storage

Architect - 운영 환경 관련 필수 기능 필요

  • Enterprise 급 보안 - RBAC, Secrets Protection, Audit Logs
  • 데이터 호환성 - Schema Registry, Schema Validation
  • 글로벌 탄력성 - Multi-region Clusters, Replicators, Cluster Linking

How to use

  • 설치된 Software 로, Self-Managed 환경 활용 (Confluent Platform)
  • 이미 구축된 Cloud Service 활용 (Confluent Cloud)

기존 복잡했던 스트림 프로세싱 아키텍처를 단순화

  • ksqlDB 로 이벤트 캡처, 스트림 처리, Push & Pull 쿼리 제공 종합 솔루션 제공
  • ksqlDB : Database 가 아닌, Event Streaming Processing Engine (SQL 연산을 사용해서 DB가 붙는다고합니다)
    • Push Queries - 실시간 쿼리 결과 변경 전송(ex. 드라이버 어디 있고 요금은 얼마?)
    • Pull Queries - 특정 시점 정보 조회(ex. 차량 비용, 운전 기사 이름 뭐였지?)

기존 Kafka API 와의 다른점

  • 기존 이벤트 스트리밍 처리를 위해서는 kakfa 에서 제공하는 코드 를 사용해야 되고 coding 길이가 꽤 됨 (코드 길이가 길어지는 문제 발생)
  • version up 되면서 kafka streams API 가 제공되었고, 훨씬 짧은 코딩으로 해결 가능
  • ksqlDB - SQL 1 문장으로 이벤트 스트리밍 처리 가능

Confluent Platform 배포 옵션

  • 컨테이너 환경
    • k8s 환경에서 배포할 수 있도록 Confluent Operator 를 사용할 수 있다고 합니다.
  • 컨테이너 환경이 아닌 경우
    • Ansible Playbook 을 통해 이벤트 스트리밍 플랫폼을 대규모로 배포할 수 있다고 합니다.

Kafka 를 통한 스트리밍 서비스 개발 과정에서 MongoDB 를 어떻게 사용하는지?

Kafka Connector

  • 다양한 플랫폼 데이터를 kafka 로 쉽게 가져오기 위한 목적으로 사용됨.
  • https://hub.confluent.io

Kafka 메시지

  • Offset Timestamp key value (byte[]) 형태로 저장됨

  • MongoDB(Source) -> Converter -> Kafka -> Converter -> MongoDB(Sink)

Kafka Connector Types

  • Source Connector
    • Source 가 MongoDB 이고, MongoDB 에 있는 데이터들을 Kafka Cluster 내 Topic 로 전송하는 용도
    • Change Streams(실시간 변경되는 데이터 목록)을 Document 형태로 MongoDB Connect 로 전달하고, Connector 는 Kafka Cluster 내 Topic 에 저장
  • Sink Connector
    • Kafka Cluster 내 Topic 에 저장되는 데이터, 이벤트들을 MongoDB 에 저장할 때 사용하는 용도

Kafka Connector v1.3 특징

  • Auto-Generated Schema
  • Dealing with infrequently updated sources
  • write data to specific partitions
  • copy existing enhancements

Confluent - MongoDB 사용 사례

  • Centene
    • MSA 방식으로 개발하여, 의료 데이터를 Kafka 로 가져오고 정제하고 MongoDB 로 전달하는 역할
  • JP Morgan
    • Challenges
      • 중앙 집중 사고 및 이벤트 관리 솔루션 필요
      • 레거시 어플리케이션 현대화
      • Dashboard 필요
      • 은행 전체 결제 처리, 고객 활동 추적 관련 실시간 데이터 통합 간소화 필요
    • Solution
      • Kafka & MongoDB 로 보안 로깅 플랫폼
    • 80개 이상 Confluent Platform Cluster, 대용량 데이터를 처리
  • and so on

QnA

RabbitMQ vs Apache Kafka, Confluent Platform

  • RabbitMQ - 전통적인 messaging queue, 단. 메시지를 저장하는 기능은 없음.
  • Apache Kafka, Confluent Platform - 기존 MQ 기능은 물론 Event Stream 기능까지 추가됨.

참고할 만한 링크

+ Recent posts