Topic, Partition, Record

토픽과 파티션

  • 데이터를 구분하기 위해 사용하는 단위

  • 1개 이상의 파티션을 소유한다.

  • Producer가 보낸 데이터들이 저장되며, 각각의 데이터를 레코드라고 부른다.

  • 토픽의 데이터인 레코드를 병렬로 처리할 수 있도록 하기 위해 데이터를 파티션 단위로 나눈다.

  • 파티션은 큐와 비슷한 FIFO 구조이며 파티션의 데이터는 컨슈머가 소비하게 된다.

의미있는 토픽 작명 방법

  • 어떤 개발환경에서 사용되는지, 어떤 애플리케이션에서 어떤 데이터 타입으로 사용되는지 나타낼 수 있어야 한다.

  • 다음과 같이 적합한 템플릿을 고안해 사용하면 좋다.

    • <환경>.<팀이름>.<애플리케이션이름>.<메시지타입>

      • ex) prod.marketing.sms-platform.json

    • <프로젝트이름>.<서비스이름>.<환경>.<이벤트이름>

      • ex) commerce.payment.prd.notification

  • 토픽 이름을 변경할 수 없으므로 초기에 신중히 정해야 한다.

레코드

  • 실질적으로 카프카에서 사용하는 데이터 단위이며 타임스탬프, 메시지 키, 메시지 값, 오프셋으로 구성되어 있다.

  • 프로듀서가 생성하여 브로커로 전송하며, 한 번 브로커에 적재되면 수정이 불가능하다.

  • 레코드가 브로커에 전송되면 타임스탬프(unix time)와 오프셋이 지정된다.

  • 메시지 키는 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용한다. 또한 프로듀서가 토픽에 레코드를 전달할 때 메시지 키의 해시 값을 이용해 파티션을 할당한다.

  • 메시지 값에는 처리할 데이터가 들어가는데, 브로커에는 직렬화된 데이터가 들어오므로 컨슈머는 이를 역직렬화하여 사용해야 한다.

  • 레코드의 오프셋은 0 이상의 숫자이며 직접 지정할 수 없고 브로커에 저장될 때 이전 레코드의 오프셋 값 + 1로 할당된다.

Last updated