Поддерживаемые реестры схем для Kafka ClickPipes
- Реестры, совместимые с Confluent: любые реестры, API которых совместим с Confluent Schema Registry, включая сам Confluent Schema Registry и Redpanda Schema Registry. Поддерживаются Avro и Protobuf.
- AWS Glue Schema Registry: для данных Avro, сериализованных с помощью AWS Glue SerDe, обычно поступающих из Amazon MSK.
Реестры, совместимые с Confluent
Конфигурация
- Укажите полный путь к subject схемы (например,
https://registry.example.com/subjects/events)- При необходимости можно указать конкретную версию, добавив
/versions/[version]к URL (в противном случае ClickPipes получит последнюю версию).
- При необходимости можно указать конкретную версию, добавив
- Укажите полный путь к ID схемы (например,
https://registry.example.com/schemas/ids/1000) - Укажите корневой URL реестра схем (например,
https://registry.example.com)
Сетевое подключение
- URL реестра схем должен использовать
https://. - Если имя хоста реестра разрешается в частный адрес, он должен быть доступен через обратную частную конечную точку, выбранную для ClickPipe; в противном случае проверка подключения на этапе настройки завершится ошибкой.
Как это работает
- Если во value записи есть встроенный ID схемы, он будет использован для получения схемы.
- Если во value записи нет встроенного ID схемы, для получения схемы будет использован ID схемы или имя subject, указанные в конфигурации ClickPipe.
- Если value записи записано без встроенного ID схемы и в конфигурации ClickPipe не указан ни ID схемы, ни имя subject, схема не будет получена, а сообщение будет пропущено; в таблицу ошибок ClickPipes будет записана ошибка
SOURCE_SCHEMA_ERROR. - Если value записи не соответствует схеме, оно будет пропущено; в таблицу ошибок ClickPipes будет записана ошибка
DATA_PARSING_ERROR. - Только для схем Protobuf: ClickPipes загрузит все импортированные схемы, указанные как зависимости. Схемы Avro с внешними ссылками пока не поддерживаются.
_key.id, ClickPipes независимо от value записи определяет ID схемы, встроенный в ключ Kafka. Ключ может использовать другой ID схемы, но должен использовать то же семейство реестров и формат сериализации, что и value. Полученные схемы ключей кэшируются, а изменения схемы обнаруживаются автоматически.
AWS Glue Schema Registry
AWSKafkaAvroSerializer для топика Amazon MSK), ClickPipes может получать эти схемы непосредственно из AWS Glue Schema Registry. Glue использует другой формат передачи данных и другой API, чем реестры, совместимые с Confluent, поэтому настраивается отдельно.
Настройка AWS Glue Schema Registry в настоящее время доступна только в консоли ClickHouse Cloud. Через API ClickPipes или Terraform-провайдер она не поддерживается.
Только Avro. Реестры AWS Glue поддерживаются только для формата Avro. Glue SerDe также может формировать JSON и Protobuf, но ClickPipes их не поддерживает и отклоняет при создании пайпа.
Конфигурация
URL реестра настраивать не требуется. Каждая запись, созданная Glue SerDe, содержит идентификатор своей версии схемы, который ClickPipes получает с помощью
glue:GetSchemaVersion и кэширует; для каждой уникальной версии схемы выполняется один вызов API. Изменение схемы обрабатывается автоматически: если записи в потоке переключаются на новую версию схемы, она будет получена при первом обращении.
Настройка IAM
Вариант A: использовать IAM-идентичность брокера
- Роль IAM: Добавьте оператор в политику разрешений роли, настроенной для MSK.
- Учетные данные IAM: Добавьте оператор в политику разрешений субъекта IAM, связанного с ключом доступа.
Вариант B: использование отдельной роли для реестра
Только для развертываний в AWS. Для этого варианта требуется сервис ClickHouse Cloud, развернутый в AWS, поскольку он использует роль AWS IAM сервиса. Если ваш сервис работает в GCP или Azure, а брокер не использует аутентификацию IAM, настроить отдельную роль для реестра не получится.
1
Получите ARN роли IAM сервиса ClickHouse
Откройте сервис, перейдите на вкладку Settings, прокрутите до раздела Network security information и скопируйте значение Service role ID (IAM) — ARN вида
arn:aws:iam::123456789012:role/CH-S3-example-service-Role. Далее оно обозначается как {ClickHouse_IAM_ARN}. У каждого сервиса ClickHouse, развернутого в AWS, есть собственная роль, поэтому это значение отличается для каждого сервиса.2
Создайте роль IAM для реестра
Создайте роль IAM в своем аккаунте AWS. Имя роли должно начинаться с Настройте политику разрешений
ClickHouseAccessRole-.Настройте политику доверияЗамените {ClickHouse_IAM_ARN} значением из предыдущего шага.3
Настройте ClickPipe
Вставьте ARN новой роли в поле ARN роли IAM мастера.
Область действия IAM-ресурсов. Эти примеры соответствуют документированной AWS политике для десериализаторов и ее управляемой политике
AWSGlueSchemaRegistryReadonlyAccess, обе из которых предоставляют разрешение glue:GetSchemaVersion для "*". ClickPipes независимо проверяет каждую разрешенную схему на соответствие настроенному вами Имя реестра и отклоняет версии из любых других реестров.Устранение неполадок
Ограничения
- Поддерживается только Avro. JSON Schema и Protobuf через Glue SerDe не поддерживаются.
- Поддерживаются только источники Kafka. ClickPipes для Kinesis не могут использовать реестр Glue.
Сопоставление схемы
_key.:
- Если схема содержит поле, которое отсутствует в сопоставлении с целевой таблицей ClickHouse, это поле игнорируется.
- Если в схеме отсутствует поле, определённое в сопоставлении с целевой таблицей ClickHouse, соответствующий столбец ClickHouse будет заполнен “нулевым” значением, например 0 или пустой строкой. Обратите внимание, что выражения
DEFAULTне поддерживаются. - Если поле схемы и столбец ClickHouse несовместимы, вставка этой строки/сообщения завершится ошибкой, и ошибка будет записана в таблицу ошибок ClickPipes. Обратите внимание, что поддерживаются некоторые неявные преобразования (например, между числовыми типами), но не все (например, поле записи Avro нельзя вставить в столбец ClickHouse типа
Int32).