3.2 토픽과 파티션

문법식·2022년 8월 31일
0

토픽은 카프카에서 데이터를 구분하기 위해 사용하는 단위이다. 토픽은 1개 이상의 파티션을 소유하고 있다. 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 '레코드(record)라 부른다.
파티션은 카프카의 병렬처리의 핵심으로써 그룹으로 묶인 컨슈머들이 레코드를 병렬로 처리할 수 있도록 매칭된다. 컨슈머의 처리량이 한정된 상황에서 많은 레코드를 병렬로 처리하는 가장 좋은 방법은 컨슈머의 개수를 늘려 스케일 아웃하는 것이다. 컨슈머 개수를 늘림과 동시에 파티션 개수도 늘리면 처리량이 증가하는 효과를 볼 수 있다.
파티션은 큐와 비슷한 구조다. FIFO 구조로 먼저 들어간 레코드는 컨슈머가 먼저 가져가게 된다. 차이점은 큐는 데이터를 가져가면 레코드를 삭제하지만 카프카에서는 삭제하지 않는다. 파티션의 레코드는 컨슈머가 가져가는 것과 별개로 관리된다. 이러한 특징 때문에 토픽의 레코드는 다양한 목적을 가진 여러 컨슈머 그룹들이 토픽의 데이터를 여러 번 가져갈 수 있다.

토픽 이름 제약 조건

  • 빈 문자열 토픽 이름은 지원하지 않는다.
  • 토픽 이름은 마침표 하나(.) 또는 마침표 둘(..)로 생성될 수 없다.
  • 토픽 이름의 길이는 249자 미만으로 생성되어야 한다.
  • 토픽 이름은 영어 대소문자와 숫자 0부터 9 그리고 마침표, 언더바, 하이픈 조합으로 생성할 수 있다. 이외의 문자열이 포함된 토픽 이름은 생성 불가하다.
  • 카프카 내부 로직 관리 목적으로 사용하는 2개 토픽(__consumer_offsets, __transaction_state)와 동일한 이름으로 생성 불가능하다.
  • 카프카 내부적으로 사용하는 로직 때문에 토픽 이름에 마침표와 언더바가 동시에 들어가면 안 된다. 생성은 할 수 있지만 사용 시 이슈가 발생하기 때문에 마침표와 언더버가 들어간 토픽 이름을 사용하면 경고 메시지가 발생한다.
  • 이미 생성된 토픽 이름의 마침표를 언더바로 바꾸거나 언더바를 마침표로 바꿔서 신규 토픽 이름을 생성할 수 없다.

의미 있는 토픽 이름 작명 방법

토픽 이름을 모호하게 작성하면 유지보수 시 큰 어려움을 겪을 수 있다. 예를 들어 test-20210204, abcd 같은 토픽 이름은 어떤 용도로, 누가 사용하고 있는지, 어떻게 만들어졌는지 알 수 없으므로 지양해야 한다. 최소한 토픽 이름을 통해 어떤 개발환경에서 사용되는 것인지 판단 가능해야 하고 어떤 애플리케이션에서 어떤 데이터 타입으로 사용되는지 유추할 수 있어야 한다. 만약 전사에서 공용으로 사용하고 있는 카프카라면 추가적으로 토픽의 오너십을 가진 팀 이름을 토픽 이름에 추가하는 것도 고려해 볼 만하다. 히스토리를 명확히 파악하고 싶다면 회사 내부에서 사용준인 JIRA 티켓 번호를 토픽 이름에 넣는 것도 좋은 방법이다. 만약 카프카 클러스터를 2대 이상 운영할 경우에는 클러스터를 구분하기 위해 카프카 클러스터 이름을 넣을 수도 있다.
토픽 이름에는 영어 대소문자 외에 마침표, 언더바, 하이픈을 넣을 수 있다. 토픽 이름은 영어 대소문자를 구분하여 처리한다. 토픽 이름에 영어 대소문자를 섞을 경우 휴먼에러가 발생할 수 있다. 이를 방지하기 위해 카멜케이스보다 케밥케이스 또는 스네이크 표기법과 같이 소문자와 구분자를 조합하여 사용하는 것이 좋다.

토픽 작명의 템플릿과 예시

  • <환경>.<팀명>.<애플리케이션명>.<메시지 타입>
    prd.marketing-team.sms-platform.json
  • <프로젝트명>.<서비스명>.<환경>.<이벤트명>
    commerce.payment.prd.notification
  • <환경>.<서비스명>.<JIRA번호>.<메시지 타입>
    dev.email-sender.jira-1234.email-vo-custom
  • <카프카 클러스터명>.<환경>.<서비스명>.<메시지 타입>
    aws-kafka.live.marketing-platform.json

중요한 것은 토픽 이름에 대한 규칙을 사전에 정의하고 구성원들이 그 규칙을 잘 따르는 것이다. 아무리 규칙을 정해도 따르지 않으면 예측하지 못한 방향으로 토픽 이름이 생성되고 이것은 기술 부채로 남는다. 게다가 카프카는 토픽 이름 변경을 지원하지 않으므로 이름 변경을 위해서는 삭제 후 다시 생성하는 것 외에는 방법이 없다. 규칙을 따르지 않은 토픽 이름의 경우 주기적으로 확인하고 검토하여 사용 여부를 판단해야 한다. 단발성으로 생성된 토픽이면 삭제하고, 실제 사용을 위한 토픽이라면 삭제 후 신규 토픽을 만드는 것을 권장한다.

profile
백엔드

0개의 댓글