[카프카] 데이터 보관
카프카는 컨슈머(Consumer)가 데이터를 가져가더라도 토픽(Topic)의 데이터는 삭제되지 않는다.
컨슈머나 프로듀서(Proucer) 또한 데이터의 삭제를 요청할 수 없다.
오직 브로커 만이 데이터를 삭제할 수 있다.
데이터 삭제는 파일 단위 '로그 세그먼트 (log segment)'로 이루어진다.
로그 세그먼트 (log segment)
로그 세그먼트에는 다수의 데이터가 들어 있기 때문에 다른 데이터베이스처럼 특정 데이터를 삭제할 수 없다.
세그먼트는 데이터가 쌓이는 동안 파일 시스템으로 열려있으며 카프카 옵션에 따라 파일이 닫힌다.
세그먼트 파일이 닫히는 간격을 줄이기 위해 log.segment.bytes
를 작은 용량으로 설정하면 데이터들을 저장하는 동안 세그먼트 파일을 주자 여닫음으로써 부하가 발생할 수 있으므로 주의해야 한다.
로그 보관 주기 옵션
log.segment.bytes
- 바이트 단위로 최대 세그먼트 크기를 정의 (기본값: 1GB)
log.segment.ms
- log segment 파일이 닫히게 (삭제) 되는 시간을 정의
log.cleanup.policy
- delete 또는 compact로 설정(기본값: delete)하며 토픽단위로 설정 가능
- delete로 설정된 경우 로그 세그먼트는 시간이나 크기제한에 도달할 때 주기적으로 삭제
- compact로 설정된 경우 불필요한 레코드를 없애기 위해 압축을 사용
log.retention.bytes
- 파티션의 최대 크기를 제어하며 이 값은 모든 파티션에 적용
- “delete” retention policy를 사용하고 있고, 파티션의 크기가 retention.bytes를 넘어서는 경우엔 예전 로그를 삭제하고 새로운 로그를 추가한다.
- 기본값은 -1로 파티션의 크기에 제약을 주지 않는다. (이 경우엔 retention.ms 값을 얼마로 하는지에 따라 파티션의 크기가 결정된다.)
- ex) 3개의 파티션으로 구성된 토픽에 log.retention.bytes를 10MB 로 설정하면 해당 토픽에 보관되는 메시지의 전체 크기는 최대 30MB 가 된다.
log.retention.ms
- 로그 세그먼트를 보유할 시간을 정의 (기본값: 7일, 토픽별로 정의 가능)
log.retention.check.interval.ms
- 삭제할 대상을 확인하기 위한 닫힌 세그먼트 파일을 체크하는 간격 (기본값: 5분)
log.cleaner.enable
- 압축을 활성화 하려면 true로 설정
log.cleaner.threads*
- 로그의 압축을 위한 작업자 스레드 수 지정
log.cleaner.backoff.ms
- 정리가 필요한 로그가 있는지 확인하는 주기
log.index.size.max.bytes
- 바이트 단위로 오프셋 인덱스의 최대 크기를 설정 (기본값: 1GB)
- 토픽별로 설정 가능
log.index.interval.byte
- 새로운 항목이 오프셋 인덱스에 추가되는 주기 (기본값: 4096)
- 데이터를 가져오는 개별 요청에서 브로커는 가져오기를 시작하고 끝낼 로그 내의 올바른 위치를 찾기 위한 바이트 수에 대해 일정하게 살펴본다.
- 값을 높게 설정한 경우 인덱스 파일이 커지고 더 많은 메모리를 사용하게 되지만 검사하는 횟수는 줄어듬
log.flush.interval.message
- 디스크로 내보내기 전에 메모리에 보유할 메시지의 개수 (기본값: 922337036854775807)
- 확실하게 보유하는지 보장하는 것은 아니나, 알맞게 제어하도록 도와줌
log.flush.interval.ms
- 디스크로 내보내기 전에 메모리에 보유할 토픽 내의 메시지에 대한 최대 시간을 밀리초 단위로 설정
References
- 아파치 카프카 애플리케이션 프로그래밍 with 자바
- 카프카가 데이터를 저장하는 방식
- kafka 로그 설정 에 대하여 :: My data lab
- Kafka retention 옵션 - log 보관 주기 설정
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Kafka' 카테고리의 다른 글
[Kafka] 카프카 커맨드 라인 툴 (command-line tool) (0) | 2021.11.23 |
---|---|
[Kafka] 원하는 tweet을 Kafka에서 ElasticSearch로 보내기 (0) | 2021.11.23 |
[Kafka] Advanced Topic Configurations (0) | 2021.11.23 |
댓글