Topic, Partition, Record
토픽과 파티션
데이터를 구분하기 위해 사용하는 단위
1개 이상의 파티션을 소유한다.
Producer가 보낸 데이터들이 저장되며, 각각의 데이터를 레코드라고 부른다.
토픽의 데이터인 레코드를 병렬로 처리할 수 있도록 하기 위해 데이터를 파티션 단위로 나눈다.
파티션은 큐와 비슷한 FIFO 구조이며 파티션의 데이터는 컨슈머가 소비하게 된다.
의미있는 토픽 작명 방법
어떤 개발환경에서 사용되는지, 어떤 애플리케이션에서 어떤 데이터 타입으로 사용되는지 나타낼 수 있어야 한다.
다음과 같이 적합한 템플릿을 고안해 사용하면 좋다.
<환경>.<팀이름>.<애플리케이션이름>.<메시지타입>
ex)
prod.marketing.sms-platform.json
<프로젝트이름>.<서비스이름>.<환경>.<이벤트이름>
ex)
commerce.payment.prd.notification
토픽 이름을 변경할 수 없으므로 초기에 신중히 정해야 한다.
레코드
실질적으로 카프카에서 사용하는 데이터 단위이며 타임스탬프, 메시지 키, 메시지 값, 오프셋으로 구성되어 있다.
프로듀서가 생성하여 브로커로 전송하며, 한 번 브로커에 적재되면 수정이 불가능하다.
레코드가 브로커에 전송되면 타임스탬프(unix time)와 오프셋이 지정된다.
메시지 키는 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용한다. 또한 프로듀서가 토픽에 레코드를 전달할 때 메시지 키의 해시 값을 이용해 파티션을 할당한다.
메시지 값에는 처리할 데이터가 들어가는데, 브로커에는 직렬화된 데이터가 들어오므로 컨슈머는 이를 역직렬화하여 사용해야 한다.
레코드의 오프셋은 0 이상의 숫자이며 직접 지정할 수 없고 브로커에 저장될 때 이전 레코드의 오프셋 값 + 1로 할당된다.
Last updated