1. 토픽(Topic)
토픽은 kafka에서 데이터가 저장되고 분배되는 논리적인 채널이다. 카프카는 메시지 피드들을 토픽으로 구분하며 각 토픽의 이름은 카프카 내에서 고유하다. 예를 들어, 'user-signups' 라는 토픽은 사용자 가입 정보를 저장할 수 있다.
2. 파티션(Partition)
파티션은 토픽을 나누는 방법이다. 하나의 토픽은 여러 개의 파티션으로 나눌 수 있으며, 각 파티션은 독립적으로 로그처럼 동작한다.(종종 "파티션"과 "로그"를 같은 의미로 사용한다.) 파티션은 데이터 순서를 보장하며, 동시에 읽기와 쓰기 작업을 병렬로 처리할 수 있게 해준다.
3. 세그먼트(Segment) 또는 로그 세그먼트(log segment)
파티션에 기록된 데이터는 로그 세그먼트 파일이라는 물리적 파일에 저장된다. 세그먼트는 파티션 내부에서 로그를 물리적으로 나눈 것이다. 파티션은 여러 개의 세그먼트로 구성되며, 각 세그먼트는 일정한 크기나 기간에 따라 나뉜다. 세그먼트는 디스크에 연속적으로 저장되어 파티션 데이터를 관리하는 데 효율성을 높인다.
Kafka는 파티션을 세그먼트라는 작은 파일 단위로 나누고, 이러한 세그먼트들을 관리하기 위해 롤링 파일 전략을 사용한다.
🤔 롤링 파일 전략(Rolling File Strategy)
롤링 파일 전략은 일정한 크기나 시간 간격에 따라 새로운 파일(세그먼트)을 생성하는 방식이다. 이를 통해 Kafka는 데이터 로그를 관리한다.
1. 세그먼트 생성(로그 롤링)
Kafka는 초기 설정된 크기나 시간 간격에 따라 새로운 세그먼트를 만든다. 예를 들어, 세그먼트의 최대 크기를 1GB로 설정한 경우 데이터가 1GB에 도달하면 새로운 세그먼트 파일을 생성한다. 또는 시간 기반으로 설정된 경우, 예를 들어 1시간마다 새로운 세그먼트를 생성할 수 있다.
2. 기존 세그먼트 유지
새로운 세그먼트가 생성되면 이전 세그먼트는 로그 파일로 남아 계속 읽을 수 있다.
3. 세그먼트 정리
Kafka는 설정된 기간이 지나면 오래된 세그먼트를 삭제한다. 예를 들어, 메시지를 7일 동안 유지하도록 설정된 경우 7일이 지난 세그먼트는 자동으로 삭제되어 디스크 공간을 절약한다.
따라서 롤링 파일 전략은 크기 기반, 시간 기반 중 선택하면 된다.
파티션 데이터는 시간이 지남에 따라 계속 증가하지만 오래된 데이터를 자동으로 삭제할 수 있어 Kafka 스토리지를 관리하고, 최신 데이터에 빠르게 접근할 수 있다.
Kafka 토픽, 파티션, 세그먼트를 전체적 구조로 보자면 다음과 같다.
Kafka 브로커는 Kafka 서버 역할을 한다. 브로커는 파티션에 대한 읽기와 쓰기 요청을 관리한다. 브로커는 데이터를 안전하게 저장하고 필요할 때 데이터를 제공하는 역할을 한다.
Kafka 클러스터는 여러 개의 브로커가 모여서 구성된 그룹이다. 클러스터 내 브로커들은 협력하여 데이터를 저장하고 관리한다. 브로커가 많을수록 더 많은 데이터를 빠르게 처리할 수 있다.
예를 들어 각 토픽은 여러 파티션으로 나뉘었다고 할 때, (토픽1은 파티션 0, 1, 2 / 토픽2는 파티션 0,1 / 토픽3은 파티션 0, 1, 2, 3) 클러스터 내의 여러 브로커들이 이 파티션들을 나누어 관리한다. 예를 들어 브로커 1은 토픽1의 파티션 0과 토픽3의 파티션 0을 관리할 수 있다.
🗣️ ChatGPT 요약
Kafka 브로커: 데이터를 저장하고 관리하는 서버.
Kafka 클러스터: 여러 브로커가 모여서 데이터를 효율적으로 처리하는 그룹.
파티션: 데이터를 나누어 저장하는 작은 단위.
주제(Topic)는 각각 여러 파티션으로 나뉘며, 클러스터 내의 브로커들이 이를 나누어 관리합니다.
'개발 > KAFKA' 카테고리의 다른 글
CDC(Change Data Capture) (0) | 2024.07.03 |
---|---|
카프카(Apache Kafka) (0) | 2024.02.02 |