Avro 포맷

Avro 포맷 (Avro Format)

Apache Avro 포맷은 Avro 스키마를 기반으로 Avro 데이터를 읽고 쓸 수 있게 해줍니다. 현재 Avro 스키마는 테이블 스키마로부터 파생됩니다.

출처: 문서

본문

이 포맷은 직렬화 스키마(Serialization Schema)역직렬화 스키마(Deserialization Schema) 로 사용할 수 있습니다.

Apache Avro 포맷은 Avro 스키마를 기반으로 Avro 데이터를 읽고 쓸 수 있게 해줍니다. 현재 Avro 스키마는 테이블 스키마로부터 파생됩니다.

의존성

Avro 포맷을 사용하려면 빌드 자동화 도구(예: Maven 또는 SBT)를 사용하는 프로젝트와 SQL JAR 번들을 사용하는 SQL Client 모두에 다음 의존성이 필요합니다.

Maven 의존성 SQL Client
xml<br/><dependency><br/> <groupId>org.apache.flink</groupId><br/> <artifactId>flink-avro</artifactId><br/> <version>2.3.0</version><br/></dependency> 다운로드

Maven 의존성:

<dependency>
  <groupId>org.apache.flink</groupId>
  <artifactId>flink-avro</artifactId>
  <version>2.3.0</version>
</dependency>

Avro 포맷으로 테이블 생성하기

Kafka 커넥터와 Avro 포맷을 사용해 테이블을 만드는 예는 다음과 같습니다:

CREATE TABLE user_behavior (
  user_id BIGINT,
  item_id BIGINT,
  category_id BIGINT,
  behavior STRING,
  ts TIMESTAMP(3)
) WITH (
 'connector' = 'kafka',
 'topic' = 'user_behavior',
 'properties.bootstrap.servers' = 'localhost:9092',
 'properties.group.id' = 'testGroup',
 'format' = 'avro'
)

포맷 옵션 (Format Options)

옵션 필수 전달(Forwarded) 기본값 유형 설명
format required no (none) String 사용할 포맷을 지정합니다. 여기서는 'avro' 여야 합니다.
avro.encoding optional yes binary String 사용할 직렬화 인코딩입니다. 유효한 값: binary, json. (참조). 대부분의 애플리케이션은 더 작고 효율적인 메시지를 만들어 디스크와 네트워크 리소스 사용을 줄이고 높은 처리량 데이터에서 성능을 향상시키므로 binary 인코딩을 사용합니다. JSON 인코딩은 사람이 읽을 수 있는 메시지를 생성해 개발 및 디버깅에 유용하며, binary 인코딩 데이터를 처리할 수 없는 시스템과 상호작용할 때 호환성에 유용합니다.
avro.codec optional yes (none) String Filesystem 전용으로, avro 의 압축 코덱입니다. 기본은 Snappy 압축입니다. 유효한 값: null, deflate, snappy, bzip2, xz.
avro.timestamp_mapping.legacy optional yes true Boolean avro 에서 timestamp 의 레거시 매핑을 사용합니다. 1.19 이전에는 Flink 의 기본 동작이 SQL TIMESTAMPTIMESTAMP_LTZ 타입을 모두 AVRO TIMESTAMP 로 잘못 매핑했습니다. 올바른 동작은 Flink SQL TIMESTAMP 를 Avro LOCAL_TIMESTAMP 로, Flink SQL TIMESTAMP_LTZ 를 Avro TIMESTAMP 로 매핑하는 것이며, 이 레거시 매핑을 비활성화하면 올바른 매핑을 얻을 수 있습니다. 호환성을 고려해 기본적으로 레거시 동작을 사용합니다.

데이터 타입 매핑 (Data Type Mapping)

현재 Avro 스키마는 항상 테이블 스키마로부터 파생됩니다. 명시적으로 Avro 스키마를 정의하는 것은 아직 지원되지 않습니다. 따라서 아래 표는 Flink 타입에서 Avro 타입으로의 매핑을 나열합니다:

Flink SQL 타입 Avro 타입 Avro 논리 타입
CHAR / VARCHAR / STRING string
BOOLEAN boolean
BINARY / VARBINARY bytes
DECIMAL fixed decimal
TINYINT int
SMALLINT int
INT int
BIGINT long
FLOAT float
DOUBLE double
DATE int date
TIME int time-millis
TIMESTAMP long timestamp-millis
ARRAY array
MAP map (키는 반드시 string/char/varchar 타입)
MULTISET map (요소는 반드시 string/char/varchar 타입)
ROW record

위에 나열된 타입 외에도 Flink 는 nullable 타입의 읽기/쓰기를 지원합니다. Flink 는 nullable 타입을 Avro union(something, null) 에 매핑합니다. 여기서 something 은 Flink 타입에서 변환된 Avro 타입입니다.

Avro 타입에 대한 자세한 정보는 Avro Specification 을 참고하세요.

더 알아보기 (Learn more)