Stream Processing and Batch Processing

  • Stream Processing
    • 데이터 흐름에 따라 처리 데이터가 프로그램에 도달하자마자 처리
    • 이벤트에 즉각적으로 반응하여 지연시간이 거의 없음
    • 정적 분석보다 더 많은 데이터를 분석
    • 지속적으로 유입되는 데이터 분석에 최적화
    • 대규모 공유 데이터베이스에 대한 요구를 줄일 수 있어 인프라에 독립적으로 수행
  • Batch Processing
    • 이미 저장된 데이터를 기반으로 분석이나 질의를 수행하고 특정 시간에 처리

Kafka Streams

  • 카프카에 저장된 데이터를 처리하고 분석하기 위해 개발된 자바 라이브러리
  • JVM기반 언어로 개발하면 된다

  • 카프카 스트림즈는 사용자 앱에서 라이브러리를 사용하고 원하는 만큼 앱 인스턴스를 시작하면 kafka는 이러한 인스턴스에 대해 작업을 분할하고 균형을 유지한다.
  • Kafka Streams는 스트림 처리 클러스터 없이 kafka와 나의 애플리케이션만 포함하는 완전히 내장된 라이브러리로 개발한다.
  • 상태 테이블의 개념을 이벤트 스트림과 완전히 통합하고 이 두가지를 단일 개념 프레임워크에서 사용할 수 있도록 한다.
  • 스트림 아키텍처에서 움직이는 조각의 총 수를 줄이기 위해 kafka가 제공하는 핵심 추상화와 완전히 연결된 처리 모델을 제공한다.

장점

  • 카프카와 완벽 호환한다
    • 이벤트 저장소로 사용하는 카프카를 스트림즈는 카프카가 새로 릴리즈 될때마다 카프카 클러스터와 완벽 호환한다.
    • 데이터 유실이나 중복 처리되지 않는다.
  • 스케줄링 도구가 필요없다.
    • 스트림즈 애플리케이션은 컨슈머나 WAS 애플리케이션 배포하는 것처럼 원하는 만큼 배포하면된다.
  • 스트림즈DSL과 프로세서 API를 제공
    • DSL 이벤트 기반 데이터처리를 할때 필요한 다양한 처리, map, join, reduce와 같은 기능을 사용할 수 있다.
    • DSL에 없는 기능이있다면 프로세서 API로 처리를 하면된다.
  • 로컬 상태저장소를 사용한다
    • 비상태기반 처리: 필터링이나 데이터를 변환하는 처리, 데이터를 처리하는 즉시 프로듀스하면됨 유실이나 중복이 발생할 일이 없음
    • 상태기반 처리: 구현이 어렵다. join등의 문제는 메모리에 데이터를 저장하고 다음 데이터가 들어오면 처리해야한다.
    • 상태기반 처리를 위해 스트림즈를 사용한다.
    • 로컬에 rocksdb를 사용해 상태를 저장하고 이 상태에 대한 변환정보는 카프카의 변경로그(changelog) 토픽에 저장이된다.
    • 프로세스에 장애가 발생하더라도 그 상태가 모두 안전하게 저장된다.