Kafka 토픽의 retention.ms=3600000 으로 설정해서 1시간마다 토픽의 메세지가 삭제되게 설정을 했는데 메세지가 시간이 지나도 삭제가 안되었습니다.
사유를 확인해보니 Kafka의 메시지는 로그 세그먼트 파일로 저장되는데 메시지 삭제는 로그 세그먼트 단위로 이루어지기 때문에, 해당 세그먼트가 닫히지 않으면 메시지가 삭제되지 않는다고 합니다.
Kafka에서는 segment.ms(segment 생성 주기), segment.bytes(segment를 파일 크기)를 통해 신규 segment를 언제 생성할지를 결정합니다.
따로 설정 하지 않았으면 아래의 default값으로 설정이 되고 해당 기준에 걸리지 않으면 신규 segment 파일이 생성 안되고 segment 파일이 닫히지 않았기 때문에 토픽의 retention.ms이 지나도 메세지가 삭제가 안됩니다.
segment.ms default 값 : 604800000(7일)
segments.bytes default값 : 1073741824(1 gibibyte)
segment 파일은 Kafka 메세지가 저장되는 Kafka 폴더를 확인해보면 토픽명-파티션번호 폴더에 아래와 같이 생성됩니다.
bitnami/kafka helm 차트를 사용해서 kafka를 설치했기 때문에 extraConfig에 segment.ms 설정을 아래와 같이 추가했습니다.
extraConfig: |
segment.ms=3600000
그리고 helm 차트를 upgrade하고 Kafka server.properties 파일을 확인해보니 아래와 같이 extraConfig로 설정한 segment.ms가 설정되었음을 확인할 수 있습니다.
그리고 설정한 segment 생성 기준에 걸리면 아래와 같이 신규 segment 파일이 생깁니다.
그 후에 retention.ms가 지났으면 이전에 생성됬던 segment 파일이 삭제되는것을 확인할 수 있습니다.
참고자료
'개발 > Kafka' 카테고리의 다른 글
Kafka 토픽 메시지 삭제: 디스크 공간 확보 방법 (0) | 2024.08.12 |
---|---|
[Kakfa] No `meta.properties` found in /tmp/kraft-combined-logs 에러 수정 (0) | 2024.03.28 |
Apache Kafka Raft(KRaft) 소개(ZooKeeper 제거) (0) | 2024.02.13 |
Spring Boot에서 Kafka Topic이 Consume 안되는 현상 수정 (1) | 2024.01.29 |
Kafka 서버 비정상적 종료 에러 해결 (다른 프로세스가 파일을 사용 중이기 때문에 프로세스가 액세스 할 수 없습니다) (0) | 2024.01.25 |