메인 콘텐츠로 건너뛰기

설명

Apache Avro는 효율적인 데이터 처리를 위해 binary encoding을 사용하는 행 지향 직렬화 포맷입니다. AvroConfluent 포맷은 Confluent 스키마 레지스트리(또는 API 호환 서비스)를 사용해 Avro로 인코딩된 메시지를 읽고 쓸 수 있습니다. 각 메시지는 Confluent wire 형식을 사용합니다. 즉, 매직 바이트(0x00) 뒤에 4바이트 빅 엔디언 스키마 ID가 오고, 그 뒤에 Avro 바이너리 데이터가 이어집니다. 읽을 때 ClickHouse는 레지스트리를 쿼리하여 스키마 ID를 확인합니다. 쓸 때 ClickHouse는 출력 컬럼에서 파생된 스키마를 등록하고, 생성된 ID를 각 행 앞에 추가합니다. 최적의 성능을 위해 스키마는 캐시됩니다.

데이터 타입 매핑

아래 표에는 Apache Avro 포맷이 지원하는 모든 데이터 타입과 INSERTSELECT 쿼리에서 각각에 대응하는 ClickHouse 데이터 타입이 나와 있습니다. ** Variant 타입은 필드 값으로 null을 암묵적으로 허용하므로, 예를 들어 Avro union(T1, T2, null)Variant(T1, T2)로 변환됩니다. 따라서 ClickHouse에서 Avro를 생성할 때는 스키마 추론 과정에서 어떤 값이 실제로 null인지 알 수 없으므로, Avro union 타입 집합에 항상 null 타입을 포함해야 합니다. *** Avro 논리 타입 지원되지 않는 Avro 논리 데이터 타입:
  • time-millis
  • time-micros
  • duration

포맷 설정

예시

Kafka에서 읽기

Avro로 인코딩된 Kafka 토픽을 Kafka 테이블 엔진으로 읽으려면 format_avro_schema_registry_url 설정을 사용하여 스키마 레지스트리 URL을 지정하십시오.

Kafka에 쓰기

AvroConfluent 메시지를 Kafka 토픽에 쓰려면 스키마 레지스트리 URL과 subject 이름을 모두 설정하십시오. 스키마는 처음 쓸 때 레지스트리에 자동으로 등록됩니다.

기본 인증 사용

스키마 레지스트리에서 기본 인증이 필요한 경우(예: Confluent Cloud를 사용하는 경우), format_avro_schema_registry_url 설정에 URL로 인코딩된 자격 증명을 지정할 수 있습니다.

문제 해결

수집 진행 상황을 모니터링하고 Kafka consumer의 오류를 디버깅하려면 system.kafka_consumers 시스템 테이블을 조회할 수 있습니다. 배포 환경에 여러 레플리카가 있는 경우(예: ClickHouse Cloud)에는 clusterAllReplicas 테이블 함수를 사용해야 합니다.
스키마 확인 관련 문제가 발생하면 kafkacatclickhouse-local을 사용해 문제를 진단할 수 있습니다:
마지막 수정일 2026년 7월 2일