如何根据需要定义具有不同自定义类型键和值序列化程序的kafka生成器?

问题描述 投票:0回答:2

我有KafkaProducer,我已经配置了键和值序列化器,如下所示:

    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "my custom class");   

现在我的问题是如何为不同类型的值序列化器定义生成器,如:

    props.put("value.serializer", "my custom class1");
    props.put("value.serializer", "my custom class2");

为了获得最佳性能,最好只在应用程序之间初始化单个kafka生成器。那么如何根据需要定义具有不同自定义类型键和值序列化器的kafka生成器?

java apache-kafka
2个回答
2
投票

每个Producer实例不能有多个序列化程序。

如果您有多个序列化程序,则需要多个属性,因此需要多个已配置的生成器实例。


但是,这并不意味着还有其他方法。 Spring-Kafka提供JSON的映射类型,Confluent支持Java序列化器中的多类型Avro架构。


0
投票

我们可以使用不同的KEY,VALUE序列化器创建多个kafkaProducer,我们可以处理那些kafkaProducers

    @Bean
    public  Map<String, Object> producerProperties() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
        configProps.put(ProducerConfig.RETRIES_CONFIG,"2000");
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        return configProps;
    }

    @Bean
    public KafkaProducer<String, String> kafkaProducer() {
        return new KafkaProducer<String, String>(producerProperties());
    }

    @Bean
    public  Map<String, Object> producerJSONProperties() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress);
        configProps.put(ProducerConfig.RETRIES_CONFIG,"2000");
        configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, JSONSerializer.class);
        configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JSONSerializer.class);
        return configProps;
    }

    @Bean
    public KafkaProducer<String, String> kafkaJSONProducer() {
        return new KafkaProducer<String, String>(producerJSONProperties());
    }
© www.soinside.com 2019 - 2024. All rights reserved.