Segment
- 로그 파일에서 일정한 크기나 시간 단위로 분리된 일부를 의미
- 메시지를 저장하는 물리적인 단위
- 여러 세그먼트가 하나의 토픽의 파티션에 대해 디스크에 저장
Record
- Kafka에서 전송되는 메시지 또는 데이터의 최소 단위
- 각 레코드는 특정 토픽과 파티션에 속하며, 세그먼트 내에 저장
- 컨슈머가 읽고 처리하는 메시지
Kafka에서 가장 작은 파일 단위
메시지를 안전하게 저장하는 단위
- 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가 처리한다.
Log
에는 메시지(Record)와 메타데이터를 저장
Index
에는 Offset을 인덱싱한 데이터
Timeindex
는 메시지에 포함된 timestamp값 기준으로 인덱싱한 정보
- 메시지 키, 메시지 값이 언제 timestamp로 기록되었는지 저장
저장될 때는 000000000.log, 00000010.log, 00000020.log ...
즉, 0, 10, 20 Offset 번호
가장 앞에 있는 Offset을 기준으로 파일 이름이 정해진다.
Byte 단위, 시간 단위 기준으로 다음 로그 파일이 저장된다.
log.segment.bytes
log.roll.ms(hour)
메시지를 쓰기 위해 사용 중인 세그먼트
특정 레코드에 대한 삭제는 불가능
삭제 단위는 무조건 세그먼트
Option
retention.ms
retention.bytes
log.retention.check.interval.ms
이미 적재된 레코드에 대해서는 수정이 불가능
데이터 검증을 미리 하고 적재하는 것이 중요
데이터를 적재하고
Producer측에서 검증하고
데이터를 사용하는 Consumer에서도 검증이 필요하다.