반응형
이번 포스트는 Kafka의 기본 구조에 대한 내용이다.
📌 서론
지금부터 알아볼 Kafka의 구성 요소는 아래의 그림과 같다.
카프카는 클러스터 -> 브로커 -> 토픽 -> 파티션 -> 세그먼트로 구성되어 있다.
1. 클러스터(Cluster)
클러스터 이해하기
- Kafka 클러스터는 여러 대의 서버(브로커)로 구성된 Kafka 시스템이다. 클러스터는 대량의 데이터를 처리하고, 여러 소비자(Consumer)와 생산자(Producer)에게 메시지 서비스를 제공한다.
- 클러스터는 메시지의 저장, 처리 및 전달을 담당한다. 클러스터는 고가용성과 확장성을 제공하며, 데이터를 여러 브로커에 분산시켜 저장한다.
2. 브로커(Broker)
브로커 이해하기
- Kafka 브로커는 Kafka 시스템을 구성하는 개별 서버다. 이 브로커들은 Kafka 클러스터를 형성하여, 전체 시스템의 일부로 작동한다.
데이터 저장 및 관리
- 각 브로커는 Kafka 토픽의 하나 이상의 파티션을 저장하고 관리한다. 이 파티션들에는 메시지 또는 레코드가 순차적으로 저장된다.
클라이언트 요청 처리
- 브로커는 Kafka 생산자(Producer)로부터 데이터를 받아 저장하고, 소비자(Consumer)의 요청에 따라 저장된 데이터를 제공한다.
고가용성 및 확장성
- Kafka는 데이터의 안정성을 위해 파티션을 여러 브로커에 복제한다. 이를 통해, 하나의 브로커에 장애가 발생해도 시스템은 계속 작동할 수 있다. 그리고 필요시 클러스터에 새로운 브로커를 추가하여 시스템의 처리 능력과 저장 용량을 확장할 수 있다.
리더와 팔로워
- 각 파티션에는 '리더'와 '팔로워' 브로커가 있다. 리더 브로커는 모든 읽기 및 쓰기 작업을 처리하고, 팔로워 브로커는 리더의 데이터를 복제한다. 이러한 구조는 데이터의 일관성을 유지하고, 부하를 분산시키는 데 도움이 된다.
통신 및 조정
- 브로커들은 클러스터 내에서 서로 통신하여 데이터의 동기화와 상태 정보를 공유한다. 이를 통해 클러스터 전체가 일관된 상태를 유지하고, 효율적으로 작동할 수 있다.
- Kafka 브로커는 Kafka 시스템의 중추적인 역할을 하며, 데이터의 저장, 처리 및 전송을 담당한다. 브로커들의 상호작용과 조정을 통해 Kafka는 대용량의 데이터를 효율적이고 안정적으로 관리할 수 있다.
3. 토픽(Topic)
토픽 이해하기
- Kafka 토픽은 메시지들의 특정 카테고리 또는 피드를 나타낸다. 토픽은 생산자(Producer)가 데이터를 보내는 대상이며, 소비자(Consumer)가 데이터를 읽는 출처다.
토픽의 특징
- 토픽은 데이터를 카테고리화하여 관리할 수 있게 해 준다. 예를 들어, 다양한 종류의 이벤트나 메시지들을 서로 다른 토픽으로 분류할 수 있다. 또한 하나의 토픽은 여러 소비자가 구독할 수 있으며, 이들은 토픽에서 발행된 모든 메시지를 읽을 수 있다.
4. 파티션(Partition)
파티션 이해하기
- 파티션은 Kafka 토픽을 구성하는 하위 단위다. 하나의 토픽은 여러 개의 파티션으로 나누어질 수 있으며, 이는 Kafka의 확장성과 병렬 처리 능력을 향상시킨다.
파티션의 역할 및 중요성
- 데이터 분산 및 병렬 처리: 각 파티션은 독립적으로 데이터를 저장하고, 여러 브로커에 걸쳐 분산될 수 있다. 이를 통해 Kafka는 데이터를 효율적으로 관리하고, 동시에 여러 소비자에게 서비스할 수 있다.
- 순차적 데이터 관리: 각 파티션 내에서 메시지는 순차적으로 저장되며, 이 순서는 파티션 내에서 유지된다. 이는 데이터의 일관성과 정확한 순서 보장에 중요하다.
- 스케일 아웃: 시스템의 부하가 증가할 때, 더 많은 파티션을 추가하여 처리 능력을 확장할 수 있다.
📌 토픽과 파티션의 상호작용
생산자는 메시지를 토픽의 파티션에 보낸다. 이때, 특정 파티션에 메시지가 지정되거나 라운드-로빈 방식으로 분산될 수 있다. 소비자는 하나 이상의 파티션에서 데이터를 읽는다. 소비자 그룹을 사용하면, 각 소비자는 다른 파티션에서 메시지를 읽어 처리 부하를 분산시킬 수 있다.
5. 세그먼트(Segment)
세그먼트 이해하기
- Kafka의 세그먼트는 파티션의 데이터를 실제로 저장하는 물리적인 파일이다. Kafka는 데이터를 파티션에 순차적으로 기록하지만, 이 데이터는 여러 세그먼트 파일로 나누어 저장된다.
세그먼트의 역할 및 특징
- 데이터 저장 단위: 세그먼트는 Kafka 파티션 내의 데이터를 저장하는 기본 단위다. 각 세그먼트 파일은 일정 크기에 도달하거나 특정 시간이 경과하면 새로운 세그먼트 파일로 전환된다.
- 효율적인 데이터 관리: 세그먼트 기반의 데이터 관리는 Kafka가 불필요한 데이터를 효율적으로 정리하고, 디스크 공간을 최적화하는 데 도움을 준다.
- 로그 컴팩션 및 삭제: Kafka는 설정에 따라 오래된 세그먼트 파일을 삭제하거나 로그를 컴팩션(중복 제거)하는 방식으로 데이터를 관리한다. 이는 저장 공간을 절약하고 시스템의 성능을 유지하는 데 중요하다.
세그먼트의 작동 방식
- 생산자가 파티션에 데이터를 기록할 때, Kafka는 이 데이터를 현재 활성 세그먼트 파일에 추가한다.
- 세그먼트 파일이 설정된 최대 크기에 도달하면, 새로운 세그먼트 파일이 생성되고, 이후의 데이터는 새 파일에 기록된다. 소비자는 이러한 세그먼트 파일들로부터 데이터를 읽어 처리한다.
세그먼트의 중요성
- 세그먼트는 Kafka의 데이터 저장 및 관리 방식의 핵심이다. 세그먼트를 통해 Kafka는 대용량 데이터를 효과적으로 처리하며, 시스템의 안정성과 성능을 유지할 수 있다.
- 세그먼트를 사용함으로써 Kafka는 디스크 I/O 작업을 최적화하고, 데이터의 순차적인 읽기 및 쓰기를 보장한다.
클러스터와 브로커의 동작을 이해해 보자👇🏻👇🏻
반응형
'유용한 개발지식 > Apache Kafka' 카테고리의 다른 글
Kafka(카프카) 파티션(partition) 쉽게 이해하기 (3) | 2023.12.27 |
---|---|
Kafka(카프카) 클러스터와 브로커의 동작 이해하기 (1) | 2023.12.27 |
Kafka(카프카)란 무엇인가 (2) | 2023.12.27 |
SpringBoot와 Kafka(1) - 기본설명 (0) | 2023.10.19 |
Apache Kafka 복제(Replication)와 장애 허용(Fault Tolerance) 메커니즘 (9편) (1) | 2023.10.19 |