Я создаю java API для подключения кафки

Я пишу java API для создания kafka производителя У меня ошибка:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.kafka.clients.producer.ProducerConfig.(Ljava/util/Properties;)V at in.co.hadooptutorials.data.generator.cdr.kafka.main(kafka.java:65)

Ниже мой код

public class kafka {

public static void main(String[] args) throws IOException {
 String TOPIC_NAME = "test";
    String objec  = "hello";

    Properties props=new Properties();
    props.put("bootstrap-server", "localhost:9092");
    props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    ProducerConfig config = new ProducerConfig(props);
    System.out.println("confing work.");
    KafkaProducer<String,String> sampleProducer= new KafkaProducer<String,String>(props);

    ProducerRecord<String, String> record = new ProducerRecord<String, String>(TOPIC_NAME,objec);        
    sampleProducer.send(record);

    sampleProducer.close();
    System.out.println("SimpleProducer Completed.");

}
}

Как решить эту проблему?

У вас есть правильная версия для всех библиотек?

Buffalo 26.06.2019 14:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Здесь:

java.lang.NoSuchMethodError:

Этот всегда означает: какой-то класс хочет использовать что-то из другого класса, а во время выполнения этой другой вещи нет.

У этого всегда одна и та же основная причина: несовместимые уровни кода. Значение: вы используете libA версии n, а libA использует libB. Теперь libA требует, чтобы libB была версии мм>, но из-за непоследовательной настройки ваша libB имеет версию разные, несовместимую с версией мм>.

Короче говоря: посмотрите, как вы настраиваете свои зависимости. Убедитесь, что они непротиворечивы и отражают то, что kafka утверждает, что поддерживается.

Ваш код вызывает конструктор 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 и т. д.).

Ответ принят как подходящий

Должно быть bootstrap.servers вместо bootstrap-server.

Всегда лучше использовать org.apache.kafka.clients.producer.ProducerConfig при настройке конфигов. например:

    configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9090");
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

Другие вопросы по теме