Open LOG-INFO opened 1 year ago
_schema
토픽에 저장되는군!이 때 주의 깊게 살펴봐야 할 토픽 설정은 cleanup.policy가 compact로 설정된 부분입니다
-> 왜?
delete
스키마 관리 목적으로 사용되는 메시지들은 순서가 중요하기 때문에 _schemas 토픽의 파티션 수는 항상 1입니다
{"namespace": "student.avro",
"type": "record",
"doc": "This is an example of Avro.",
"name": "Student",
"fields": [
{"name": "name", "type": "string", "doc": "Name of the student"},
{"name": "class", "type": "int", "doc": "Class of the student"}
]
}
namespace
: 이름을 식별하는 문자열type
: Avro는 record
, enums
, arrays
, maps
등을 지원하며, 여기서는 record 타입으로 정의doc
: 스키마 정의에 대한 주석name
: 레코드 이름을 나타내는 문자열 (required)fields
: JSON 배열로서, 필드들의 리스트를 뜻함name
: 필드의 이름
type
: boolean, int, long, string 등의 데이터 타입 정의doc
: 필드에 대한 주석
끄적 끄적
Avro
를 사용하는 듯 하다.Avro
는 카프카에서 쓰이는 가장 보편적이고 유명한 스키마인데, 이는 JSON과 매핑되며 간단하고 바이너리 형태여서 매우 빠르다고 한다.Avro
를 사용하면 스키마 ID와 Value만 메시지로 보내게 되어 카프카로 전송하는 전체 메시지의 크기를 줄일 수 있으며 이는 매우 효율적이다.Arvo
는 아래와 같은 로직으로 동작함.https://medium.com/@stephane.maarek/introduction-to-schemas-in-apache-kafka-with-the-confluent-schema-registry-3bf55e401321 ( 요 Avro 관련해서는 아티클이 꽤나 유명한 듯 )
스키마 레지스트리는 버전별로스키마에 대한 관리를 효율적으로 해준다.
가령 스키마의 버전이 바뀌더라도 버전 호환성을 제공해주는데
BACKWARD
,FORWARD
,FULL
등이 있다.BACKWARD 호환성은 스키마를 적용한 컨슈머가 진화 전의 적용된 프로듀서가 보낸 메시지를 보낼 수 있도록 호환성을 제공하는 것을 말한다.
BACKWARD 호환성은 자신과 동일하거나, 한 단계 낮은 버전까지도 처리해준다.
BACKWARD_TRANSITIVE 호환성은 자기와 동일한 버전을 포함한 모든 하위 버전을 지원해준다.
FORWARD 호환성은 반대로 프로듀서에 먼저 스키마를 업데이트하게 된다. 만약 컨슈머가 한단계 낮은 스키마를 사용하고 있더라도 FORWARD 호환성의 추가 기능으로 한단계 낮은 메시지도 처리할 수 있다.
동일하게 모든 버전을 처리해주는 FORWARD_TRANSITIVE가 존재한다.
마지막으로는 FULL인데, BACKWARD + FORWARD로 보면 된다.
FULL 가장 무난한 것 같은데 의외로 호환성 디폴트는 BACKWARD라고 한다.