Ваш код вызывает конструктор ProducerConfig
:
ProducerConfig config = new ProducerConfig(props);
Во время выполнения вы видите ошибку, которая говорит, что этот метод не существует. Конструкторы, определенные в версиях до 1.0.2, не поддерживают передачу объекта Properties
. (https://github.com/apache/kafka/blob/1.0.2/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java#L360-L366).
ProducerConfig(Map<?, ?> props) {
super(CONFIG, props);
}
ProducerConfig(Map<?, ?> props, boolean doLog) {
super(CONFIG, props, doLog);
}
Обратите внимание, что в версии 1.1.0 был добавлен такой конструктор: https://github.com/apache/kafka/blob/1.1.0/clients/src/main/java/org/apache/kafka/clients/producer/ProducerConfig.java#L364-L366
public ProducerConfig(Properties props) {
super(CONFIG, props);
}
Тот факт, что ваш код компилирует, говорит о том, что подходящая версия библиотеки может быть найдена во время компиляции . Однако во время выполнения такая подходящая версия не может быть найдена (имеется в виду, что во время выполнения вы, вероятно, ссылаетесь на более старую версию, которая не поддерживает этот метод).
Решение будет состоять в том, чтобы проверить, какие версии библиотек Kafka вы включаете, как во время компиляции, так и во время выполнения, которые будут зависеть от того, как вы строите свой проект (например, через Maven, Gradle и т. Д.).