3.3 레코드

문법식·2022년 8월 31일
0

레코드는 타임스탬프, 메시지 키, 메시지 값, 오프셋, 헤더로 구성되어 있다. 프로듀서가 생성한 레코드가 브로커로 전송되면 오프셋과 타임스탬프가 지정되어 저장된다. 브로커에 한번 적재된 레코드는 수정할 수 없고 로그 리텐션 기간 또는 용량에 따라서만 삭제된다. 각 구성 요소의 특징에 대해서 알아보겠다.

타임스탬프

타임스탬프는 프로듀서에서 헤당 레코드가 생성된 시점의 유닉스 타임이 설정된다. 컨슈머는 레코드의 타임스탬프를 토대로 레코드가 언제 생성되었는지 알 수 있다. 다만, 프로듀서가 레코드를 생성할 때 임의의 타임스탬프 값으로 설정할 수 있고, 토픽 설정에 따라 브로커에 적재된 시간으로 설정될 수 있다는 점을 유의해야 한다.

메시지 키

메시지 키는 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용한다. 메시지 키를 사용하면 프로튜서가 토픽에 레코드를 전송할 때 메시지 키의 해시값을 토대로 파티션을 지정하게 된다. 동일한 메시지 키라면 동일한 파티션에 들어가는 것이다. 하지만, 어느 파티션에 지정될지 알 수 없고 파티션 개수가 변경되면 메시지 키와 파티션 매칭이 달라지게 되므로 주의해야 한다. 만약 메세지 키를 사용하지 않는다면 프로듀서에서 레코드를 전송할 때 메시지 키를 선언하지 않으면 된다. 메서지 키를 선언하지 않으면 null로 설정되고 프로듀서의 기본 설정 파티셔너에 따라 파티션에 분배된다.

메시지 값

메시지 값에는 실질적으로 처리할 데이터가 들어 있다. 메시지 키와 메시지 값은 직렬화되어 브로커로 전송되기 때문에 컨슈머가 이용할 때는 직렬화한 형태와 동일한 형태로 역직렬화를 해야 한다.만약 프로듀서가 StringSerializer로 직렬화한 메시지 값을 컨슈머가 IntegerSerializer로 역직렬화하면 정상적인 데이터를 얻을 수 없다

오프셋

레코드의 오프셋은 0 이상의 숫자로 이루어져 있다. 레코드의 오프셋은 직접 지정할 수 없고 브로커에 지정될 때 이전에 전송되 레코드의 오프셋+1 값으로 생성된다. 오프셋은 카프카 컨슈머가 데이터를 가져갈 때 사용된다. 오프셋을 사용하면 컨슈머 그룹으로 이루어진 카프카 컨슈머들이 파티션의 데이터를 어디까지 가져갔는지 명확히 지정할 수 있다.

헤더

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

profile
백엔드

0개의 댓글