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 TIMESTAMP 와 TIMESTAMP_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 을 참고하세요.