Получение NoSuchMethodError в Kafka Consumer v0.10.0.1

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

Мадху


person Madhu    schedule 05.10.2016    source источник


Ответы (1)


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

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

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

person Mickael Maison    schedule 06.10.2016
comment
Спасибо Микаэль за ваш ответ. Я попытался привести список к Collection‹String›. Это не работает. Поэтому я использовал метод подписки, который использует объект Pattern. Я сталкиваюсь с той же проблемой для ConsumerRebalanceListener, где я реализую kafkaConsumer.seekToEnd для метода onPartitionsAssigned Collection‹TopicPartition› cur = Arrays.asList(partition); kafkaConsumer.seekToEnd(cur); - person Madhu; 06.10.2016
comment
Для приведенного выше кода я получаю сообщение об ошибке компиляции: [ОШИБКА] требуется: org.apache.kafka.common.TopicPartition [] [ОШИБКА] найдено: java.util.Collection‹org.apache.kafka.common.TopicPartition› [ОШИБКА] причина: несоответствие varargs; java.util.Collection‹org.apache.kafka.common.TopicPartition› нельзя преобразовать в org.apache.kafka.common.TopicPartition - person Madhu; 06.10.2016
comment
Список уже является коллекцией, поэтому нет необходимости приводить. Это больше походило на проблемы с зависимостью. Либо вы создали не тот уровень Kafka, либо у вас неправильная версия Jar на вашем сервере приложений. То же самое для seekToEnd(). Теперь он принимает коллекцию. Но из вашего вывода похоже, что ожидался старый тип (Varargs TopicPartition)! - person Mickael Maison; 06.10.2016