
토픽(Topic)
• Kafka에서 데이터를 저장하고 관리하는 논리적 개념입니다.
• 토픽은 특정 범주의 메시지를 위한 채널 역할을 합니다.
• 프로듀서(Producer)는 특정 토픽에 메시지를 전송하고, 컨슈머(Consumer)는 특정 토픽에서 메시지를 읽음.
• 토픽은 다수의 파티션(Partition)으로 나뉘어 저장됨.
• 예제
예를 들어, 로그 수집 시스템을 운영할 때,
• web-logs 토픽: 웹 서버 로그
• app-logs 토픽: 애플리케이션 로그
• db-logs 토픽: 데이터베이스 로그
이처럼 다양한 토픽을 만들어 메시지를 분류할 수 있음.
파티션(Partition)
• 토픽의 데이터를 물리적으로 나누어 저장하는 단위입니다.
• 토픽은 여러 개의 파티션으로 구성되며, 각 파티션은 독립적인 로그 파일로 저장됨.
• Kafka는 파티션을 여러 브로커에 분산 저장하여 확장성과 병렬 처리를 지원.
• 각 파티션은 메시지를 순서대로 저장하며, 각 메시지에는 오프셋(Offset)이 부여됨.
• 예제
order-events라는 토픽을 3개의 파티션으로 구성할 경우
Partition 0: [M1, M4, M7, ...]
Partition 1: [M2, M5, M8, ...]
Partition 2: [M3, M6, M9, ...]
컨슈머 그룹에서 여러 컨슈머가 병렬로 메시지를 소비할 수 있도록 도와줌
오프셋(Offset)
• Kafka에서 각 메시지의 고유한 식별자(ID) 역할을 함.
• 각 파티션 내에서만 유효한 값으로, 파티션별로 메시지는 0부터 증가하는 오프셋을 가짐.
• 컨슈머가 메시지를 읽을 때, 어디까지 읽었는지를 저장하는 값.
• 컨슈머가 재시작할 경우, 이전 오프셋부터 다시 메시지를 읽을 수 있음.
• 오프셋은 Kafka의 내부 토픽(__consumer_offsets)에 저장됨.
• 예제
payment-events 토픽의 Partition 0에 저장된 메시지
Offset 0: Payment A
Offset 1: Payment B
Offset 2: Payment C
...
컨슈머가 Offset 1까지 읽었다면, 다음에는 Offset 2부터 읽음.
컨슈머 그룹(Consumer Group)
• Kafka에서 여러 컨슈머를 그룹화하여 특정 토픽을 병렬 처리하는 구조.
• 같은 컨슈머 그룹 내 컨슈머들은 파티션을 나누어 소비.
• 각 파티션은 하나의 컨슈머에게만 할당됨 (다른 컨슈머 그룹은 같은 파티션을 읽을 수 있음).
• 컨슈머가 추가되거나 제거되면 리밸런싱(Rebalancing)이 발생하여 파티션이 재할당됨.
• 예제
order-events 토픽이 3개의 파티션으로 구성되었을 때
• 컨슈머 그룹 A에서 3개의 컨슈머가 있으면 → 각 컨슈머가 하나의 파티션을 읽음.
• 컨슈머 그룹 B에서 1개의 컨슈머가 있으면 → 3개 파티션의 데이터를 혼자 처리.
리더 & 팔로워 (Leader & Follower)
• Kafka의 고가용성을 보장하는 리플리케이션(Replication) 구조
• 각 파티션은 리더(Leader)와 팔로워(Follower) 로 나뉨.
• 리더 : 클라이언트가 직접 데이터를 쓰고 읽는 역할.
• 팔로워 : 리더의 데이터를 복제하여 장애 발생 시 자동 승격 가능.
• 예제
파티션 order-events-0이 3개의 복제본(replica)으로 구성된 경우
Leader: Broker 1 (읽기/쓰기 가능)
Follower: Broker 2 (리더 복제)
Follower: Broker 3 (리더 복제)
• 만약 Broker 1이 다운되면, Broker 2가 새로운 리더로 승격됨.
리밸런싱 (Rebalancing)
• Kafka는 컨슈머 그룹에서 컨슈머 수가 변경될 때 파티션을 재할당하는 과정을 수행함.
• 컨슈머가 추가되면, 기존 컨슈머의 일부 파티션이 새로운 컨슈머에게 재할당됨.
• 컨슈머가 제거되면, 남은 컨슈머가 파티션을 다시 나누어 처리.
• 리밸런싱 중에는 일시적으로 메시지 소비가 중단될 수 있음.
• 예제
컨슈머 그룹 group-A가 3개 파티션을 소비하는 경우
1. 컨슈머가 2개 → 각 컨슈머가 1~2개씩 처리.
2. 컨슈머 1개 추가됨 → Kafka가 자동으로 파티션을 재할당.
로그 세그먼트(Log Segment)
• Kafka는 메시지를 디스크에 저장하며, 이를 로그(Log) 파일로 관리함.
• 각 파티션은 여러 개의 로그 세그먼트 파일로 구성됨.
• Kafka는 설정된 보존 정책(retention policy)에 따라 오래된 데이터를 삭제 가능.
• 보존 정책
• 시간 기반(log.retention.hours): 일정 시간이 지나면 메시지를 삭제.
• 크기 기반(log.retention.bytes): 특정 크기를 초과하면 메시지를 삭제.
프로듀서(Producer) 설정 요소
• 프로듀서는 Kafka에 데이터를 보내는 역할을 하며, 주요 설정은 다음과 같음
• ack 설정: 메시지 전송의 보장 수준 설정
• acks=0: 프로듀서가 메시지를 보내기만 하고 확인 안 받음 (빠르지만 데이터 유실 가능)
• acks=1: 리더가 수신하면 성공 응답 (기본값)
• acks=all: 모든 팔로워가 복제 완료 후 응답 (가장 안정적)
• 배치 전송 (batch.size): 메시지를 모아서 한 번에 전송
• 압축 (compression.type): gzip, snappy, lz4 등의 압축 지원
'IT > Kafka' 카테고리의 다른 글
Kafka 메시지를 구독하는 자바 소스 예시 (2) | 2025.02.28 |
---|---|
Apache Kafka - API (0) | 2025.02.26 |
Apache Kafka 유사한 오픈소스 및 상용솔루션 사례 (0) | 2025.02.26 |
Apache Kafka - 신뢰성 보증 방안 (0) | 2025.02.26 |
Apache Kafka 소개 (4) | 2025.02.25 |