728x90
반응형
카프카 구조
Zookeeper (주키퍼)
분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트로 직접 어플리케이션 작업을 조율하는 것을 쉽게 개발할 수 있도록 도와주는 도구이다. API를 이용해 동기화나 마스터 선출 등의 작업을 쉽게 구현할 수 있게 해준다.
Broker (브로커)
Kafka 서버를 의미하며 한개의 Cluster 내에 여러개의 Kafka 서버를 실행시킬 수 있다.
Topic (토픽)
메시지가 생산되고 소비되는 주체
Partition (파티션)
하나의 토픽내에서 토픽의 메시지가 분산되어서 각자 저장되는 단위
(위 카프카 아키텍쳐대로면 한개의 토픽에서 3개의 파티션으로 저장 관리되고 있다.)
파티션은 내부가 Queue로 구성이 되어있어서 순서를 보장하지만, Partition끼리의 순서를 보장하지 않는다.
파티션의 개수는 늘릴수는 있지만 줄일 수 는 없다.
Segment (세그먼트)
파티션의 한 칸을 의미하는 것으로 생산되어 저장된 메세지. Key, Value, Timestamp, Header로 구성되어 있다.
Offset (오프셋)
Partition의 각 메세지를 식별할 수 있는 Unique 값.
Partition에서 Message가 생산 되는 구조
Produce
파티션은 Queue 구조로 되어 있는데 한개의 토픽에 여러개의 파티션이 있는 경우 메시지는 Round-Robin 방식으로 한개의 Partition으로 향하고 그중 마지막 Offset 뒤에 메시지를 기록 합니다.
Consumer Group
생산된 토픽에서 한개의 메시지를 가져와서 처리를 한다.
컨슈머 그룹은 각 파티션에 접근하는 Offset을 공유해서 고가용성을 확보 합니다.
컨슈머 1에서 Partition 1의 Offset 5를 처리하고 있다면 컨슈머2는 Pariton2 의 Offset 0을 처리하는 것 처럼.
따라서, Kafka를 구성할 때 Partition의 개수와 Consumer 개수를 조정하는 것이 중요하다.
이상적인 환경은 Partition 개수 : Consumer 개수 = 1 : 1 이다.
일반적으로는 Partition 개수 >= Consumer 개수.
728x90
반응형
'Infrastructure > Kafka' 카테고리의 다른 글
[Kafka] 카프카 컨슈머 (2) | 2023.10.29 |
---|---|
[Kafka] 카프카 프로듀서 (0) | 2023.09.17 |
[Kafka] 카프카 에러 핸들링 패턴 (0) | 2023.09.15 |
[Kafka] Python confluent Kafka 설치 및 테스트 (1) | 2023.02.07 |