Topic Naming

강병우·2023년 11월 13일
0
post-custom-banner

MSA 프로젝트를 진행하다 "토픽의 이름을 어떻게 정하지" 라는 고민이 들었다. 아무래도 MSA의 강점은 협업인데, 누구나 보기 쉽게 네이밍을 해야겠다라고 생각했다(나만 알아볼 수 있으면 설명해야 하는데 시간을 들여야 하기 때문이다).

그래서 구글링하다가 스프링 문서 중, 간단하게 정리되어있는 것을 볼 수 있었다.
크게 5가지 방식이 있다.

Retry Topics and DLS Suffixes

재시도 토픽에 대해 접미사를 붙이는 방법이 있다.
만약 "my-annotated-topic"이라는 토픽이 있을 때, 토픽이 다시 들어올 경우 뒤에 추가적인 네이밍이 붙어서 온다.

Appending the Topic's Index or Delay

토픽 인덱스나 지연 값을 접미사에 붙이는 방식이다.

Single Topic for Fixed Delay

고정된 지연시간으로 재시도된 단일 토픽에 대한 정책이다. 토픽 이름에 접미사로 딜레이 값을 붙인다. ex) my-annotated-topic-3_000

Single Topic for maxInterval Exponential Delay

최소-최대 지연시간이 정해져있고 지연시간에 Interval이 정해져 있을 때의 대한 네이밍 정책이다. 예를 들어, 지연시간의 최솟값이 1000, 최댓값이 16000, interval이 1000, multiplier가 2일 때의 예시이다.

-retry-1000

-retry-2000

-retry-4000

-retry-8000

-retry-16000-0

-retry-16000-1

-retry-16000-2

…

-retry-16000-224

Custom Naming Strategies

위의 정책들이 복잡하면 커스터마이징해서 네이밍할 수 있다. Spring 내에서는 RetryTopicNamesProviderFactory을 상속받아 커스터마이징할 수 있다.

일단 이 위의 정보들은 재시도에 대한 처리인 것 같고.. 난 어떤 서비스에서 오는지, 어떤 종류의 메세지인지 구분할 수 있는 네이밍을 찾고 싶었다. Naming Convention에 대해 간단하게 정리되어있는 글을 찾을 수 있었다(밑에 참고란)

<root name space>.<product>.<product specific hierarchy>
<app type>.<app name>.<dataset name>.<stage of processing>
<app type>.<dataset name>.<data>

# 글쓴이가 추천하는 네이밍 규칙
<message type>.<dataset name>.<data name>

예를 들자면, DOJ라는 어플리케이션 중, 문제 관리 서비스가 TestCase의 정보를 출판하는 토픽이라면 DOJ-ProblemManage-TestCase라고 지을 수 있겠다. 혹은, db-TestCase-inputoutput이라고도 할 수 있겠다(이상해보이긴한데 그래도 직관적인 네이밍..)

그 외에 토픽 네이밍을 할 때 주의해야 할 점들은

  • 변경되는 필드를 사용하지 말 것
  • 다른 곳에서 데이터를 사용할 수 있는 경우, 필드를 사용하지 말 것
  • 토픽 이름을 소비자나 생산자와 연결하지 말 것

참고
https://docs.spring.io/spring-kafka/reference/retrytopic/topic-naming.html
https://cnr.sh/essays/how-paint-bike-shed-kafka-topic-naming-conventions

post-custom-banner

0개의 댓글