【问题标题】:Kafka Producer AWSSchemaRegistryConstants properties for YAML FileYAML 文件的 Kafka 生产者 AWSSchemaRegistryConstants 属性
【发布时间】:2021-08-20 08:13:38
【问题描述】:

我使用自己的 ProducerFactory bean 设置了 Kakfa 生产者,它使用 AWS Glue Schema Registry 注册 AVRO 模式,我想将所有属性移动到 YML 文件中,但我不知道如何在 yml 中声明 AWSSchemaRegistryConstants 属性文件,有什么想法吗?代码如下:

@Configuration
@EnableKafka
class KafkaProducerConfig {

 @Bean
 fun producerConfigs(): Map<String, Any> {
    val props: MutableMap<String, Any> = HashMap()
    props[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = "localhost:9092"
    props[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = IntegerSerializer::class.java
    props[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = AWSKafkaAvroSerializer::class.java
    props[AWSSchemaRegistryConstants.AWS_REGION] = "ap-southeast-2"
    props[AWSSchemaRegistryConstants.SCHEMA_AUTO_REGISTRATION_SETTING] = "true"
    props[AWSSchemaRegistryConstants.SCHEMA_NAME] = "ac-schema"
    props[AWSSchemaRegistryConstants.REGISTRY_NAME] = "poc-registry"
    return props
}

@Bean
 fun producerFactory(): ProducerFactory<Int, AcCk> {
    return DefaultKafkaProducerFactory(producerConfigs())
}

@Bean
 fun kafkaTemplate(): KafkaTemplate<Int, AcCk> {
    return KafkaTemplate(producerFactory())
 }

}

YML 文件:

spring:
 kafka:
  producer:
   bootstrap-servers: localhost:9092
   key:
     serializer: org.apache.kafka.common.serialization.IntegerSerializer
   value:
     serializer: com.amazonaws.services.schemaregistry.serializers.avro.AWSKafkaAvroSerializer

   AWSSchemaRegistryConstants ?????? 

【问题讨论】:

    标签: spring-boot apache-kafka spring-kafka kafka-producer-api


    【解决方案1】:

    producer 下的缩进是正确的,但是,您需要打开 AWSSchemaRegistryConstants 的枚举/类并查看每个属性是什么并将字符串复制到配置中。例如,您基本上要求的与尝试在 YAML 中使用 ProducerConfig 对象没有什么不同

    或者您可以继续在代码中构建 KafkaTemplate 而不是使用 YAML,因为这将允许您进行编译时属性验证并使用枚举类

    【讨论】:

    • 感谢@OneCricketeer。将该配置保留在代码中而不是 YML 文件中是否还有其他好处。似乎,我不确定将所有这些配置从代码库中移出并将它们放入 YML 文件中是最佳实践吗?
    • IMO,使用配置文件属性的主要原因是允许配置文件覆盖,但这可以在带有环境变量的代码中轻松完成
    • @D.B 这真的对你有用吗?它不适合我。它不会在AWSSchemaRegistryConstants 下添加任何属性
    • @user32 您实际上不能将 AWSSchemaRegistryConstants.* 文字放入配置中。它们需要是实际的运行时字符串
    • @OneCricketeer 对,枚举值例如AWS_REGION 将是region。这就是我所做的。我打开了枚举类并在配置中使用了字符串值,但它没有拾取它们。
    猜你喜欢
    • 2013-08-30
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2017-06-09
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多