티스토리 뷰

Development/Cloud

[Kafka]Avro에 대해서

Vagabund.Gni 2023. 9. 15. 16:18
728x90
반응형

목차

     

    회사에서 카프카를 사용한 데이터 파이프라인을 스터디하다 보니 데이터 추적을 위한 스키마의 필요성을 깨달았다.

     

    그리고 검색을 해 본 결과 내가 찾던 대상이 레지스트리 스키마이며, 카프카를 사용하는 데 있어서는 사실상의 필수라 했다.

     

    바쁘게 구현하느라 코드의 품질이 떨어지긴 하지만 그나마라도 다음 글에 올려두기로 하고,

     

    이 글에서는 스키마 레지스트리와 Avro에 대해 짧게 짚고 넘어가자.

     

    Schema Registry

     

    스키마 레지스트리는 일종의 데이터 저장소이다.

     

    RDBMS와 같이 스키마를 만들어서 중간에 자료를 저장하는 역할을 한다.

     

    특별히 여러 언어와 서비스에서 사용하는 Avro 스키마를 저장 및 버전관리를 해주는 앱으로 보면 된다.

     

    이를 통해 데이터의 생산(Produce)과 소비(Consume)가 동일한 스키마를 공유해 자료를 주고받을 수 있으며,

     

    스키마 변경의 버전을 안전하게 관리할 수 있다.

     

    https://www.confluent.io/product/confluent-platform/data-compatibility/

    다시 한번 강조하지만 스키마 레지스트리는 별도로 실행해야 하는 소프트웨어이며,

     

    스키마의 버전 및 호환성을 요구사항에 맞게 업데이트하거나 처리해 준다.

     

    Avro

     

     

    Avro는 아파치의 Hadoop 프로젝트에서 개발된 원격 프로시저 호출(Remote Procedure Call) 및 데이터 직렬화 프레임워크이다.

     

    JSON과 비슷한 스키마를 설계함으로써 데이터 구조를 정의하는데, 이를 포함한 특징을 정리하면 아래와 같다.

     

    1. 스키마 기반: 데이터 구조에 대한 명세를 스키마로 가지고 있기 때문에, 스키마 변경에 대한 호환성 유지가 가능하다.
    2. 이진 포맷: 데이터를 이진 포맷(Binary)으로 직렬화해서 크기가 작고 처리 속도가 빠르다.
    3. 언어 중립성: 자바, 파이썬, C++ 등 여러 언어에서 함께 사용이 가능하다.
    4. 동적 스키마: 스키마를 파일로 저장하면 해당 스키마가 런타임에 클래스를 생성해 결정된다.
    5. 데이터 타입: 기본적인 타입 외에도 Enum, Array 등의 다양한 데이터 타입을 지원한다.
    6. RPC 지원: 위에 적었던 RPC를 위한 지원이 내장되어 있어 분산 시스템 간의 통신에 유용하다.

    Avro 스키마는 예를 들면 아래와 같이 생겼다.

    {
      "type": "record",
      "name": "User",
      "fields": [
      	{
          "name": "parentId",
          "type": ["null", "string"],
          "default": null
        },
        {
          "name": "uniqueId",
          "type": "string"
        },
        {
          "name": "username", 
          "type": "string"},
        {
          "name": "age",  
          "type": "int"},
        {
          "name": "email", 
          "type": ["null", "string"]}
      ]
    }

    위 스키마는 User라는 이름의 레코드를 정의하고, 추적을 위한 parentId, uniqueId를 포함한

     

    다섯 개의 필드를 가진다. 위에서 볼 수 있듯이 null을 허용할 수 있으며, 다른 데이터타입도 입력이 가능하다.

     

    Avro는 주로 다음과 같은 곳에서 자주 사용된다.

     

    • 데이터 저장: NoSQL 데이터베이스에서 자주 사용된다.
    • 데이터 전송: 카프카와 같은 메시징 시스템에서 포맷으로 사용된다.
    • 데이터 처리: 하둡 MapReduce에서 입/출력 포맷으로 사용된다.

    특히 데이터와 메타데이터를 한 번에 처리할 수 있기 때문에, 빅 데이터와 스트림 데이터 처리에 특히 유용하다고 한다.

     

    나도 써본 결과 자바와 파이썬 각 프로젝트에서 카프카를 통해 Avro 프레임워크로 데이터를 주고받으며

     

    굉장히 편리했다.

     

    처음부터 차근차근 정리해 놓을 수 있으면 좋겠지만, 오늘은 일단 끝!

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/05   »
    1 2 3 4
    5 6 7 8 9 10 11
    12 13 14 15 16 17 18
    19 20 21 22 23 24 25
    26 27 28 29 30 31
    글 보관함