티스토리 뷰

IT/Kafka

[Kafka] 레코드

forest-33 2024. 4. 27. 18:03

레코드란 ? 

 

  • 프로듀서에서 생성된 메시지의 단위 
  • 프로듀서에서 레코드를 생성 후 브로커로 전송됨
  • 레코드는 timestamp, offset, headers, key, value로 이뤄져 있음
  • offset과 timestamp는 브로커로 전송되었을 때 지정되어 저장됨
  • 브로커에 한번 적재된 레코드는 삭제될 수 없고 리텐션 기간 또는 용량에 따라 삭제됨

 

timestamp

  • 레코드의 타임스템프는 스트림 프로세싱에서 활용하기 위해 시간 저장하는 용도로 사용됨
  •  ProducerRecord 생성시간이 또는 브로커 적재시간으로도 설정 가능(기본값으로 ProducerRecord 생성시간)
    • message.timestamp.type으로 설정 가능
    • 토픽 단위로 설정 가능 

 

offset

  • 레코드의 오프셋은 프로듀서가 생성한 레코드에 존재하지 X
  • 브로커에 적재될 때 오프셋 지정 
  • 오프셋은 0부터 시작되며 1씩 증가 
  • 컨슈머는 오프셋을 기반으로 처리가 완료된 데이터와 앞으로 처리해야할 데이터를 구분
  • 메시지는 파티션별로 고유한 오프셋을 가지므로 컨슈머에서 중복 처리를 방지하기 위한 목적으로 사용

 

headers

  • 레코드의 스키마 버전이나 포맷과 같이 데이터 프로세싱에 참고할 만한 정보를 담아서 사용

 

key

  • 파티셔닝 : 메시지 키는 처리하고 자하는 메시지 값의 분류하기 위한 용도로 사용 
  • 파티셔닝에 사용되는 메시지 키는 파티셔너에 따라 토픽의 파티션 번호가 정해짐
  • null일 경우 특정 토픽의 파티션에 라운드로빈 방식으로 전달됨
  • null이 아닌 경우 메시지 키는 해쉬값에 의해서 특정 파티션에 매핑되어 전달 

 

value

  • 실질적으로 처리할 데이터가 담기는 공간 
  • 메시지 값의 포맷은 제네릭으로 사용자에 의해 지정 (Float, Byte[], String 등)
  • 필요에 따라 사용자 지정포맷으로 직렬화/역직렬화 클래스를 만들어 사용할 수 있음
  • 브로커에 저장된 레코드의 값은 어떤 포맷인지 알 수 없으며 컨슈머는 미리 역직렬화 포맷을 알고있어야함

 

출처 : 인프런- 아파치 카프카 애플리케이션 프로그래밍

 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
글 보관함