Kafka topic & partition & record
Kafka topic & partition & record
topic
토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위이다. 이러한 토픽은 하나 이상의 파티션을 가지고 있다. 토픽 내에 들어온 데이터를 우리는 레코드라고 부른다. 토픽의 이름을 지정하는 것도 제약 조건이 존재한다. 그 제약 조건은 다음과 같다.
- 빈 문자열 금지
- 토픽 이름은 . 또는 .. 만 있으면 안된다.
- 토픽 이름의 길이는 249자 미만
- 토픽 이름은 영어 대소문자, 0-9 마침표,언더바, 하이픈 조합으로 생성 가능하다. 이외는 불가능.
- __consumer_offsets, __transaction_state 라는 이름은 불가능.
- ._ 또는 _. 와 같이 마침표와 언더바가 같이 쓰이는 이름은 안된다.
그리고 마지막으로 토픽의 이름은 한번 정하면 바꿀 수 없으니 토픽 이름의 규칙을 정하고 그 규칙을 잘 따르는 방식으로 이름을 신중하게 지어야 한다.
partition
파티션은 토픽마다 최소 1개 이상 있는 토픽의 하위개념이다. 이러한 파티션은 카프카의 병렬 처리를 도와주는데 여러 컨슈머들이 레코드를 병렬 처리 할 수 있도록 여러개의 파티션을 1:1매핑해서 토픽 내의 데이터를 병렬 처리할 수 있다. 이러한 파티션은 Queue와 비슷한 구조인데 다른 점이 있다면 데이터를 컨슈머가 가져간 이후에도 데이터가 남아있다는 점이다.
record
record는 kafka broker에 저장된 메세지/데이터 단위를 말합니다. 레코드는 메세지 키, 메세지 값, 타임스탬프, offset으로 구성되어있습니다. 프로듀서가 레코드를 생성해 브로커로 보내면 브로커 내에서 오프셋과 타임스탬프가 지정되어 지정된 토픽의 파티션에 저장됩니다. 이렇게 저장된 레코드는 수정이 불가능 하고 로그 리텐션 기간, 용량 설정에 따라서 설정된 기간, 용량을 초과하면 삭제됩니다.
레코드에서 타임스탬프는 유닉스 시간이 설정됩니다. 메세지 키는 레코드를 순서대로 처리 또는 레코드의 종류를 구분하기 위해 설정합니다. 이러한 메세지 키는 해시 값으로 변환되어 레코드가 들어갈 파티션을 결정할 수도 있습니다. 메세지 키를 설정하지 않으면 null값이 설정됩니다. 메세지 값에는 실질적인 value값이 들어가 있습니다. 이러한 메세지 값은 serialize되어 있기 때문에 deserialize 작업이 필수적으로 필요합니다. 이때 프로듀서에서 작업한 serialize작업과 producer에서 수행하는 deserialize작업은 동일한 데이터 형이여야 합니다. 오프셋은 브로커에 저장될 때 마지막 오프셋+1의 값이 배정됩니다.
출처
- 아파치카프카 애플리케이션 프로그래밍 with자바
- 카프카 데이터플랫폼의 최강자
Leave a comment