Kafka ClickPipes에서 지원하는 스키마 레지스트리
- Confluent 호환 레지스트리: Confluent 스키마 레지스트리와 API 호환되는 모든 레지스트리로, Confluent 스키마 레지스트리 및 Redpanda 스키마 레지스트리 등이 포함됩니다. Avro와 Protobuf를 지원합니다.
- AWS Glue 스키마 레지스트리: 일반적으로 Amazon MSK에서 AWS Glue SerDe를 사용해 직렬화한 Avro 데이터용입니다.
Confluent 호환 레지스트리
구성
- 스키마 subject의 전체 경로를 제공합니다(예:
https://registry.example.com/subjects/events)- 필요에 따라 URL에
/versions/[version]을 추가하여 특정 버전을 참조할 수 있습니다(그렇지 않으면 ClickPipes가 최신 버전을 가져옵니다).
- 필요에 따라 URL에
- 스키마 ID의 전체 경로를 제공합니다(예:
https://registry.example.com/schemas/ids/1000) - 스키마 레지스트리 루트 URL을 제공합니다(예:
https://registry.example.com)
네트워크 연결
- 스키마 레지스트리 URL은
https://를 사용해야 합니다. - 레지스트리 호스트명이 비공개 주소로 확인되는 경우, ClickPipe에 선택된 reverse private endpoint를 통해 연결할 수 있어야 합니다. 그렇지 않으면 Setup 중 연결 확인이 실패합니다.
작동 방식
- 레코드 값에 스키마 ID가 포함되어 있으면 이를 사용해 스키마를 가져옵니다.
- 레코드 값에 스키마 ID가 포함되어 있지 않으면 ClickPipe 구성에 지정된 스키마 ID 또는 subject 이름을 사용해 스키마를 가져옵니다.
- 레코드 값이 내장된 스키마 ID 없이 작성되었고 ClickPipe 구성에도 스키마 ID 또는 subject 이름이 지정되지 않은 경우, 스키마를 가져오지 않으며 해당 메시지는 건너뜁니다. 이때 ClickPipes 오류 테이블에
SOURCE_SCHEMA_ERROR가 기록됩니다. - 레코드 값이 스키마를 준수하지 않으면 해당 메시지는 건너뜁니다. 이때 ClickPipes 오류 테이블에
DATA_PARSING_ERROR가 기록됩니다. - Protobuf 스키마에만 해당: ClickPipes는 종속성으로 정의된 가져온 스키마를 모두 로드합니다. 외부 참조가 있는 Avro 스키마는 아직 지원되지 않습니다.
_key.id와 같은 필드의 매핑이 구성되면 ClickPipes는 Kafka 키에 포함된 스키마 ID를 레코드 값과 독립적으로 해석합니다. 키는 다른 스키마 ID를 사용할 수 있지만, 값과 동일한 레지스트리 제품군 및 직렬화 형식을 사용해야 합니다. 해석된 키 스키마는 캐시되며 스키마 변경 사항은 자동으로 감지됩니다.
AWS Glue 스키마 레지스트리
AWSKafkaAvroSerializer 사용), ClickPipes는 AWS Glue 스키마 레지스트리에서 해당 스키마를 직접 확인할 수 있습니다. Glue는 Confluent-compatible registries와 wire 형식 및 API가 다르므로 별도로 구성합니다.
AWS Glue 스키마 레지스트리 구성은 현재 ClickHouse Cloud 콘솔에서만 사용할 수 있습니다. ClickPipes API 또는 Terraform 프로바이더를 통한 구성은 지원되지 않습니다.
Avro만 지원합니다. AWS Glue 레지스트리는 Avro 형식만 지원합니다. Glue SerDe는 JSON과 Protobuf도 프레이밍할 수 있지만, ClickPipes에서는 지원하지 않으며 파이프를 생성할 때 거부됩니다.
구성
구성할 레지스트리 URL은 없습니다. Glue SerDe에서 생성되는 모든 레코드에는 해당 스키마 버전의 ID가 포함됩니다. ClickPipes는
glue:GetSchemaVersion을 사용해 이를 해석하고, 고유한 스키마 버전마다 API를 한 번 호출해 캐시합니다. 스키마 진화는 자동으로 처리됩니다. 스트림 중간에 레코드가 새 스키마 버전으로 전환되면 처음 발견될 때 해석됩니다.
IAM 설정
옵션 A: 브로커의 IAM 아이덴티티 재사용
- IAM 역할: MSK에 구성된 역할의 권한 정책에 해당 문을 추가하십시오.
- IAM credentials: 액세스 키와 연결된 IAM 주체의 권한 정책에 해당 문을 추가하십시오.
옵션 B: 전용 레지스트리 역할 사용
AWS 배포에만 해당합니다. 이 옵션은 서비스의 AWS IAM 역할을 사용하므로 AWS에 배포된 ClickHouse Cloud 서비스가 필요합니다. 서비스가 GCP 또는 Azure에서 실행되고 브로커가 IAM 인증을 사용하지 않는 경우에는 전용 레지스트리 역할을 구성할 수 없습니다.
1
ClickHouse 서비스 IAM 역할 ARN 가져오기
서비스를 열고 설정 탭을 선택합니다. Network security information 섹션까지 스크롤한 후
arn:aws:iam::123456789012:role/CH-S3-example-service-Role 형식의 ARN인 Service role ID (IAM) 값을 복사합니다. 아래에서는 이 값을 {ClickHouse_IAM_ARN}으로 지칭합니다. AWS에 배포된 각 ClickHouse 서비스에는 고유한 역할이 있으므로 이 값은 서비스마다 다릅니다.2
레지스트리 IAM 역할 생성
AWS 계정에서 IAM 역할을 생성합니다. 역할 이름은 반드시 권한 정책 구성
ClickHouseAccessRole-로 시작해야 합니다.신뢰 정책 구성{ClickHouse_IAM_ARN}을 이전 단계에서 복사한 값으로 바꿉니다.3
ClickPipe 구성
마법사의 IAM 역할 ARN 필드에 새 역할의 ARN을 붙여 넣습니다.
IAM 리소스 범위. 이 예시는 모두
"*"에 대한 glue:GetSchemaVersion 권한을 부여하는 AWS의 deserializer 관련 문서화된 정책과 AWSGlueSchemaRegistryReadonlyAccess 관리형 정책을 따릅니다. ClickPipes는 해석된 각 스키마가 구성한 레지스트리 이름에 속하는지 별도로 확인하며, 다른 레지스트리의 버전은 거부합니다.문제 해결
제한 사항
- Avro만 지원됩니다. Glue SerDe를 통한 JSON Schema 및 Protobuf 형식은 지원되지 않습니다.
- Kafka 소스만 지원됩니다. Kinesis ClickPipes에서는 Glue 레지스트리를 사용할 수 없습니다.
스키마 매핑
_key. 접두사가 있는 구조화된 키에서 매핑된 레코드 또는 메시지 필드에도 적용됩니다.
- 스키마에 ClickHouse 대상 매핑에 포함되지 않은 필드가 있으면 해당 필드는 무시됩니다.
- 스키마에 ClickHouse 대상 매핑에 정의된 필드가 없으면 ClickHouse 컬럼은 0 또는 빈 문자열과 같은 “제로” 값으로 채워집니다.
DEFAULT표현식은 지원되지 않습니다. - 스키마 필드와 ClickHouse 컬럼이 호환되지 않으면 해당 행/메시지의 삽입이 실패하고, 이 실패는 ClickPipes 오류 테이블에 기록됩니다. 일부 암시적 변환(예: 숫자 타입 간 변환)은 지원되지만, 모든 경우가 지원되는 것은 아닙니다(예: Avro 레코드 필드는
Int32ClickHouse 컬럼에 삽입할 수 없습니다).