Kafka Topic
Topic
카프카에는 다양한 데이터가 들어갈 수 있는데 데이터가 들어갈 수 있는 공간을 Topic이라고 부른다.
kafka에서는 토픽을 여러개 생성할 수 있다.
데이터베이스의 테이블이나 파일시스템의 폴더와 유사하다.
Producer는 카프카에 데이터를 넣게 되고 Comsumer는 데이터를 가져가게 된다.
Topic은 이름을 가질 수 있다. 목적에 따라 명확하게 명시하는 것이 유지보수 시 편리하다.
Topic 내부
하나의 토픽은 여러개의 partition으로 구성할 수 있다.
첫번째 파티션 번호는 0번부터 시작.
하나의 파티션은 큐와 같이 내부에 데이터가 파티션 끝에서부터 차곡차곡 쌓이게 된다.
click log 토픽에 카프카 컨슈머가 붙게 되면 데이터를 가장 오래된 순서대로 가져가게 된다.
더이상 데이터가 들어오지않으면 컨슈머가 또 다른데이터가 들어올때까지 기다린다.
컨슈머가 토픽 내부의 파티션에서 데이터를 가져가더라도 데이터는 삭제되지 않는다.
파티션에 그대로 남아서 새로운 컨슈머가 붙었을 때 다시 0번부터 가져가서 사용할 수 있다.
- 컨슈머 그룹이 달라야하고,
- auto.offset.reset = earliest
위와 같이 세팅되어 있어야한다.
이 처럼 동일 데이터에 대해 두번 처리할 수 있는데, 카프카를 사용하는 아주 중요한 이유
이다.
Partition이 2개 이상인 경우
파티션을 늘리는 이유는 컨슈머의 개수를 늘려서 데이터 처리를 분산할 수 있다.
프로듀서가 데이터를 보낼 때 키를 저장할 수 있다.
파티션을 늘리는 것은 아주 조심해야한다.
파티션을 늘리는 것은 가능하지만 줄일 수는 없다.
키를 지정하는 경우, key를 특정한 hash값으로 변환시켜 파티션과 1:1매칭이 되게한다.
따라서 위의 코드를 반복해서 실행시키면 각 파티션에 동일 key의 value만 쌓이게 되는 것.
파티션을 1개 더 추가하게 되면, key와 파티션의 매칭이 깨지기 때문에
토픽에 파티션을 추가하는 순간 키<->파티션의 일관성은 보장되지 않는다.
key를 사용할 경우 이점을 유의해 파티션 개수를 생성하고 추후에 생성하지 않는 것을 권장.
Partition의 recode는 언제 삭제되는가?
- log.retention.ms : 최대 record 보존 시간
- log.retention.byte : 최대 recored 보존 크기(byte)
일정한 기간, 용량동안 데이터를 저장하고 적절하게 데이터가 삭제될 수 있다.
'Study > Kafka' 카테고리의 다른 글
Spring Boot Kafka Producer 설정 (0) | 2023.12.07 |
---|---|
springboot에서 kafka 연동 (2) | 2023.12.07 |
Kafka 고가용성(HA)의 핵심 - Broker, Replication, ISR (2) | 2023.11.30 |
kafka, zookeeper properties file 작성법 (1) | 2023.11.30 |
Kafka 커맨드 라인 명령어 (0) | 2023.11.30 |
댓글