Infra/Kafka

Apache Kafka (6) - Extended API & Case Study

코드파고 2024. 12. 9. 13:10

Apache Kafka Series - Learn Apache Kafka for Beginners v3를 수강하며 기록한 내용입니다.

Kafka의 확장 기능에 대해 알아보며,
이를 어떻게 활용하는 게 좋을 지 몇 가지의 케이스를 통해 알아보도록 한다.

Kafka Connect

  1. 외부 소스와의 연동 : 카프카-카프카 상호연결
  2. 외부 시스템과 Kafka 간의 데이터 수집 / 전송

Source Connectors: 외부 시스템에서 데이터를 읽어와 Kafka에 넣음.
Sink Connectors: Kafka에서 데이터를 읽어와 외부 시스템에 씀.
Converters: 데이터를 Kafka와 외부 시스템 간에 변환(JSON, Avro 등).
Transforms (SMT): 스트림 데이터를 실시간으로 수정.

Kafka Streams

표준 자바 어플리케이션
별도 클러스터를 만들 필요 없음

Schema Registry

카프카가 사용할 표준 포맷(스키마)을 정의한다.
데이터 포맷 & 필드 명이 바뀌었을 때, 프로듀서가 잘못된 데이터를 전송 했을 때를 대비하여 데이터를 검증
별도의 컴포넌트로 구성해야 하며, 카프카 프로듀서/컨슈머가 Schema Registry와 소통할 수 있어야 한다.

Schema Registry를 사용할 때 필요 사항

  • 초기 설계에 힘을 써야 하며, 가용성이 높아야 한다.
  • Producer/Consumer 코드를 바꿔 주어야 한다.
  • Apache Avro가 그 중 하나이나, 러닝커브가 있기에 Protobuf 혹은 JSON Schema를 잘 활용한다.

Case Study

MovieFlix

TV, 영화를 주문형으로 볼 수 있게 하는 서비스

보고 있던 영상 이어보기 Consumer
실시간으로 유저 프로파일 설정 Kafka Streams
다음 쇼를 실시간으로 추천 Consumer
분석 스토어에 모든 데이터 저장 Kafka Connect

topic

show_position

  • Producer 다량 보유 가능
  • 30 파티션 초과의 경우 고도의 분산 필요
  • 키는 "user_id"가 적절

recommendations

  • 스트림 추천 엔진은 소스 데이터로부터 분석 스토어에 데이터를 삽입한 뒤 추천할 것
  • 볼륨은 작아도 괜찮을 것이다
  • 키는 "user_id" 가 적절

GetTaxi

요청 시 유저의 위치, 택시 운전자의 위치를 조합하여 요금을 책정

topic

user_position

  • Producer 다량 보유 가능
  • 30 파티션 초과의 경우 고도의 분산 필요
  • 키는 user_id 가 적절
  •  

taxi_position

  • Producer 다량 보유 가능
  • 30 파티션 초과의 경우 고도의 분산 필요
  • 키는 taxi_id가 적절

Surge_pricing

  • weather, region 등을 포함할 수 있다

user_position, taxi_position을 조합하기 위한 Kafka Stream 활용
surging_pricing 내역을 AWS S3에 저장하기 위한 Kafka Connect 활용

MySocialMedia

topics

posts

  • 다량의 producer 보유
  • 파티션의 개수가 30개 이상이면, 분산을 권장
  • user_id가 키로 적절
  • 보유 기간이 길어야 함

likes

  • 다량의 producer 보유
  • 데이터의 수가 많을 것으로 고도로 분산되어야 함
  • post_id가 키로 적절

comments (like와 동일)

posts_with_counts

trending_posts

이벤트 자체로 포맷팅해야 한다. ex) user_123 - created - post_123 - 2PM
posts, likes, comments Kafka Streams 사용하여 집계, post_with_counts에 반영

MyBank

리얼 타임 뱅킹
트랜잭션 데이터가 DB에 필요
한도는 유저가 정의함
유저에게 알림을 전송해야 함

topics

bank_transactions

  • Kafka Connect Source CDC Connector 활용하여 적재

user_settings
user_alerts

  • real time big trasnactions detections을 통해 user_alerts 토픽에 데이터 적재
  • 알림 모니터링 서비스에서 토픽 활용

Big Data 처리

Real Time

Real Time 분석, 대시보드, 어플리케이션에 활용 Spark, Storm, Flink..

Batch

리포트, 백업 장기 보관에 활용 Kafka Connect - Hadoop, S3, RDBMS

로깅 & 매트릭스 통합

로그를 소화하고, 다양한 어플리케이션으로부터 메트릭 수집
높은 처리률을 원하기 때문에 데이터 분실, 데이터 복제에 대한 규제가 덜함
Splunk, CloudWatch, ELK 등을 활용하자