Apache Kafka를 사용해 데이터를 처리할 때, 토픽의 이름을 어떻게 정하느냐는 시스템의 확장성과 유지보수에 큰 영향을 미칩니다. 단순해 보일 수 있지만, 잘못된 네이밍은 조직 내 데이터 파이프라인의 혼란을 초래할 수 있습니다. 이 글에서는 Kafka 토픽을 정의할 때 고려해야 할 주요 사항과 이를 통해 버전 관리까지 효율적으로 할 수 있는 방법을 살펴보겠습니다.
1. 네이밍 규칙의 중요성
Kafka 토픽 네이밍은 단순히 이름을 정하는 문제를 넘어, 데이터가 어떻게 구조화되고, 어떻게 접근될지에 대한 중요한 문제입니다. 일관된 네이밍 규칙이 없다면, 시간이 지나면서 토픽의 이름이 불규칙해지고, 결국에는 어떤 토픽이 어떤 데이터를 담고 있는지조차 파악하기 어려워질 수 있습니다.
2. 유효한 문자와 구조적 규칙
Kafka는 토픽 이름에 사용할 수 있는 문자로 영문자, 숫자, 마침표(.), 밑줄(_), 그리고 하이픈(-)을 허용합니다. 하지만 마침표와 밑줄을 함께 사용하는 것은 권장되지 않으며, 하나만 선택하는 것이 좋습니다. 또한, 이름은 소문자로 통일하고, 가독성을 높이기 위해 케밥 케이스(kebab-case)를 사용하는 것이 좋습니다. 예를 들어, my-awesome-topic-name과 같이 하이픈으로 단어를 구분하는 방식입니다.
3. 토픽 이름의 구성 요소
Kafka 토픽 이름을 정할 때, 다음과 같은 구성 요소를 고려할 수 있습니다:
- 데이터 센터: 데이터가 위치한 데이터 센터를 나타낼 수 있습니다. 예를 들어, AWS와 Azure 간의 데이터를 구분할 때 사용합니다.
- 도메인: 데이터가 속한 시스템의 도메인을 정의합니다. 이는 제품명이나 팀 이름이 아닌, 시스템의 근본적인 영역을 나타내야 합니다.
- 분류: 데이터의 종류를 설명합니다. 예를 들어, fct(사실 데이터), cdc(데이터 변경 캡처), cmd(명령), sys(시스템)와 같은 분류를 사용할 수 있습니다.
- 설명: 데이터의 유형을 설명하는 가장 중요한 부분으로, 토픽이 어떤 데이터를 담고 있는지를 명확하게 표현합니다.
- 버전: 데이터 스키마나 포맷이 변경될 때 버전을 명시하여, 이전 버전의 소비자에게 영향을 주지 않고 새로운 버전으로 전환할 수 있도록 합니다.
예시: aws.analytics.fct.pageviews.0
4. 피해야 할 것들
- 변경 가능한 필드 사용 금지: 팀 이름, 서비스 이름, 제품 이름 등은 시간이 지나면서 변경될 수 있으므로 토픽 이름에 포함하지 않는 것이 좋습니다.
- 메타데이터를 이름에 포함하지 않기: 파티션 수, 보안 정보, 스키마 정보 등은 이름에 포함하지 않고, 필요시 외부 시스템에서 관리하는 것이 좋습니다.
5. 버전 관리
토픽 이름에 버전을 포함시키는 것은 좋은 방법이지만, 필요 이상의 버전이 생성되지 않도록 주의해야 합니다. 버전 관리는 스키마 레지스트리를 사용해 중앙에서 관리하는 것이 이상적입니다. 또한, Kafka 레코드의 헤더에 버전 정보를 포함시키는 방식도 고려할 수 있습니다.
6. 네이밍 규칙의 적용
네이밍 규칙을 정의하는 것만큼이나 중요한 것은 이를 일관되게 적용하는 것입니다. Kafka의 auto.create.topics.enable 설정을 false로 설정하여 자동 토픽 생성을 방지하고, CI/CD 파이프라인에서 토픽 생성을 관리함으로써 규칙 준수를 보장할 수 있습니다.
다음은 Kafka 토픽 네이밍 규칙을 적용한 다양한 예시입니다. 이 예시는 앞서 설명한 네이밍 규칙을 반영한 것입니다.
구분 | 내용 |
AWS에서 실행되는 분석 관련 페이지뷰 데이터 |
|
Azure에서 실행되는 GPS 데이터 |
|
데이터 센터 1에서 실행되는 사용자 데이터 변경 사항 |
|
Google Cloud Platform에서의 이메일 커맨드 데이터 |
|
사내 시스템에서만 사용하는 이메일 캐시 시스템 데이터 |
|
'빅데이터' 카테고리의 다른 글
Python 병렬 처리의 진화: Ray를 활용한 병렬 처리 쉽게 시작하기! (0) | 2024.09.05 |
---|---|
데이터 사일로: 비즈니스의 숨겨진 함정과 해결책 (0) | 2024.09.02 |
[Lucene] 정보 검색 라이브러리 루씬이란 무엇인가? (0) | 2024.07.10 |
[Knowledge Graph] 지식 그래프란 무엇인가? (0) | 2024.07.09 |
[WorkFlow] 일잘하는 사람들은 모두 안다는 Zapier 알아보기! (0) | 2024.06.23 |