본문 바로가기
DataOps/Kafka

[Kafka] 토픽 Naming Convention 고민

by BenKangKang 2023. 3. 9.

TL;DR

개요

카프카 클러스터를 운영하다보면 수많은 토픽을 생성하게 된다.

토픽 이름은 변경할 수 없기 때문에 카프카 도입을 고려하고 있다면 Naming Convention에 대한 고민을 먼저 해보는 것이 좋다.

주의

1. 토픽 이름은 한번 지정하면 바꿀 수 없다

토픽 이름은 변경 불가능한 값이다. 즉 한번 컨벤션을 정하면 수정하기 어렵다.

카프카를 운영하면서 다양한 케이스의 토픽을 생성하게 될 것임으로 최대한 범용적인 이름을 짓는 것이 중요하다.

2. 토픽 이름으로 허용되는 문자

토픽은 아래 문자만 토픽 이름으로 허용한다

  • Valid characters for Kafka topics are the ASCII
    • 영어
    • 숫자
    • 마침표(‘.’)
    • 밑줄(‘_’)
    • 하이픈(‘-’)
<root name space>.<product>.<product specific hierarchy>
<app type>.<app name>.<dataset name>.<stage of processing>
<app type>.<dataset name>.<data>

3. 케이스 충돌 ‘.’ 과 ‘_’

마침표(.)와 밑줄(_)은 서로 충돌한다.

고려

1. 표기법 통일

TopicName
TopicName
topicName
topicname
topic-name
topic_name

당연한 말이지만 snake_case, cameCase 어떤 표기법을 쓸지 고민하고 통일하는 것이 좋다.

2. 의미있는 이름이 되도록 짓자

  • 설명이 포함된 이름 사용
    • 주제의 내용을 명확하게 설명하는 이름을 선택하십시오.
  • 주제 이름 길지 않게 유지
    • 너무 긴 주제 이름을 사용하면 읽기 어려울 수 있다.

3. 아래 필드 조합을 고려해보자

필드 설명

Product 주제와 관련된 제품의 이름
Schema name 주제에 있는 메시지의 스키마 이름입니다. 일반적으로 Avro 스키마 이름에 해당
Namespace org.foo.bar와 같은 것. 일반적으로 스키마 이름과 함께 사용
Topic Type 주제가 사용되는 대상.
예: ETL, queuing, tracking, user, data push, streaming, etc.  
Application name 메시지를 생성하는 애플리케이션 또는 서비스의 이름
Data name 테이터베이스 테이블과 유사
Dataset name 이름 주제 모음의 데이터를 포함하는 이름입니다. 데이터베이스 이름과 유사
Processing stage 처리 파이프라인의 단계입니다. 스트림 처리에 특히 유용합니다.
예: filtered, partitioned, joined, etc.  
Public/Private 주제가 내부 구현 세부 정보인지 여부를 나타냅니다(예: Kafka의 __consumer_offsets 주제)
Security 주제에 AuthN/AuthZ가 활성화되어 있는지 여부
Consumer name 주제에서 데이터를 사용하기 위한 이용자의 이름
Partition key 항목이 분할되는 필드 이름
Partition counts 주제에 대한 파티션 수
Version numbers 이전 버전과 호환되지 않는 변경이 이루어지거나 데이터 마이그레이션이 발생하는 경우와 같이 항목의 새 버전을 나타내기 위해 증가할 수 있는 숫
Owner/team name 주제를 담당하는 소유자 또는 팀의 이름

4. 스키마를 따로 관리하면 필드 타입은 이름으로 사용하지 마라

5. 컨슈머 프로슈머와 연결하지 마라

  • 컨슈머와 프로슈머는 언제든지 바꾸리 수 있다.

제안

  • [namespace]-[application name]-[topic type]-[version numbers]
    • servicea-filebeat-logging-0

auto.create.topics.enable 을 비활성화하자

이 설정이 활성화 되어 있으면 네이밍 컨벤션이 깨질 우려가 있다. 이 설정을 비활성화하자.

참고자료

https://cnr.sh/essays/how-paint-bike-shed-kafka-topic-naming-conventions

댓글