ABOUT ME

-

Total
-
  • [#2] Kafka 이론 (topic, broker)
    컴퓨터/Kafka 2020. 11. 28. 15:53
    728x90
    반응형

    Kafka

     

    Apache Kafka

    Apache Kafka: A Distributed Streaming Platform.

    kafka.apache.org

    이전 글: Kafka 소개


     

    1. Topic (토픽)

    Topic [|tɑːpɪk]
    (명사) 화제, 주제

     

    토픽이란, 스트림 데이터, 그냥 kafka에서 사용되는 데이터이다.

    (이 데이터는 기본 값 기준으로 일주일 후 사라진다.)

    (db에서 table과 비슷하다)

     

    아래는 파티션 3개, 복제 계수 2, "first-topic"이라는 이름의 토픽을 만드는 방법이다.

    kafka-topics --zookeeper localhost:2181 --topic first-topic --create --partitions 3 --replication-factor 2

     

    • 원하는 만큼 토픽을 만들 수 있음
    • "이름"으로 토픽을 구별함
    • 파티션에 자동으로 나눠서 전달됨
    • 파티션으로 나눠서 들어갈 때 순서대로 들어감
    • 파티션 안 메시지는 offset이라는 개념의 id가 있음 (다음부터 읽을 위치 표시 북마크 기능)

     

    @글쓴이

     

    예제

    @Github 링크

     

    각 트럭마다 GPS 좌표를 kafka 시스템에 전송한다.

    이 GPS 좌표는 20초마다 전송되고, 각 메시지엔 트럭 ID와 좌표가 들어있다.

    모든 트럭은 같은 토픽 ID(truck_gps)에 전송되고, 10개의 파티션으로 나뉜다.

     

    consumer 애플리케이션을 2개 만들어서 이 데이터를 처리한다.

    1. 위치 대시보드:: 각 트럭의 위치를 조회할 수 있음

    2. 알림 서비스: 각 트럭의 속도를 계산할 수 있음

     

    2. Broker (브로커)

    Broker [|broʊkə(r)]
    (명사) 중개인

     

    토픽을 저장하는 것이 브로커, 즉 서버이다.

    Kafka 클러스터는 여러 개의 브로커(서버) 이루어져 있다.

    (클러스터: 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합을 말한다.)

     

    특징

    • 브로커들은 정수의 id를 갖는다.
    • 브로커들은 토픽 파티션을 포함한다.
    • 아무런 브로커(bootstrap)에 하나만 연결해도, 알아서 모든 클러스터에 연결된다.

    (ex. broker-list를 localhost:9092,localhost:9093,localhost:9094, 총 3개로 실행되는 시스템에서

    코드에서 연결할 때 localhost:9093 브로커를 1개만 입력해도 나머지 브로커를 알아서 다 연결해버린다.

    서버가 죽어버렸을 때 Kafka 대처 방법인 듯하다.)

     

    예제

    "truck-gps"란 토픽 (3개의 파티션)을 만들게 되면, 아래처럼 Kafka가 자동으로 분배한다.

    각 서버에 어떠한 순서를 갖고, 분배되진 않는다.

     

    2개의 파티션이면, Truck1과 Truck2만 데이터를 갖고, Truck3는 오류 대처용으로 쓸 수 있다.

    @글쓴이

     

    3. 토픽 복제 계수

    Topic replication factor, 만약 서버 하나가 다운되거나 오류가 발생하여도 다른 서버가 대처하기 위한 방법이다.

    (복제 계수는 1보다 커야 하며, 보통 2~3 값을 사용함)

     

    위 예제에서 Truck2 서버가 다운돼도, Truck1이 파티션 0, Truck3이 파티션 1을 갖고 있기 때문에,

    데이터를 계속 사용할 수 있다.

     

    4. 파티션 리더

    Kafka에선 파티션 리더 개념이 있다.

     

    특징

    • 주어진 파티션에 대하여 하나의 브로커만이 리더가 될 수 있다.
    • 리더만이 파티션의 데이터를 주고받을 수 있다.
    • 다른 브로커들은 리더의 데이터를 싱크 한다.
    • 각 파티션마다 하나의 리더와, 여러 개의 ISR (in-sync replica)를 갖는다.

     

    아래는, 브로커 3개 (101, 102, 103), 토픽 1개 (Topic-A), 파티션 2개 (0, 1), 복제 계수=1 상황이다.

     

    만약 브로커 101이 다운된다면? 브로커 102에 있는 파티션 0이 리더가 되고,

    브로커 101이 다시 살아나면, 브로커 101-파티션 0이 다시 리더가 된다.

     

    그럼 누가 리더가 되고 누가 ISR이 될 건지는 "zookeeper"이 결정하기 때문에,

    크게 신경 쓸 필요는 없다.

     

    다음 글: [#3] Kafka: Producer, Consumer, Zookeeper

     

     

    728x90

    '컴퓨터 > Kafka' 카테고리의 다른 글

    Kafka Slack API Consumer 만들기 (Python)  (0) 2020.12.01
    [#3] Kafka 이론 (Producer, Consumer, Zookeeper)  (0) 2020.11.29
    [#1] Kafka 소개  (0) 2020.11.28

    댓글