Для собственного клиента Java Kafka существует конфигурация Kafka, называемая enable.idempotence, и мы можем установить ее как true, чтобы включить производителя идемпотентности.
Однако для Spring Kafka я не могу найти аналогичное свойство идемпотентности в классе KafkaProperties.
Поэтому мне интересно, если я вручную установлю в своем файле конфигурации Spring Kafka, вступит ли это свойство в силу или Spring полностью проигнорирует эту конфигурацию для Spring Kafka?

Вы можете найти его с помощью ProducerConfig, так как это конфигурация производителя. Чтобы включить это, вам нужно добавить следующую строку в производителяКонфигурации:
Properties producerProperties = new Properties();
producerProperties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
producerProperties.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);
Есть два способа указать это свойство
приложение.свойства Вы можете использовать это свойство, чтобы указать любые дополнительные свойства производителя.
spring.kafka.producer.properties.*= # Additional producer-specific properties used to configure the client.
Если у вас есть дополнительная общая конфигурация между Producer и Consumer
spring.kafka.properties.*= # Additional properties, common to producers and consumers, used to configure the client.
Через код Вы также можете переопределить и настроить конфиги
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,bootstrapAddress);
configProps.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
Вы пытаетесь добавить функции, которые не обрабатываются Spring KafkaProperties, если вы посмотрите документацию, вы можете сделать следующее:
Only a subset of the properties supported by Kafka are available directly through the KafkaProperties class.
If you wish to configure the producer or consumer with additional properties that are not directly supported, use the following properties:
spring.kafka.properties.prop.one=first
spring.kafka.admin.properties.prop.two=second
spring.kafka.consumer.properties.prop.three=third
spring.kafka.producer.properties.prop.four=fourth
spring.kafka.streams.properties.prop.five=fifth
Янник