본문 바로가기
DataOps/Kafka

[KSR] 카프라 스키마 레지스트리(Kafka Schema Registry) 란?

by BenKangKang 2023. 3. 9.

Kafka Schema Registry?

Kafak 클러스터를 통해 전달되는 데이터 스키마를 관리하는 독립적인 애플리케이션

Confluent Server 를 사용하는 경우 Enterprise License 이며, 그렇지 않으면 Community License이다. https://docs.confluent.io/platform/current/installation/license.html#community-license

구조

https://docs.confluent.io/platform/current/schema-registry/index.html#schemas-subjects-and-topics

 
  • 프로듀서
  • 컨슈머
  • 스키마 레지스트리
  • 카프카 클러스터

장점

1. 시스템 장애 방지

기본적으로 카프카 메시지 형태에는 강제성이 없다.

무슨 말이냐면 위 A형태의 메시지를 보내다가 갑자기 B형태로 보내는 것이 가능하다는 말이다.

소수의 사용자만 카프카 토픽을 소비한다면 큰 문제가 아닐 수 있다. 문제는 실제 카프카 운영 환경에서는 다수의 각기 다른 애플리케이션들이 메시지를 소비한다.

이런 상황에서 사전에 정의되지 않은 형태의 메세지를 보내게된다면 시스템 전체에 문제가 생길 수 있다.

이 문제는 스키마 레지스트리를 사용함으로써 해결할 수 있다. 스키마로 정의되지 않은 메시지를 보내려고 시도한다면 에러가 발생하며 실패할 것이기 때문.

 

2. 데이터 명세 관리 및 운영 용이

카프카 클러스터는 대부분 데이터를 전송하는 프로듀서를 일방적으로 신뢰할 수 밖에 없는 브로드캐스트 방식이다. 때문에 카프카 컨슈머에게 데이터 구조를 설명하는 과정이 반드시 필요하다.

만약 관련자가 많거나, 담당자가 자주 바뀌는 경우 명세를 관리하고 설명하는 일은 번거롭고 어려운 일이될 수 있다.

스키마 레지스트리 사용한다면 스키마만 보고 데이터에 대한 정의와 의미를 파악할 수 있기 때문에 데이터 명세 관리 및 운영 측면에서 이점이 있다.

3. 불필요한 시간 축소로 업무 집중 가능

명세가 없다면 관련자들은 높은 확률로 작업 외의 불필요한 시간을 보내게된다.

  1. 데이터 파싱
  2. 메세지 형태 문의 및 대응
  3. 메세지 형태 변경 논의
  4. 메세지 형태 변경 알림

스키마 레지스트리를 사용함으로써 개발자들은 본연의 업무에 집중할 수 있게된다.

 

  • 사전에 정의되지 않은 형식의 메시지는 전송할 수 없으므로 데이터를 처리하는 쪽에서 협의되지 않은 메시지가 들어오는 경우에 대해 고민하지 않아도 된다.
  • 스키마는 실제로 스키마 레지스트리를 통해 전달받으면 되기 때문에 카프카를 통해 전달되는 메시지 크기를 절약할 수 있다.

단점

1. 번거로운 스키마 정의 작업

데이터 타입은 무엇이며, 의미하는바가 무엇인지 주석을 달아 표시해야 함으로 스키마 정의 작업이 번거로울 수 있다.

{
  "type": "record",
  "name": "snacks",
  "fields": [
      {"name": "name",  "type": "string" }
    , {"name": "calories", "type": "float" }
    , {"name": "colour", "type": "string", "default": null}
  ]
}

 

Schema format

https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#formats-serializers-and-deserializers

총 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

결론

스키마 레지스트리는 데이터 정의 작업이라는 번거로운 작업이 필요하다는 단점이 있다.

다만 데이터 트러블슈팅 감소, 용이한 데이터 포맷 확인, 데이터 스키마 관련 커뮤니케이션 감소 등 얻을 수 있는 이점들이 더 많기 때문에 도입을 권장한다.

참고

 

 

댓글