02. Confluent Kafka 추가기능
Rest Proxy
카프카 클라이언트를 사용하지 않고 Restful API를 사용해 카프카의 일부 기능을 사용하는 서비스
토픽 생성/삭제
메시지 프로듀싱/컨슘
카프카 클러스터 상태 조회
Kafka Broker와 별도로 구성
Confluent Community 라이센스
장점
테스트나 디버깅 편리
HTTP 서비스에 통합이 간편
단점
관리 포인트 증가
상대적으로 저조한 성능
제한된 기능만 제공
Schema Registry
스키마 레지스트리는 Producer와 Consumer가 주고 받으려는 메시지의 스키마를 서로 알게 해주고
호환을 강제한다
비지니스 요구사항에 따라 메시지의 스키마가 변경 될 수 있다.
→ 하나의 컨슈머라도 바뀐 스키마를 다루지 못할 때, 컨슈머 서비스에서 장애가 발생할 수 있다. 이와 같은 상황을 방지하기 위해 상호 스키마 유효성을 확인해주는 작업이 필요하다.
Versioning & Compatibility Types
Schema Registry는 동일 스키마에 대한 호환성 체크를 하기 위해 버전을 유지
Backward(기본설정): 필드 삭제, optional 필드 추가 허용 - 컨슈머부터 업그레이드
새로운 스키마를 사용하여 이전 데이터를 읽는 것이 가능한 것.
필드 삭제 혹은 기본 값이 있는 필드 추가인 경우
Forward: 필드 추가, optional 필드 삭제 허용 - 프로듀서부터 업그레이드
이전 스키마를 사용하여 새로운 데이터를 읽는 것이 가능한 것.
필드 추가 혹은 기본값이 있는 필드 삭제
Full: Backward, Forward 모두 만족함 - 순서 무관
기본 값이 있는 필드 추가 혹은 삭제
None: Backward, Forward 모두 만족하지 않음 - 순서 무관
새로운 스키마 = 새로 등록할 스키마
가장 최근에 등록된 스키마 = 스키마 레지스트리에 등록된 스키마의 마지막 버
TRANSITIVE = 모든 등록된 버전으로 확인한다는 뜻이며, {OPTION}_TRANSITIVE가 없는 경우 마지막 버전으로 확인한다.
동작 방식
Kafka Broker와 별도로 구성
스키마 ID를 추출하여 스키마를 스키마 레지스트리로 부터 수신. 받은 스키마를 통해 역직렬화 한다.
프로듀서와 컨슈머는 로컬 캐쉬에 해당 스키마가 존재하지 않는 경우 스키마 레지스트리와 통신
스키마 레지스트리 자체의 장애에 주의해야 한다.
아브로(Avro)는 아파치의 하둡 프로젝트에서 개발된 원격 프로시저 호출(RPC) 및 데이터 직렬화 프레임워크이다. 자료형과 프로토콜 정의를 위해 JSON을 사용하며 콤팩트 바이너리 포맷으로 데이터를 직렬화한다.
실습
Avro 스키마 (avsc)
// User.avsc
{
"namespace": "example.avro",
"type": "record",
"name": "User",
"fields": [ {"name": "name", "type": "string"},
{"name": "age", "type": ["int", "null"]},
{"name": "favorite_color", "type": ["string", "null"]}
]
}
Last updated