Avro

Apache Avro 소개

소농배 2022. 2. 17. 10:13

Introduction

 Apache Avro 는 데이터 직렬화 시스템이다. Avro 는 아래 기능들을 제공한다.

  • 풍부한 데이터 구조
  • 간결하고 빠른 Binary Data 포멧
  • 영구 데이터를 저장하기 위한 컨테이너 파일
  • Remote 프로시져 콜 (RPC)
  • 다양한 언어와 간단하게 연동 가능. RPC 프로토콜을 사용하거나 구현하거나 데이터를 읽거나 쓰기 위해 코드 Generation 이 필수는 아니다. 코드 Generation 은 정적인 타입을 가지는 언어를 구현할때 가치가 있는 최적화 옵션이다.

Schemas

 Avro 는 Schema 에 의존한다. Avro 데이터를 읽을때는 Avro 데이터가 쓰여질 당시에 사용되었던 Schema 가 필요하다. 이것은 각 데이터가 per-value 오버헤드 없이 쓰여질 수 있도록 하고 직렬화를 빠르고 간결하게 한다. 또한 Avro 데이터는 스키마와 함께 자체적으로 완전히 해석될 수 있기 때문에 동적 스크립팅 언어와 함께 사용할 수 있다.

 

 Avro 데이터가 스키마와 함께 파일에 저장되어있을때, 이 파일은 어떠한 프로그램든지 상관 없이 이후에 처리될 수 있다. 데이터를 읽는 프로그램이 다른 스키마를 사용할 것을 예상하더라도, old, new 스키마가 모두 있으므로 쉽게 해결될 수 있다.

 

 Avro 가 RPC 를 사용할때, Client 와 Server 는 Connection Handshake 과정에서 스키마를 교환한다. 이렇게 되면 Client 와 Server 둘 다 완전히 동일한 전체 버전의 Schema 를 가지고있기 때문에 쉽게 해결될 수 있다.

 

 Avro 스키마는 JSON 으로 정의된다. 이것은 이미 JSON 라이브러리가 제공되는 언어에서 구현을 용이하게 한다.

 

Comparison with other systems

 Avro 는 Thrift, Protocol Buffers 와 같은 시스템과 비슷한 기능을 제공한다. 하지만 Avro 는 기능적으로 이런 시스템들과 아래 항목들에 대해서 다르다.

  • Dynamic typing : Avro 는 Code Generation 이 필수는 아니다. 데이터는 Schema 와 항상 동반되고 Schema 는 Code Generation 없이 처리를 가능하게 한다. 이것은 일반적인 데이터 처리 시스템과 언어의 구축을 용이하게 한다
  • Untagged Data : 데이터를 읽을 때 Schema 가 존재하기 때문에, Type 에 대한 정보를 데이터에 인코딩하지 않아도 되고 이것이 직렬화된 데이터의 사이즈를 작게 만들 수 있다.
  • No manually-assigned field IDs: Schema 가 변경되었을때, Old 와 New Schema 는 데이터를 처리할때 항상 필요하다. 따라서 Old 와 New 의 차이는 field 의 이름을 통해서 상징적으로 처리될 수 있다.

 

 

 

 

 

출처 - https://avro.apache.org/docs/current/index.html