[Kafka] Kafka Record, Segment

CHAN LIM·2024년 1월 22일
0

Kafka

목록 보기
5/13
post-custom-banner

Segment

  • 로그 파일에서 일정한 크기나 시간 단위로 분리된 일부를 의미
  • 메시지를 저장하는 물리적인 단위
  • 여러 세그먼트가 하나의 토픽의 파티션에 대해 디스크에 저장

Record

  • Kafka에서 전송되는 메시지 또는 데이터의 최소 단위
  • 각 레코드는 특정 토픽과 파티션에 속하며, 세그먼트 내에 저장
  • 컨슈머가 읽고 처리하는 메시지

Segment?

Kafka에서 가장 작은 파일 단위
메시지를 안전하게 저장하는 단위


Segment-Record 구성

  • Header
    • Key - Value 데이터를 추가할 수 있다.
    • 처리에 참고할 정보를 담을 수 있다.
  • Timestamp
    • 시간을 저장 (Unix timestamp 포함)
    • Default
      • ProducerRecord 생성 시간 (Create Time)
    • BrokerLoading 시간으로도 설정 가능
    • Topic 단위 설정
  • Key
    • Key를 분류하기 위한 목적
    • 메시지 키는 Partitioner에 의해 Topic의 Partition 번호로 지정
    • 키 값이 없으면 null
    • Round Robin 방식
  • Value
    • 실제 값이 들어가는 곳
    • Float ByteArray, String 지정 가능
    • 어떤 포맷으로 직렬화 되었는지 Consumer는 알지 못한다.
      • 역직렬화 포맷을 미리 알고 있어야 한다.
    • 보통 Stringd으로 직렬화, 역직렬화 또는 JSON
  • Offset
    • Producer가 생성한 Record에는 존재하지 않는다.
    • Broker에 적재되면서 Offset이 지정
    • Offset 기반으로 Consumer가 처리한다.

Segment

  • Log에는 메시지(Record)와 메타데이터를 저장
  • Index에는 Offset을 인덱싱한 데이터
  • Timeindex는 메시지에 포함된 timestamp값 기준으로 인덱싱한 정보
    • 메시지 키, 메시지 값이 언제 timestamp로 기록되었는지 저장

이름

  • 저장될 때는 000000000.log, 00000010.log, 00000020.log ...

  • 즉, 0, 10, 20 Offset 번호

    • (0 ~ 9, 10 ~ 19, 20 ~ 29 ...)
  • 가장 앞에 있는 Offset을 기준으로 파일 이름이 정해진다.

  • Byte 단위, 시간 단위 기준으로 다음 로그 파일이 저장된다.

    • log.segment.bytes
      • 바이트 단위 최대 세그먼트 크기 지정 (1GB)
    • log.roll.ms(hour)
      • 다음 파일로 넘어가는 주기 설정 (7일)

Active Segment

메시지를 쓰기 위해 사용 중인 세그먼트

  • Active Segment는 기간이 다 되어도 삭제되지 않는다.

삭제

  • 특정 레코드에 대한 삭제는 불가능

  • 삭제 단위는 무조건 세그먼트

  • Option

    • retention.ms
      • 레코드 보유 기간 (7일, 저장용량 주의)
      • Disk Pressure가 오는 경우 이 옵션을 수정하기도 함
    • retention.bytes
      • 지정한 크기를 도달하면 세그먼트 삭제 (기본값 지정 X)
      • Active Segment는 삭제되지 않는다.
    • log.retention.check.interval.ms
      • 브로커에서 세그먼트가 삭제될만한지 주기를 체크

수정

  • 이미 적재된 레코드에 대해서는 수정이 불가능

  • 데이터 검증을 미리 하고 적재하는 것이 중요

  • 데이터를 적재하고
    Producer측에서 검증하고
    데이터를 사용하는 Consumer에서도 검증이 필요하다.


profile
클라우드, 데이터, DevOps 엔지니어 지향 || 글보단 사진 지향
post-custom-banner

0개의 댓글