

# 从第三方架构注册表迁移到 AWS Glue 架构注册表
<a name="schema-registry-integrations-migration"></a>

从第三方架构注册表到 AWS Glue 架构注册表的迁移依赖于现有的当前第三方架构注册表。如果 Apache Kafka 主题中存在使用第三方架构注册表发送的记录，则使用者需要第三方模式注册表来反序列化这些记录。`AWSKafkaAvroDeserializer` 支持指定辅助反序列化程序类，该类指向第三方反序列化程序并用于反序列化这些记录。

第三方架构的停用有两个条件。第一，仅当使用器不再需要使用第三方架构注册表的 Apache Kafka 主题中的记录，并且这些记录不再适用于这些使用器，则会发生停用。第二，当根据为这些主题指定的保留期限退出 Apache Kafka 主题时，会发生停用。请注意，如果您的主题具有无限保留期，您仍然可以迁移到 AWS Glue 架构注册表，但您将无法停用第三方架构注册表。作为一种解决方法，您可以使用应用程序或 Mirror Maker 2 从当前主题中读取并生成一个新主题，其中包含 AWS Glue 架构注册表。

从第三方架构注册表迁移到 AWS Glue 架构注册表

1. 在 AWS Glue 架构注册表中创建注册表，或者使用默认注册表。

1. 停止使用器。对其进行修改以包含 AWS Glue 架构注册表作为主要反序列化程序，第三方架构注册表作为辅助反序列化程序。
   + 设置使用器属性。在此示例中，secondary\$1deserializer 设置为不同的反序列化程序。行为如下所示：使用器从 Amazon MSK 检索记录，并首先尝试使用 `AWSKafkaAvroDeserializer`。如果无法读取包含 AWS Glue 架构注册表架构的 Avro 架构 ID 的幻字节，则 `AWSKafkaAvroDeserializer` 尝试使用 secondary\$1deserializer 中提供的反序列化程序类。使用器属性中还需要提供特定于辅助反序列化程序的属性，例如 schema\$1registry\$1url\$1config 和 specific\$1avro\$1reader\$1config，如下所示。

     ```
     consumerProps.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
     consumerProps.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AWSKafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, KafkaClickstreamConsumer.gsrRegion);
     consumerProps.setProperty(AWSSchemaRegistryConstants.SECONDARY_DESERIALIZER, KafkaAvroDeserializer.class.getName());
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "URL for third-party schema registry");
     consumerProps.setProperty(KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG, "true");
     ```

1. 重启使用器。

1. 停止创建器并将创建器指向 AWS Glue 架构注册表。

   1. 设置创建器属性。在此示例中，创建器将使用默认注册表和自动注册架构版本。

      ```
      producerProps.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
      producerProps.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AWSKafkaAvroSerializer.class.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.AWS_REGION, "us-east-2");
      producerProps.setProperty(AWSSchemaRegistryConstants.AVRO_RECORD_TYPE, AvroRecordType.SPECIFIC_RECORD.getName());
      producerProps.setProperty(AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING, "true");
      ```

1. （可选）手动将现有架构和架构版本从当前第三方架构注册表移动到 AWS Glue 架构注册表，即 AWS Glue 架构注册表中的默认注册表或 AWS Glue 架构注册表中的特定非默认注册表。以 JSON 格式从第三方架构注册表导出架构并使用 AWS 管理控制台 或 AWS CLI 在 AWS Glue 架构注册表中创建新架构。

    如果您需要为使用 AWS CLI 和 AWS 管理控制台 新创建的架构版本启用与先前架构版本的兼容性检查，或者在启用架构版本自动注册的情况下发送包含新架构的消息时，则此步骤可能非常重要。

1. 启动创建器。