세그먼트

테크·2023년 1월 10일
0

카프카(Kafka)

목록 보기
6/8

세그먼트 (로그 세그먼트)

카프카의 토픽으로 들어오는 메시지는 모두 세그먼트라는 파일로 저장됩니다. 세그먼트에는 메시지의 내용뿐만 아니라 메시지의 키, 밸류, 오프셋, 메시지 크기 같은 부가 정보도 같이 저장되며 브로커의 로컬 디스크에 저장되게 됩니다.

세그먼트의 최대 크기는 기본적으로 1GB로 적용되어 있으며 크기가 너무 커지면 관리가 어려워지므로 1GB가 찰 때까지 정보를 저장하다가 새롭게 세그먼트를 생성해서 정보를 저장하는 롤링 전략을 사용합니다.

롤링 전략을 통해서 세그먼트 파일을 나눌 수 있지만 전체 저장 크기가 커지는 문제가 생길 수 있으므로 카프카는 세그먼트를 삭제와 컴팩션 전략을 통해 관리합니다.

삭제

세그먼트 삭제 옵션은 log.cleanup.policy에 delete로 명시되어야 하며 기본값으로 적용되어 있습니다. retention.ms 값을 조정해서 세그먼트의 보관 기간을 지정할 수 있으며 기본값은 7일입니다.

카프카의 세그먼트 삭제 작업은 일정 주기로 수행되며 retention.ms를 확인해서 보관 기간이 지난 데이터를 삭제합니다. 기본값은 5분입니다.

컴팩션

컴팩션은 세그먼트 관리 방법 중 하나로 세그먼트의 로그 정보를 삭제하지 않고 압축해서 저장하는 방법입니다. 세그먼트 압축 과정은 메시지의 키값을 기준으로 가장 마지막의 데이터만 보관하는 형식으로 수행됩니다.

이를 활용하는 대표적인 예제가 __consumer_offset 이라는 내부 토픽으로 해당 토픽은 컨슈머 그룹 오프셋 정보를 키(컨슈머 그룹명, 토픽명)와 밸류(오프셋 커밋 정보)로 저장하는 토픽입니다. 키를 기준으로 가장 마지막에 받은 메시지의 밸류만 남기고 그 전의 메시지는 삭제해서 용량을 압축합니다.

컴팩션은 복구 시 전체 세그먼트를 복구하지 않고 가장 마지막 상태만 복구하므로 복구 시간이 컴팩션을 적용하지 않은 상태보다 빠릅니다. 그렇지만 컴팩션 작업이 수행되는 동안 브로커는 지속적으로 입출력을 수행하므로 부하가 발생할 수 있어 브로커의 리소스를 모니터링하면서 옵션을 적용하는 것을 권장합니다. 또한, 컴팩션은 키값을 기준으로 가장 마지막의 데이터만 저장하므로 이전의 모든 데이터가 필요할경우 컴팩션을 사용할 수 없습니다. 따라서 키값에 따라서 최종값만 필요할경우 사용하는 것이 권장됩니다.

실전 카프카 개발부터 운영까지 4장

profile
공부하는 개발자

0개의 댓글