- [KAFKA] 카프카의 구성요소2024년 07월 16일 15시 03분 39초에 업로드 된 글입니다.작성자: 코딩백구반응형
카프카의 구성요소
카프카는 기본적으로 Producer, Kafka Cluster, Consumer 로 구성되어 있습니다.
Producer
- Message 를 만들어서 Broker 에 전송
Kafka Cluster
- Kafka Cluster은 여러 개의 Broker로 구성된 Kafka System.
Consumer
- Broker에 저장된 메시지를 Topic을 통해 가져옴.
- 즉, 특정한 Topic을 구독하는 하나의 인스턴스이다.
1) Consumer Group
Consumer Group이란?
- Consumer Group은 여러 Consumer들이 하나로 묶인 논리적인 그룹 단위 입니다.
- Consumer는 group.id를 통해 식별되며, 동일한 group.id를 가진 Consumer끼리 같은 Consumer Group에 속하게 됩니다.
특징
- Consumer Group내의 Consumer들은 협력하여 Topic의 메시지를 분산 병렬 처리.
- 하나의 토픽에 여러 Consumer Group이 동시에 메시지를 가져올 수 있다.
- 각 그룹 내 서버끼리는 서로의 정보를 공유하여 하나의 서버가 정지되더라도 다른 서버가 그 역할을 할 수 있게 되며,
이를 리밸런싱이라 한다. - 파티션은 하나의 Consumer Group에서 하나의 Consumer만 대응되기 때문에, 파티션 개수 이상의 Consumer는
활요되지 않음. - 서로 다른 Consumer Group는 서로 영향을 미치지 않는다.
리밸런싱이란?
- Consumer Group 내 Comsumer와 파티션 사이의 맵핑 관계가 조정되는 것.
- Consumer Group 내 Consumer의 추가, 이탈 혹은 장애 시 발생.
- 이러한 리밸런싱은 Consumer Group의 가용성과 확장성을 높여줌.
- 리밸런싱이 발생하면 Consumer들은 일정 시간동안 메시지를 읽을 수 없는 상태가 됨.
Offset이란?
- Offset은 파티션 내에서 유일하고, 순차적으로 증가하는 숫자 (64bit 정수) 형태로 되어 있습니다.
- Kafka 에서 각 파티션마다 메시지가 저장되는 위치를 Offset이라 함.
-
Consumer는 자신이 데이터를 어디까지 가져갔는지를 Offset을 이용해서 관리합니다.
이를 통해 메시지의 순서를 보장하고, 중복을 방지. - 각 파티션에 대해 현재 위치 (Offset)를 업데이트하는 동작을 커밋한다고 함.
2) 클러스터
Kafka 클러스터는 아래와 같이 여러 개의 Broker 로 구성되어 있으며, Broker는 Topic > Partition > Segment 로 구성되어 있습니다.
(** Kafka 2.8 버전부터 ZooKeeper 없이 작동 가능하여 본문에서는 설명 생략)
역할
- 메시지의 저장 및 전달
- 여러 개의 Broker로 구성되어 고가용성과 확장성 제공
3) 브로커
Kafka 브로커는 Kafka System을 구성하는 개별 서버이며, 이 브로커들은 Kafka 클러스터를 형성하여 전체 시스템의 일부로 작동.
역할
- 데이터 저장 및 관리
- 각 브로커는 여러 개의 토픽을 가지고 있고, 토픽은 하나 이상의 파티션을 관리.
- 이 파티션에 메시지가 순차적으로 저장됨.
- 클라이언트 요청 처리
- Producer로부터 데이터를 받아 저장하고, Consumer의 요청에 따라 데이터 제공.
- 고가용성 및 확장성
- 데이터의 안정성을 위해 파티션을 여러 브로커에 복제.
- 이로 인해, 3개의 브로커 중, 하나의 브로커에 장애가 생겨도 서비스는 계속 작동된다.
- 필요시, 클러스터에 새로운 브로커를 추가하여 시스템의 처리 능력 확장 가능.
- 데이터 일관성 유지
- 브로커들은 클러스터 내에서 서로 통신하여 데이터의 동기화와 상태 정보를 공유.
- 이를 통해 클러스터 전체가 일관된 상태를 유지하고, 데이터의 신뢰성 확보.
- 컨트롤러 역할
- 여러 브로커들 중 단 하나만이 컨트롤러 역할을 맡고, 컨트롤러는 리더 파티션 선출 및 브로커의 추가 및 제거 담당.
4) 토픽
토픽은 메시지들의 특정 카테고리를 나타냄. 토픽은 Producer 가 데이터를 보내는 대상이며, Consumer 가 데이터를 읽는 출처.
특징
- 토픽은 데이터를 카테고리화 하여 관리할 수 있게 함.
- 또한, 한 토픽을 여러 Consumer 가 구독할 수 있으며, 이들은 토픽에서 발행된 모든 메시지를 읽을 수 있다.
- 하나의 토픽은 여러 개의 파티션으로 나누어 지며, 메시지는 파티션에 순차적으로 저장됨.
5) 파티션
파티션은 토픽을 구성하는 기본 단위이며, 하나의 토픽은 여러 개의 파티션으로 나뉘어질 수 있다.
이는 Kafka의 확장성과 병렬 처리 능력을 향상 시킴.
역할
- 데이터 분산 및 병렬 처리
- 각 파티션은 독립적으로 데이터를 저장하며, 여러 브로커에 분산될 수 있다.
- 이로 인해 Kafka는 데이터를 효율적으로 관리하고, 동시에 여러 Consumer 에게 서비스 가능.
- 순차적 데이터 관리
- 메시지는 각 파티션 내에서 순차적으로 저장되며, 이 순서는 유지된다.
- 이는 데이터의 일관성과 정확한 순서 보장에 중요.
- 스케일 아웃
-
시스템 부하가 증가할 때, 더 많은 파티션을 추가하여 처리 능력 확장 가능. (확장한 파티션은 줄일 수 없으므로 주의 필요)
-
- Leader, Follower 파티션
- 파티션은 리더 파티션과 팔로워 파티션이 존재.
- Producer 와 Consumer는 리더 파티션에게만 메시지를 교환.
- 리더 파티션이 읽기 및 쓰기 연산을 수행하며, 이후 팔로워 파티션 에게로 복제 된다.
-
리더 파티션에 문제가 생기면, 기존의 팔로워 파티션이 리더 파티션으로 승격되어 서비스 유지.
Replication 이란?
- Kafka에서는 높은 가용성을 위해 Replication 이란 기능을 제공.
- Replication 은 각 토픽의 파티션들을 클러스터 내의 다른 브로커들로 복제하는 것을 말하며,
Topic 생성 시, Replication의 수를 지정할 수 있습니다.
이때, 1개의 파티션은 리더 파티션으로, 나머지는 팔로워 파티션으로 구성됨. - 이를 통해, 특정 브로커에 장애가 발생해도 다른 브로커가 해당 브로커의 역할을 대신 수행.
- ** Topic 생성 시, --replication-factor 옵션으로 Replication 의 개수를 지정할 수 있으며,
Kafka 설정 파일에서 default.replication.factor 값을 수정하여 Default 값 변경 가능.
Replication 유의 사항
- Replication 수가 늘어날 수록 안정성은 높아지나, 브로커의 Resource 및 디스크 사용량이 증가하므로 적절한 값으로 설정.
-
Replication 의 수는 브로커의 개수보다 클 수 없다.
Replication 예시
- 브로커가 4개인 클러스터에 4개의 파티션과 3개의 Replication을 가지도록 Topic "Orders"를 생성하면, 아래와 같이 됩니다.
ISR (In Sync Replica) 란?
- ISR이란 일종의 Replication Group으로, 리더 파티션과 제대로 동기화가 이루어진 팔로워 파티션들로 구성됨.
(리더 파티션과 팔로워 파티션간의 복제는 비동기로 동작하기 때문에, 파티션간의 데이터 일관성을 위해 도입) - 만약 장애로 인해 리더 파티션의 브로커가 중단 되었을 때는, ISR 에 속한 다른 팔로워 파티션이 리더 파티션으로 선정된다.
- 리더 파티션은 팔로워 파티션들이 주기적으로 데이터를 복제하는지 확인하며, 설정된 일정 주기 (replica.lag.time.max.ms)가
지나도 복제 요청이 오지 않는다면 해당 팔로워 파티션은 ISR 에서 추방됨.
6) 세그먼트
세그먼트는 파티션의 데이터를 실제로 저장하는 물리적인 파일.
Kafka는 메시지를 파티션에 순차적으로 기록하지만, 각 메시지들은 세그먼트라는 로그 파일의 형태로 로컬 디스크에 저장됨.
세그먼트에는 메시지의 Value 만 저장되는 것이 아니라, Key, Offset, Size에 대한 정보도 함께 저장됨.
반응형'Kafka' 카테고리의 다른 글
[KAFKA] 카프카 간단하게 알아보기. 카프카란 무엇인가? (0) 2024.07.15 다음글이 없습니다.이전글이 없습니다.댓글