Infra/Kafka
[Kafka] Topic
yejiji
2023. 1. 15. 20:17
토픽이란?
카프카에 다양한 데이터가 들어가는 공간
- 여러개 생성 가능
- 데이터베이스의 테이블이나 파일시스템의 폴더와 유사한 성질
- 프로듀서가 데이터를 넣고 컨슈머가 가져가는 구조
- 이름을 가질 수 있음 (목적에 맞게 담는 데이터를 정확하게 명시하면 유지보수 편리해짐)
토픽의 내부
- 여러개의 파티션으로 구성
- 파티션 번호는 0번부터 시작
- 큐와 같이 데이터가 쌓임
- 컨슈머는 가장 오래된 순서대로 데이터 가져가며, 더 이상 가져갈 데이터가 없으면 들어올 때까지 대기함
- 컨슈머가 record 들을 가져가도 데이터 삭제되지 않고 파티션에 그대로 남아 있음
- 파티션에 남아있는 데이터는 새로운 컨슈머가 붙었을 때 다시 0번부터 가져가서 사용 (아래의 조건 존재)
- 컨슈머 그룹이 달라야 함
- auto.offset.reset = earliest 로 셋팅되어 있어야 함 ⇒ 동일 데이터에 대해 여러번 처리 가능
** Partition이 2개 이상인 경우
- 키가 null 이고, 기본 파티셔너 사용할 경우 ⇒ 라운드 로빈으로 할당
- 키가 있고, 기본 파티셔너 사용할 경우 ⇒ 키의 hash 값을 구하고, 특정 파티션에 할당
✔️ 파티션은 늘리는 건 가능하지만, 줄일 수는 없으므로 늘릴 때 주의해야 함
- 파티션을 늘리는 이유 ⇒ 컨슈머 개수를 늘려서 분산처리가 가능해짐
- 파티션의 record 삭제 시점 ⇒ 설정에 따라 다름
- log.retention.ms : 최대 record 보존 시간
- log.retention.byte : 최대 record 보존 크기 (byte)