1. 스키마의 개념과 유용성

개념

Schema는 정보를 구성하고 해석하는 것을 도와주는 Framework나 개념을 의미한다. 스키마 정의를 통해 데이터베이스의 관리 효율성이 높아지며 데이터 충돌을 방지한다. Kafka에서도 토픽으로 전송되는 메세지에 대해 미리 스키마를 정의한 후 전송 함으로 데이터베이스에서 얻을 수 있는 동일한 효과를 얻을 수 있다.

유용성

스키마가 미리 정의되어 있고 반드시 사전에 정의된 스키마의 형태로 데이터를 입력해야 하며, 사전에 정의된 스키마의 내용과 다른 데이터를 추가하려고 시도한다면 작업은 실패하게 된다.

이렇게 스키마를 정의해 두면 데이터 트러블슈팅 감소, 용이한 데이터 포맷 확인, 데이터 스키마 관련 커뮤니케이션 감소 등 얻을 수 있는 이점들이 많기 때문에 카프카에서 스키마 사용은 권장하고 있다.

2번 프로듀서가 갑자기 메시지 스키마를 변경하여 쓴 상황. 컨슈머는 스키마 변경에 대응하지 못하고 4번 메시지를 처리할 수 없다.

2번 프로듀서가 갑자기 메시지 스키마를 변경하여 쓴 상황. 컨슈머는 스키마 변경에 대응하지 못하고 4번 메시지를 처리할 수 없다.

컨슈머가 제대로 읽어드리지 못하는 이유는 프로듀서는 직렬화하여 메시지를 발행하고, 컨슈머는 역직렬화하여 메시지를 구독하기 때문입니다. 따라서 프로듀서와 컨슈머에 각각 메시지 구조(스키마)에 따라 직렬화/역직렬화 클래스가 구성되고, 이 둘은 강한 의존성(커플링, Coupling)을 갖게 됩니다. 결국, 구조적인 결합도는 낮췄지만 내부적인 결합도는 여전히 가지고 있게 됩니다.

스키마 레지스트리는 이 결합도를 낮추기 위해 고안되었다.

2. 카프카와 스키마 레지스트리

스키마 레지스트리 개요

스키마 레지스트리는 컨플루언트 커뮤니티 라이선스를 갖고 있는데, 비상업적인 용도에 한해 스키마 레지스트리를 무료로 사용할 수 있다. 카프카와 별도로 구성된 독립적 어플리케이션이다.

클라이언트들이 스카마 정보를 사용하기 위해서는 프로듀서와 컨슈머, 스키마 레지스트리 간 직접 통신이 이뤄져야 한다.