ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kafka streams
    개발/Kafka 2022. 5. 1. 16:01

    카프카 스트림즈

    • 토픽에 적재된 데이터를 상태기반 또는 비상태기반으로 실시간 변환하여 다른 토픽에 적재하는 라이브러리
    • 카프카에서 공식 지원하는 라이브러리, 완벽하게 호환. 편리한 기능 제공
    • 장애가 발생하더라도 정확히 한번 처리할 수 있도록 장애허용시스템을 제공
    • JVM에서 하나의 프로세스로 실행되기 때문에 분산시스템이나 스케줄링 불필요
    • 내부적으로 스레드 1개이상 생성가능. 스레드는 1개 이상의 태스크를 가짐
    • 태스크: 스트림즈 애플리케이션을 실행하면 생기는 데이터 처리 최소 단위
    • 토폴로지: 2개 이상의 노드들과 선으로 이루어진 집합
      • ring, tree, star 등이 있는데 스트림즈에서는 tree 형태의 토폴로지와 유사
    • 프로세서: 토폴로지를 이루는 노드 각각
      • 소스 프로세서: 데이터를 처리하기 위해 최초로 선언해야하는 노드. 하나 이상의 토픽에서 데이터를 가져오는 역할.
      • 스트림 프로세서: 다른 프로세서가 반환한 데이터를 처리하는 역할.
      • 싱크 프로세서: 테이터를 특정 카프카 토픽으로 지정하는 역할. 스트림즈로 처리된 데이터의 최종 정착지.
    • 스트림: 노드를 이은 선
      • 토픽의 데이터를 뜻함
      • 레코드와 동일
    • 스트림즈DSL, 프로세서API
      • 스트림즈DSL
        • KStream, KTable, GlobalKTable: 레코드를 추상화한 3가지 개념으로 스트림즈DSL에서만 사용되는 개념
        • KStream
          • 레코드의 흐름을 표현한 것
          • message key, message value로 구성
          • 토픽에 존재하는 (KStream에 존재하는) 모든 레코드가 출력
          • 컨슈머로 토픽을 구독하는 것과 동일선상이라고 보면 됨
        • KTable 
          • 메시지 키를 기준으로 묶어 사용
          • 메시지 키를 기준으로 가장 최신 레코드를 사용(출력됨)
          • 동일한 키의 메시지가 추가되었을 경우 업데이트 되었다고 볼 수 있음
        • GlobalKTable
          • KTable과 동일하게 메시지 키를 기준으로 묶어 사용
          • KTable로 선언된 토픽은 1개의 파티션이 1개의 태스크 할당
          • GlobalKTable로 선언된 토픽은 모든 파티션 데이터가 각 태스크에 할당되어 사용
          • join을 수행할 때
            • KStream, KTable을 조인하려면 코파티셔닝(co-partitioning) 되어 있어야 함
            • 코파티셔닝: 2개 데이터의 파티션 개수가 동일하고 파티셔닝 전략을 동일하게 맞추는 작업
            • 파티션 개수가 동일하고 전략이 같을 경우, 동일한 메시지 키를 가진 데이터가 동일한 태스크에 들어가는 것을 보장
            • 각 태스크는 KStream의 레코드와 KTable의 메세지 키가 동일한 경우 조인 가능(아닐 경우 TopologyException으로 조인이 되지 않음)
            • 코파티셔닝이 되어 있지 않으면 리파티셔닝(repartitioning: 새로운 토픽에 새로운 메시지 키를 가지도록 재배열하는 과정)으로 코파티셔닝되도록 할 수 있음
            • 코파이셔닝 되어 있지 않은 것을 조인하고 싶다면? GlobalKTable로 선언하여 사용하면 됨
            • GlobalKTable로 정의된 데이터는 스트림즈 애플리케이션의 모든 태스크에 동일하게 공유되어 사용됨
            • 하지만, 로컬 스토리지의 사용량이 증가하고 네트워크, 브로커에 부하가 생김 (작은 용량의 데이터일 경우에만 사용하는 것이 좋음)
            • 많은 양의 데이터는 리파티셔닝을 통해 KTable을 권장
        • 필수옵션
          • bootstrap.servers
          • application.id
        • stream(): stream(), table(), globalTable()은 최초의 토픽 데이터를 가져오는 소스 프로세서
        • to(): KStream 인스턴스의 데이터들을 특정 토픽으로 저장하기 위한 용도. 싱크 프로세서
        • filter(): 필터링 스트림 프로세서

        • GlobalKTrable과 KStream을 join
          • GlobalKTable로 선언한 토픽은 토픽에 존재하는 모든 데이터를 태스크마다 저장하고 조인처리를 수행
          • 조인을 수행할 때, key 뿐만 아니라 value 값을 기준으로도 매칭하여 조인 가능
      • 프로세서 API
        • 토폴로지를 기준으로 데이터를 처리한다는 관점이 동일
        • KStream, KTable, GlobalKTable 등의 개념이 없음
        • 직접 구현하여 사용한다

    '개발 > Kafka' 카테고리의 다른 글

    kafka 배경 및 용어정리  (0) 2022.05.01

    댓글

Designed by Tistory.