• Kafka란
    pub-sub 모델의 Message Queue. 분산 환경에 특화되어있는 특징이 있다.
    * pub-sub?-> Publish/Subscribe의 줄임말. 메시지 기반의 미들웨어 시스템을 말한다.
    일반적으로 메시지를 전달 할 때는 publisher(sender)가 subscriber(receiver)에게 직접 메세지를 전송한다. 하지~만! Pub-sub 모델에서는 publisher가 어떤 subscriber가 있는지 모르는 상태에서 메시지를 전송하고, subscriber는 publisher에 대한 정보가 없는 상태로 자신(sub)의 interest에 맞는 메시지만을 전송 받는다.

  • Kafka 구성요소
    • Topic
      카프카 클러스터의 브로커에서 데이터를 관리할 때 기준이 되는 개념.
      토픽은 반드시 존재하는 리터 파티션(Leader Partition), 존재 할 수도 있고 없을 수도 있는 팔로워 파티션(follower Partition)등 2종류의 파티션으로 구성 될 수 있다.(?)
    • Leader Partition
      Partition은 Producer로부터 전달 된 데이터를 보관하는 역할.
      그 중 producer 혹은 consumer와 직접 통신을 하는 파티션을 리터 파티션이라고 함. (producer/consumer와 직접 통신으로 읽기/쓰기 연산 담당)
    • Follower Partition
      데이터를 보관하는 역할. 단, producer로부터 리더 파티션으로 전달된 데이터를 복제(replication)하여 복제된 데이터를 저장한다.
      * 리더 파티션이 속해있는 brokcer에 장애가 발생하면, 리더 파티션의 지위를 가질 수 있다.
    • Replication factor (복제 계수)
      1) 계수가 1 인 경우 -> 복제없음.
         브로커 1에 해당 토픽의 파티션이 3개라면 3개 모두 리더 파티션이 됨.
      2) 계수가 3 인 경우 -> 복제 2개
         브프로 1에 해당 토픽의 파티션이 3개라면 브로커1,2,3은 각각 하나의 리더
         파티션과 두개의 팔로워 파티션을 가짐.
  • Broker
    브로커는 카프카 서버 라고도 불림.
    브로커 내부에 여러 토픽들이 생성될 수 있고, 이러한 토픽들에 의해 생성된 파티션들이 보관하는 데이터에 대해 분산 저장을 해주거나, 장애 발생 시 안전하게 데이터를 사용할 수 있도록 해줌.
    • Controller
      여러 브로커 중 하나의 브로커가 컨트롤러의 역할을 수행하게 됨.
      컨트롤러는 클래스터 내의 브로커가 장애 등으로 사용할 수 없을 때 장애가 발생한 브로커의 토픽에 있는 리더 파티션의 지위를 같은 클러스터 내에 정상 동작하는 브로커에게 재분배하는 역할을 수행.
      * 컨트롤러 역할의 브로커에 장애가 생기면 다른 브로커가 컨트롤러 역할을 함.
    • Coordinator
      여러 브로커 중 하나의 브로커가 코디네이터 역할을 수행하게 됨.
      컨슈머 그룹의 상태를 체크. 만약 그룹 내 컨슈머 장애 발생 시 해당 컨슈머와 매칭된 파티션의 데이터를 정상 동작하는 컨슈머로 매칭 해 줌.
      파티션을 컨슈머에게 재할당 하는 과정을 Rebalance라고 함.
  • Cluster
    브로커(카프카 서버)로 이루어진 집합체
  • Zookeeper
    카프카의 분산 처리 시스템 서버들에 관한 metadata(환경 설정 등)를 통합 관리하는 시스템.
    클러스터를 구성하는 브로커끼리 공유되는 데이터를 유지하거나 특별한 조율을 하기 위해 사용 됨.
    • Zookeeper 사용 용도
      -. 설정관리 (Configuration Management)
        클러스터 설정 정보를 최신으로 유지하기 위한 시스템으로 사용.
      -. 클러스터 관리 (Cluster Management)
        클러스터의 서버(브로커)가 추가되거나 제외 될 때 그 정보를 클러스터
        내부 서버(브로커)들이 공유하는데 사용
      -. 이외에도 많은 기능들이 있음.
    • Zookeeper Ensemble
      주키퍼의 클러스터를 주피터 앙상블이라고 함.
  • Producer & Partitioner
    프로듀서는 메시지를 생산하여 브로커의 토픽으로 메시지를 보내는 역할을 하는 application이나 서버 모두를 프로듀서 라고 부름.
    프로듀서는 데이터를 전송할 때 리터 파티션을 가지고 있는 카프카 서버와 직접 통신.
    • Partitoner
      파티셔너는 프로듀서 어플리케이션에서 생성 된 메시지를 카프카에 보낼 때 이 메세지가 어떤 토픽의 어떤 파티션에 전달 될 지 정하는 역할.
      * 파티셔너는 파티션이 있는 곳이 아니라 프로듀서 어플리케이션 내에서 동작하는 것임.

      프로듀서 API를 사용하는 경우에, 아래 2개의 파티셔너를 제공함.
      -. RoundRobinPartitioner
        클라이언트 라이브러리 2.4.0 디폴트.
        메시지가 발생하는 대로 파티션을 순회하며 전송하기 때문에 높은 리소스 사용율을 가짐.
      -. UniformStickyPartitioner
        클라이언트 라이브러리 2.5.0 디폴트.
        데이터가 배치로 모두 묶일 때 까지 기다린 뒤, 묶인 덩어리를 동일한 파티션에 전송함.
        -> 높은 처리량과 낮은 리소스 사용율을 가짐.
    • Consumer
      컨슈머는 토픽의 파티션에 저장되어 있는 메시지를 소비하는 역할을 하는 application 이나 서버 모두를 컨슈머 라고 부름.
      컨슈머는 데이터를 요청할 때 리더 파티션을 가진 브로커와 통신함. 컨슈머를 운용하는 방법은 크게 [A. 토픽의 특정 파티션만 구독하도록 설정, B. 1개 이상의 컨슈머 그룹을 구성] 2가지가 있다.
    •  Consumer Group ?
      토픽의 파티션은 동일한 컨슈머 그룹내 컨슈머와 1:1 ~ 1:n 매칭이 가능함.
      (consumer : partition)

 

출처 : https://velog.io/@jwpark06/Kafka-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%A1%B0-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0