리눅스/kafka

kafka streams란?

정지홍 2024. 11. 3. 10:56

토폴리지 topology

  • 2개 이상의 노드들과 선으로 이루어진 집합
  • 종류로는 ring , tree star 등이 존재하며, streams에서는 tree형태와 유사하게 사용
  • 토폴로지를 이루는 노드를 하나의 processor라고 부른다.
  • node와 node를 이은 선을 stream이라고 한다.
    • stream은 topic의 data를 뜻하는데, producer와 consumer에서 사용한 record와 동일
  • processor에는 3가지 종류 존재
    • source processor
      • data를 처리하기 위해서 최초로 선언해야하는 노드
      • 하나 이상의 topic에서 data를 가져옴
    • sink processor
      • data를 특정 kafka topic으로 저장하는 역할
      • 즉, streams로 처리한 data의 목적지
    • stream processor
      • 다른 processor가 반환한 data를 처리 ( 처리에는 변환 , 분기 등 존재 )

kafka streams란?

  • kafka와 함께 실시간 데이터 처리를 쉽게 할 수 있는 스트림 처리 라이브러리
  • 데이터를 소비하고 처리하여 다시 kafka에 전송하는 stream processing application을 개발 가능
    • 이를 통해, 실시간 데이터 분석 , ETL , 복잡한 이벤트 처리 등 가능
    • 데이터를 stateful or stateless로 실시간 변환하여 다른 topic에 적재하는 라이브러리이다.
  • 특징...
    • 1. 고수준 DSL( 도메인 특정 언어 )
      • kafka stream는 stream처리를 단순화 하기 위해 고수준 DSL을 제공( KStream , KTable을 사용해서...)
      • KStream
        • 지속적으로 변하는 이벤트 데이터를 처리하는 구조로, 각 메시지를 개별 이벤트로 다룸
        • 일반적인 stream을 처리하는데 적합
        • record의 흐름을 표현한 것으로 key value로 구성됨
        • kstream으로 data조회하면 topic에 존재하는 모든 record가 출력됨( consumer로 topic을 subscribe하는 느낌)
      • KTable
        • 변경이 발생할 때마다 최신 상태를 유지하는 데이터 구조
        • 상태 데이터를 기반으로 한 집계와 조인에 적합
    • 2. 상태 저장
      • kafka streams는 각 processing application이 stateful할 수 있게 상태 저장소(state store)을 제공.
        • 다르게 말하면, topic에 적재된 data를 stateful or stateless로 실시간 변환 해서 다른 topic에 적재한다.
      • 이를 이용해 내장형 로컬 db를 사용해 각 인스턴스의 로컬에서 data를 유지하고, 장애 발생시 kafka의 changlog로 상태를 복원 가능
    • 3. 상태별 장애 복구
      • kafka streams는 각 partition을 개별 처리하니, 장애 발생시 다른 인스턴스로 재할당 가능
      • 장애 발생해도, exactly once할 수 있는 fault tolerant system을 가짐
      • data는 kafka log에 저장되어 복구가 가능하며, 로컬 상태 저장소도 자동으로 복구 가능
        • => 이렇게 높은 가용성 및 장애 복원력을 가짐
  • streams DSL로 데이터를 처리하는 예시
    • 메시지 값을 기반으로 topic의 분기처리
    • 특정 시간동안 들어온 data수의 통계
    • 서로 다른 두 topic으로 새로운 data를 만들어 내는 것
  • processor api로 구현하는 데이터 처리 예시
    • 일정한 interval마다 data 처리
    • message value에 따라서 topic을 가변적 전송

kafka stream의 task란?

  • streams application을 실행하면 생기는 데이터 처리 최소 단위
  • 만약 3개의 partition으로 이루어진 topic을 처리하는 stream application을 실행하면, 내부에 3개의 task가 생김
  • task들은 스레드들로 묶임.

파티션 3개로 이루어진 topic을 처리하는 streams application

  • 단, 실제 현장에서는 서버가 장애가 발생해도 스트림 처리를 할 수 있게 병렬로 구성한다.

다음과 같이 2개 이상으로 병렬 스트림을 처리해야 함.


 

'리눅스 > kafka' 카테고리의 다른 글

maria db install 및 connect 연동  (1) 2024.11.03
kafka connect란?  (1) 2024.11.03
kafka 복습 - 간단한 프로듀서 만들어서, 간단한 메시지 1개 전송  (0) 2024.10.31
kafka local download  (0) 2024.10.31
zookeeper shell command  (1) 2024.10.31