Запуск Kafka Connect в веб-приложении - PullRequest
0 голосов
/ 25 августа 2018

Я пытаюсь запустить Kafka Connect (1.1.1-cp1) в весеннем веб-приложении, создав экземпляр StandalonHerder в виде Spring Bean, но получая ClassNotFoundException из Plugins # pluginClass ниже.

protected static Class pluginClass(…){
    Class<?> klass = loader.loadClass(classOrAlias, false);  //-> Klass = org.apache.kafka.connect.json.JsonConverter

    if (pluginClass.isAssignableFrom(klass)) {  //pluginClass = org.apache.kafka.connect.storage.Converter
        return (Class<? extends U>) klass;
    }

    throw new ClassNotFoundException(…);

}

Вот иерархия загрузчиков классов klass и pluginClass. Так как их загрузчики классов различны, isAssignableFrom возвращает false и выдает исключение.

klass
- PluginClassLoader
        Parent: DelegatingClassLoader
            Parent: Launcher$AppClassLoader
pluginClass
    - ParallelWebAppClassLoader
        Parent: URLClassLoader
            parent : Launch$AppClassLoader.

Может ли Kafka Connect работать в веб-приложении? или я что-то упустил?

Вот иерархия загрузчиков классов при запуске Kafka connect из основного метода.

klass
    - PluginClassLoader
        Parent: DelegatingClassLoader
            Parent: Launcher$AppClassLoader
pluginClass
    - Launch$AppClassLoader.

isAssignableFrom возвращает true в этом случае.

...