1. 카프카의 기본 구성
카프카는 데이터를 받아서 전달하는 데이터 버스의 역할을 한다. (이전 MQ와 동일한 형태)
그리고 주키퍼는 카프카의 정상 동작을 보장하기위해 메타데이터를 관리한다.
앞서 설명한 Message Queue처럼, producer는 카프카에 메세지를 전달하고, consumer는 카프카에서 메세지를 꺼내간다.
이때 이 카프카에 대한 설정은 주키퍼에서 담당한다.
2. 카프카의 기본 개념
- 브로커: 카프카가 설치되 서버, 또는 노드를 의미함
- 프로듀서: 카프카로 메세지를 보내는 역할을 하는 클라이언트
- 컨슈머: 카프카에서 메세지를 꺼내가는 역할을 하는 클라이언트
- 토픽: 카프카는 메시지 피드들을 토픽으로 구분, 각 토픽은 카프카내에서 고유함
- 파티션: 병렬 처리 및 고성능을 얻기 위해 하나의 토픽을 여러개로 나눈 것을 말함
- 세그먼트: 프로듀서가 전송한 실제 메시지가 브로커의 로컬 디스크에 저장되는 파일을 말함
- 메세지: 프로듀서가 브로커로 전송하고나, 컨슈머가 읽어가는 데이터를 의미함
- 주키퍼(ZooKeeper): 카프카의 메타데이터 관리 및 브로커의 정상상태 점검(health check)을 담당합니다
토픽(TOPIC)
- producer가 실제로 보내는 메세지가 담기는 곳
- 하나의 토픽에 여러 프로듀서들이 메세지를 전송할 수 있고, 여러 컨슈머가 하나의 토픽에서 데이터를 읽어올 수 있다.
- 토픽을 효율적으로 관리하기위해, 토픽은 여러 파티션으로 구성되어야한다
파티션
여러프로듀서 A, B, C가 같은 'TOPIC1'에 데이터를 전송했다고 가정해보자.
토픽에 파티션이 1개라면 프로듀서 A, B, C가 보내는 데이터는 해당 파티션이 모두 감당해야한다.
이 경우 하나의 데이터 전송 완료 이후, 다음 메세지 전송이 가능해지면서 전송 속도에 영향을 미친다.
- 파티션을 여러개로 늘려 하나의 토픽을 병렬 처리할 수 있돌혹 한다.
▶ 적절한 파티션의 수는 어떻게 정할 수 있을까?
파티션의 수는 초기 생성 후 언제든 늘릴 수 있지만, 다시 줄일 수 없음
따라서 파티션수를 작게, 2개 혹은 4개 정도로 생성한 후, 메시지 처리량이나 컨슈머의 LAG(카프카의 남아있는 메시지수)를 보고 늘려 가는 방법이 가장 좋다.
https://eventsizer.io 를 참고해 적절한 파티션 수를 산정할 수도 있다 (참고용)
세그먼트
프로듀서가 hello my name is A라는 메세지가 "TOPIC1" 에 파티션 0에 저장되었다면 해당 메시지는 어떻게 저장되고 있을까?
바로 파티션0에 세그먼트 라는 로그 파일의 형태로 브로커의 로컬 디스크에 저장된다.
해당 로그파일을 확인하고 싶다면 /data/kafka-logs/에서 확인할 수 있다.
리플리케이션
리플리케이션이란, 각 메시지들을 여러개로 복제해서 카프카 클러스터내 브로커들에게 분산시키는 동작을 의미한다.
이러한 리플리케이션 동작덕분에 하나의 브로커가 종료되더라도 카프카는 안정성을 유지할 수 있다.
위 그림은 'Topic1'을 리플리케이션 팩터 3으로 설정한 후 각 브로커에 배치된 상태이다.
그림에 나타난대로, 'Topic1'은 원본을 포함해 총 3개가 있다. (정확하게는 토픽이 리플리케이션이 되는것이 아니라 파티션이 리플리케이션 된다)
▶ 적절한 리플리케이션 팩터 수는 어떻게 정할 수 있을까?
리플리케이션 팩터수가 커지면 안정성은 높아지지만, 브로커의 리소스를 많이 사용하게 된다. (저장하는 양이 많아지니까)
테스트나 개발환경 = 리플레이션 팩터 수 1
운영 환경 (로그성 메시지로 약간의 유실 허용): 리플리케이션 팩터 수 2
운영 환경 (유실 허용 X) 리플리케이션 팩터 수 3
※ 실전 카프카 개발부터 운영까지 고승범 작가에 의하면, 리플리케이션 팩터 수 3정도면 충분하게 안정성 보장과, 적절한 디스크 공간을 사용할 수 있다고 한다. 더 늘어날 경우 디스크 공간을 많이 사용할 수 있음을 인지하도록 하자.
실제 카프카를 사용하기 전, 개념 정리를 완벽하게 하고 가도록 하자.
'프로그래밍 > 대용량 시스템에 대한 이해' 카테고리의 다른 글
완화전략 - Backpressure, Throttling 이란? (0) | 2023.12.01 |
---|---|
Kafka 설치 및 구동 방법 (0) | 2023.02.18 |
Message Queue란? (0) | 2023.02.18 |
2. 대용량 트래픽 처리 아키텍쳐 종류 (0) | 2022.10.23 |
1. DB(데이터 베이스)는 병목지점 (0) | 2022.10.23 |