[ 
https://issues.apache.org/jira/browse/KAFKA-17111?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17864804#comment-17864804
 ] 

Greg Harris commented on KAFKA-17111:
-------------------------------------

Hi [~vbalani] Thank you for the bug report! I can reproduce it locally.

I believe that this should be a cosmetic error, as the error is thrown when the 
classpath JsonConverter is found via the each plugin.path. These later get 
excluded to avoid duplicates: 
[https://github.com/apache/kafka/blob/25d775b742406477a0ff678b9990ed149d2157cc/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/PluginScanner.java#L144-L148]
 so even if the error was not thrown, these exceptions should be ignored.

I tried to figure out a way to prevent plugin scanning from finding classpath 
plugins, i'll have to take another look at that to see if we can prevent this 
sort of behavior in the future.
For now, I agree with your recommended course of action. I'll raise this in the 
release thread to see if we can include it in 3.8.0.

> ServiceConfigurationError in JsonSerializer/Deserializer during Plugin 
> Discovery
> --------------------------------------------------------------------------------
>
>                 Key: KAFKA-17111
>                 URL: https://issues.apache.org/jira/browse/KAFKA-17111
>             Project: Kafka
>          Issue Type: Bug
>          Components: connect
>    Affects Versions: 3.8.0
>            Reporter: Vikas Balani
>            Assignee: Vikas Balani
>            Priority: Major
>
> h3. Problem:
> JsonSerializer and JsonDeserializer use 
> objectMapper.findAndRegisterModules(), which attempts to register all Jackson 
> modules implementing com.fasterxml.jackson.databind.Module. This can cause a 
> ServiceConfigurationError when incompatible modules are present in the 
> classpath.
>  
> {code:java}
> java.util.ServiceConfigurationError: 
> org.apache.kafka.connect.storage.Converter: Provider 
> org.apache.kafka.connect.json.JsonConverter could not be instantiated
>   at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
>  at 
> java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
>  at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
>  at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
>  at 
> org.apache.kafka.connect.runtime.isolation.PluginScanner.handleLinkageError(PluginScanner.java:176)
>  at 
> org.apache.kafka.connect.runtime.isolation.PluginScanner.getServiceLoaderPluginDesc(PluginScanner.java:136)
>  at 
> org.apache.kafka.connect.runtime.isolation.ServiceLoaderScanner.scanPlugins(ServiceLoaderScanner.java:61)
>  at 
> org.apache.kafka.connect.runtime.isolation.PluginScanner.scanUrlsAndAddPlugins(PluginScanner.java:79)
>  at 
> org.apache.kafka.connect.runtime.isolation.PluginScanner.discoverPlugins(PluginScanner.java:67)
>  at 
> org.apache.kafka.connect.runtime.isolation.Plugins.initLoaders(Plugins.java:99)
>  at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:90)
>  at org.apache.kafka.connect.runtime.isolation.Plugins.<init>(Plugins.java:78)
>  at 
> org.apache.kafka.connect.cli.AbstractConnectCli.startConnect(AbstractConnectCli.java:128)
>  at 
> org.apache.kafka.connect.cli.AbstractConnectCli.run(AbstractConnectCli.java:101)
>  at 
> org.apache.kafka.connect.cli.ConnectDistributed.main(ConnectDistributed.java:113)
>  Caused by: java.util.ServiceConfigurationError: 
> com.fasterxml.jackson.databind.Module: 
> com.fasterxml.jackson.datatype.jsr310.JavaTimeModule not a subtype
>  at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:593)
>  at 
> java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1244)
>  at 
> java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1273)
>  at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1309)
>  at java.base/java.util.ServiceLoader$3.hasNext(ServiceLoader.java:1393)
>  at 
> com.fasterxml.jackson.databind.ObjectMapper.findModules(ObjectMapper.java:1158)
>  at 
> com.fasterxml.jackson.databind.ObjectMapper.findModules(ObjectMapper.java:1142)
>  at 
> com.fasterxml.jackson.databind.ObjectMapper.findAndRegisterModules(ObjectMapper.java:1192)
>  at 
> org.apache.kafka.connect.json.JsonSerializer.<init>(JsonSerializer.java:58)
>  at org.apache.kafka.connect.json.JsonConverter.<init>(JsonConverter.java:250)
>  at org.apache.kafka.connect.json.JsonConverter.<init>(JsonConverter.java:238)
>  at 
> java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
>  at 
> java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:502)
>  at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
>  at 
> java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
>  ... 13 more{code}
>  
> h3. Steps to Reproduce:
> 1. Start a connect worker with Service loading enabled and with certain 
> connector plugins in plugin path (e.g. AzureBlobSource & BigQuerySink)
> 2. Observe ServiceConfigurationError during plugin discovery
> h3. Current Behavior:
> ServiceConfigurationError is thrown with message 
> "com.fasterxml.jackson.databind.Module: <module-name> not a subtype"
> Where <module-name> can be one of: - 
>  * com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule
>  * com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
>  * com.fasterxml.jackson.datatype.guava.GuavaModule
>  * com.fasterxml.jackson.datatype.joda.JodaModule
> h3. Proposed Solution:
> Explicitly register the Afterburner module instead of using 
> findAndRegisterModules().
> h3. Potential Impact:
>  - Resolves compatibility issues with certain Jackson modules
>  - Maintains performance improvements from Afterburner module
>  - May slightly change behavior for users relying on auto-registration of 
> other Jackson modules



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to