Получение ошибки nosuchmetoderror в Kafka Consumer версии 0.10.0.1

#websphere-liberty #kafka-consumer-api #message-hub

#websphere-liberty #kafka-consumer-api #сообщение-концентратор

Вопрос:

Я пытаюсь перейти на KafkaClient 0.10.0.1 с 0.9.0.0. Код отлично работает в рабочей версии 0.9.0.0. Теперь тот же код в платформе разработки выдает исключение при запуске потребителя со следующим исключением javax.servlet.Исключение ServletException: java.lang.Ошибка nosuchmetoderror: org/apache/kafka/clients/consumer/KafkaConsumer.subscribe(Ljava/util/List;)V (загружается из file:/home/vcap/app/wlp/usr/shared/config/lib/global/kafka-clients-0.10.0.1.jar по com.ibm.ws.classloading.internal.AppClassLoader@7a0d5027) вызывается из класса com.ibm.b2b.msghub.helper.AbstractB2BConsumer (загружается из file:/home/vcap/app/wlp/usr/shared/config/lib/global/B2BBlueMixLib-1.0.jar по com.ibm.ws.classloading.internal.AppClassLoader@7a0d5027).

Мадху

Ответ №1:

Клиентский API немного изменился между Kafka 0.9 и 0.10.

Изменилось определение KafkaConsumer.subscribe(). Первый аргумент теперь имеет тип Collection вместо List .

Это было сделано, чтобы сделать API более согласованным, поскольку теперь большинство (все?) Вызовы принимают объект коллекции, тогда как раньше это было сочетание нескольких типов.

Комментарии:

1. Спасибо, Микаэль, за ваш ответ. Я попытался преобразовать список в коллекцию<String> . Это не сработало. Поэтому я использовал метод subscribe, который использует объект Pattern. Я сталкиваюсь с той же проблемой для ConsumerRebalanceListener, где я реализую KafkaConsumer.seekToEnd для метода onPartitionsAssigned Collection<TopicPartition> cur = Arrays.asList(раздел); KafkaConsumer.seekToEnd(cur);

2. Для приведенного выше кода я получаю ошибку компиляции: [ОШИБКА] требуется: org.apache. kafka.common. Найдено TopicPartition[] [ОШИБКА]: java.util. Коллекция kafka.common. TopicPartition> [ОШИБКА] причина: несоответствие переменных; java.util. Коллекция kafka.common. TopicPartition> не может быть преобразован в org.apache. kafka.common. Раздел темы

3. Список уже является коллекцией, поэтому приводить его не нужно. Это больше походило на проблемы с зависимостями. Либо вы создали с неправильным уровнем Kafka, либо у вас неправильная версия Jar на вашем сервере приложений. То же самое для seekToEnd(). Теперь требуется коллекция. Но из вашего вывода похоже, что он ожидал старый тип (TopicPartition varargs)!