Kafka Schema Registry?
Kafak 클러스터를 통해 전달되는 데이터 스키마를 관리하는 독립적인 애플리케이션
Confluent Server 를 사용하는 경우 Enterprise License 이며, 그렇지 않으면 Community License이다. https://docs.confluent.io/platform/current/installation/license.html#community-license
구조
- 프로듀서
- 컨슈머
- 스키마 레지스트리
- 카프카 클러스터
장점
1. 시스템 장애 방지
기본적으로 카프카 메시지 형태에는 강제성이 없다.
무슨 말이냐면 위 A형태의 메시지를 보내다가 갑자기 B형태로 보내는 것이 가능하다는 말이다.
소수의 사용자만 카프카 토픽을 소비한다면 큰 문제가 아닐 수 있다. 문제는 실제 카프카 운영 환경에서는 다수의 각기 다른 애플리케이션들이 메시지를 소비한다.
이런 상황에서 사전에 정의되지 않은 형태의 메세지를 보내게된다면 시스템 전체에 문제가 생길 수 있다.
이 문제는 스키마 레지스트리를 사용함으로써 해결할 수 있다. 스키마로 정의되지 않은 메시지를 보내려고 시도한다면 에러가 발생하며 실패할 것이기 때문.
2. 데이터 명세 관리 및 운영 용이
카프카 클러스터는 대부분 데이터를 전송하는 프로듀서를 일방적으로 신뢰할 수 밖에 없는 브로드캐스트 방식이다. 때문에 카프카 컨슈머에게 데이터 구조를 설명하는 과정이 반드시 필요하다.
만약 관련자가 많거나, 담당자가 자주 바뀌는 경우 명세를 관리하고 설명하는 일은 번거롭고 어려운 일이될 수 있다.
스키마 레지스트리 사용한다면 스키마만 보고 데이터에 대한 정의와 의미를 파악할 수 있기 때문에 데이터 명세 관리 및 운영 측면에서 이점이 있다.
3. 불필요한 시간 축소로 업무 집중 가능
명세가 없다면 관련자들은 높은 확률로 작업 외의 불필요한 시간을 보내게된다.
- 데이터 파싱
- 메세지 형태 문의 및 대응
- 메세지 형태 변경 논의
- 메세지 형태 변경 알림
스키마 레지스트리를 사용함으로써 개발자들은 본연의 업무에 집중할 수 있게된다.
- 사전에 정의되지 않은 형식의 메시지는 전송할 수 없으므로 데이터를 처리하는 쪽에서 협의되지 않은 메시지가 들어오는 경우에 대해 고민하지 않아도 된다.
- 스키마는 실제로 스키마 레지스트리를 통해 전달받으면 되기 때문에 카프카를 통해 전달되는 메시지 크기를 절약할 수 있다.
단점
1. 번거로운 스키마 정의 작업
데이터 타입은 무엇이며, 의미하는바가 무엇인지 주석을 달아 표시해야 함으로 스키마 정의 작업이 번거로울 수 있다.
{
"type": "record",
"name": "snacks",
"fields": [
{"name": "name", "type": "string" }
, {"name": "calories", "type": "float" }
, {"name": "colour", "type": "string", "default": null}
]
}
Schema format
총 3가지 데이터 포맷으로 스키마를 작성할 수 있다.
- Avro (권장)
- JSON
- ProtoBuf
기타
Schema ID Allocation
- ID는 auto increment
Kafka Backend
- 스키마는 카프카 내부 토픽으로 관리된다.
Rest API 제공
https://docs.confluent.io/platform/current/schema-registry/develop/api.html#schemas
결론
스키마 레지스트리는 데이터 정의 작업이라는 번거로운 작업이 필요하다는 단점이 있다.
다만 데이터 트러블슈팅 감소, 용이한 데이터 포맷 확인, 데이터 스키마 관련 커뮤니케이션 감소 등 얻을 수 있는 이점들이 더 많기 때문에 도입을 권장한다.
참고
- 실전 카프카 개발부터 운영까지
- Apache Avro — Quick Example in Kafka
'DataOps > Kafka' 카테고리의 다른 글
[if(kakao)2022] 카프카, 대규모 클러스터 운영 후기 정리 (0) | 2023.09.29 |
---|---|
[카프카] Rebalancing (0) | 2023.09.06 |
[Kafka] UI Tools 분석글 공유 (0) | 2023.03.13 |
[Kafka] 카프카란? (0) | 2023.03.10 |
[Kafka] 토픽 Naming Convention 고민 (0) | 2023.03.09 |
댓글