아파치 카프카 입문 강의를 보고 정리합니다.
Topic
데이터가 들어가는 공간을 topic이라고 부른다.
Kafka topic은 일반적인 AMQP(Advanced Message Queing Protocol)와는 다르게 동작한다.
kafka에서는 topic을 여러개 생성할 수 있으며, DB의 테이블이나 파일 시스템의 폴더와 유사한 성질을 가진다.
topic은 이름을 가질 수 있으므로 어떤 데이터를 담는지, 목적에 따라 명확하게 명시하면 추후 쉽게 유지보수가 가능하다.
Topic 내부, Partition
하나의 topic은 여러개의 partition으로 구성될 수 있다.
partition 번호는 0번부터 시작하며, queue와 같이 끝에서부터 데이터가 차곡차곡 쌓인다.
한 topic에 consumer가 붙게 되면 가장 오래된 데이터부터 순서대로 가져가며, 더이상 데이터가 없으면 또 다른 데이터가 들어올 때까지 기다린다.
consumer가 topic 내부 partition에서 데이터를 가져가도 데이터는 삭제되지 않는다. 따라서 새로운 consumer가 붙었을 때 다시 0번 데이터부터 가져갈 수 있다.
다만 consumer 그룹이 달라야 하며, auto.offset.reset 옵션이 earliest로 세팅되어 있어야 한다.
→ offset : consumer가 topic의 데이터를 어디까지 읽었는지 저장값
auto.offset.reset 옵션
// consumer가 topic 구독 후 partition에 처음 들어오는 데이터부터
auto.offset.reset = latest
// 가장 처음 offset부터 즉, 가장 오래된 데이터
auto.offset.reset = earliest
// offset 찾지 못하면 exception 발생
auto.offset.reset = none
데이터가 삭제되지 않기 때문에 동일한 데이터에 대해 1번 이상 처리할 수 있는데 이는 kafka를 사용하는 아주 중요한 이유이기도 하다.
클릭 로그를 분석하고 시각화하기 위해 Elasticsearch에 저장하고, 클릭 로그를 백업하기 위해 Hadoop에 저장할 수도 있다.
Partition이 2개 이상인 경우
Producer는 데이터를 보낼 때 키를 지정할 수 있다.
Producer가 새로운 데이터를 보내면 아래 규칙에 따라 partition이 지정된다.
1. key가 null, 기본 partitioner 사용
→ RR(Round-robin)로 할당
2. key가 존재, 기본 partitioner 사용
→ key의 hash값 구하고 특정 partition에 할당
Partition을 늘리는 이유
partition을 늘리는 것은 가능하나 다시 줄일 수는 없다.
그렇다면 왜 partition을 늘리는 것일까?
바로 데이터 처리를 분산시키기 위해서이다. partition을 늘리면 consumer를 늘려서 데이터 처리를 분산시킨다.
Partition의 Record가 삭제되는 시점
삭제되는 타이밍은 옵션에 따라 다르며, 아래 방법으로 record가 저장되는 최대 시간과 길이를 지정할 수 있다.
// 최대 record 보존 시간
log.retention.ms
// 최대 record 보존 크기(byte)
log.retention.byte
위 방법을 통해 일정 기간 혹은 용량만큼 데이터를 저장할 수 있게 되며, 적절한 시점에 데이터가 삭제되게 설정할 수 있다.
'Data > Kafka' 카테고리의 다른 글
Kafka | Broker, Replication, In-Sync Replica (0) | 2024.02.08 |
---|---|
Kafka | 아파치 카프카 개요 및 설명 (0) | 2024.02.07 |