DevBoi

[Kafka] 레코드란? 본문

Develop/[Kafka]

[Kafka] 레코드란?

HiSmith 2023. 7. 21. 19:30
반응형

카프카의 레코드의 구조는 아래와 같다.

프로듀서가 생성한 레코드가 브로커로 전송되면 오프셋과 타임스탬프가 지정되어 저장된다.

전송할때는 당연히 지정하여 보내는 것이 아니다.

 

 

1.  타임스탬프

타임스탬프는 스트림 프로세싱에서 활용하기 위한 시간을 저장하는 용도로 사용된다.

Unix timstamprk 포함되며 프로듀서에서 따로 설정하지 않으면

기본값으로 ProducerRecord 의 생성 시간이 들어간다.

적재시간으로 변경할 수도있다.

 

2. 레코드 - 오프셋

프로듀서가 생성한 레코드에는 존재하지 않는다.

프로듀서가 전송한 레코드가 브로커에 적재될때 오프셋이 지정된다. (0부터 1씩 증가한다.)

컨슈머는 오프셋을 기반으로 처리가 완료된 데이터와 앞으로 처리해야할 데이터를 구분한다.

각 메시지는 파티션별 고유한 오프셋을 가지므로, 컨슈머에서 중복 처리를 방지하기 위한 목적으로도 사용한다.

 

3. 헤더

key/value 로 추가가 가능하고, 레코드의 스키마 버전이나 포맷으로, 데이터 프로세싱에 참고 데이터를 넣어서 사용가능하다.

 

4. 메시지 키

메시지 키는 처리하고자하는 메시지 값의 분류하기 위한 용도로 사용되며, 이를 파티셔닝이라고 부른다.

파티셔닝에 사용하는 메시지 키는 파티셔너에 따라 토픽의 파티션 번호가 정해진다.

메시지 키는 필수 값이 아니며, 지정하지 않으면, Null로 설정된다.

메시지 키가 null인 레코드는 특정 토픽의 파티션에 라운드로빈으로 전달된다.

 

쉽게 얘기하면, 어디 파티션으로 들어갈지 정할수 있고, 정하지 않으면 순회하면서 라운드로빈방식으로

파티션에 균등하게 들어가기 위해 정해져서 저장이 되고

Null 이 아닌 경우는 해쉬값에 의해서 특정 파티션에 매핑되어 전달 된다.

 

5. 메시지 value

실질적으로 처리할 데이터가 담기는 공간이다.

제네릭으로 사용자에 의해 지정된다. 컨슈머는 미리 역직렬화 포맷을 알고있어야 한다.

대부분, String으로 처리하고, 공간낭비가 심한 경우 특수한 형태로 사용한다.

 

 

 

반응형

'Develop > [Kafka]' 카테고리의 다른 글

[Kafka] 클라이언트 메타데이터와 브로커 통신  (0) 2023.07.26
[Kafka] 카프카 토픽 이름 정하기  (0) 2023.07.21
[Kafka] 토픽과 파티션  (0) 2023.07.21
[Kafka] ISR (In-Sync-Replicas)  (0) 2023.07.21
[Kafka] Replica  (0) 2023.07.20