-
[#2] Kafka 이론 (topic, broker)컴퓨터/Kafka 2020. 11. 28. 15:53728x90반응형
Kafka
이전 글: 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가 있음 (다음부터 읽을 위치 표시 북마크 기능)
예제
각 트럭마다 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