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