레코드

김득회·2022년 9월 20일
0

Kafka

목록 보기
12/13

토픽의 파티션에 저장되는 데이터를 '레코드'라고 일컷는다고 저번에 학습을 하였다.
레코드는 타임스탬프, 메시지 키, 메시지 값, 오프셋, 헤더로 구성되어 있다.

타임스탬프

프로듀서가 브로커에 레코드를 전송하면 오프셋과 타임스탬프가 지정되어 저장된다.
브로커에 저장된 레코드는 수정 할 수 없고, 로그 리텐션 기간 또는 용량에 따라서만 제거가 가능하다.

해당 타임스탬프로 인해서 컨슈머가 레코드의 생성 시간을 알 수 있지만, 이 시간은 프로듀서가 임의로 설정할 수 있으며, 설정에 따라서 브로커에 적재된 시간으로 설정될 수도 있으니 유의해야한다.

메시지 키

메시지 값을 순서대로 처리하거나, 메시지 값의 종류를 나타내기 위해 사용한다.
메시지 키를 사용하면 프로듀서가 토픽에 레코드를 전송할 때 메시지 키의 해시값을 토대로 파티션을 지정하게 된다.
=> 동일한 메시지 키라면 동일 파티션에 저장한다.

But, 어느 파티션에 들어가는 지는 알 수 없고 파티션 개수가 변경되면 메시지 키와 파티션 매칭이 달라진다.

메시지 키를 사용하지 않을 때에는 레코드를 전송할 때 메시지 키를 선언하지 않으면되고 null로 처리된다.

메시지 값

실제 데이터를 특정 타입으로 직렬화를 하여 저장을 할 때에, 역 직렬화도 같은 타입으로 해야한다.

오프셋

레코드의 오프셋은 0이상의 숫자로 이루어져있는데, 사용자가 직접 오프셋을 지정할 수 없다. 브로커에 저장 될 때에 직전의 오프셋 + 1을 하여 저장하는 형식이다.

오프셋은 컨슈머가 레코드를 가져갈 때 사용하며 오프셋을 사용하면 카프카 컨슈머들이 파티션의 데이터를 어디까지 가져갔는지 명확하게 지정할 수 있다.

헤더

레코드의 추가적인 정보를 담는 메타데이터 저장소 용도로 사용한다.
키/값 형태로 데이터를 추출하여 레코드의 속성(스키마 버전) 등을 저장하여 컨슈머가 참조할 수 있다.

profile
감성 프로그래머 HoduDeuk

0개의 댓글