基于 Debezium 内容的路由器设置无法找到 DebeziumException

Debezium content based router setup unable to find DebeziumException

我正在尝试在 docker 中设置 Debezium 源连接器 ,它使用 ContentBasedRouting,我正在关注 official doc

我在 /kafka/connect/debezium-connector-mysql 中有以下所有依赖项:

antlr4-runtime-4.7.2.jar                  groovy-3.0.9.jar
debezium-connector-mysql-1.0.3.Final.jar  groovy-json-3.0.9.jar
debezium-core-1.0.3.Final.jar             groovy-jsr223-3.0.9.jar
debezium-ddl-parser-1.0.3.Final.jar       mysql-binlog-connector-java-0.19.1.jar
debezium-scripting-1.7.2.Final.jar        mysql-connector-java-8.0.16.jar

目前我正在尝试添加具有以下转换的连接器:

 "transforms": "route",
 "transforms.route.type": "io.debezium.transforms.ContentBasedRouter",
 "transforms.route.language": "jsr223.groovy",
 "transforms.route.topic.expression": "value.after.name == 'x' ? 'topic1' : null",
 "transforms.route.null.handling.mode": "drop"

我得到 HTTP 状态 500 和日志:

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: io/debezium/DebeziumException
   at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:408)
   at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:365)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:318)
   at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
   at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
   at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:544)
   at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
   at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
   at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
   at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
   at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
   at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
   at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
   at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
   at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
   at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
   at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)
   at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
   at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
   at org.eclipse.jetty.server.Server.handle(Server.java:494)
   at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
   at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
   at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
   at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
   at org.eclipse.jetty.io.ChannelEndPoint.run(ChannelEndPoint.java:117)
   at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
   at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
   at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: io/debezium/DebeziumException
   at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:254)
   at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:236)
   at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
   at org.glassfish.jersey.server.ServerRuntime.run(ServerRuntime.java:261)
   at org.glassfish.jersey.internal.Errors.call(Errors.java:248)
   at org.glassfish.jersey.internal.Errors.call(Errors.java:244)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
   at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
   at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
   at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
   at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:679)
   at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:392)
   ... 28 more
Caused by: java.lang.NoClassDefFoundError: io/debezium/DebeziumException
   at java.base/java.lang.Class.forName0(Native Method)
   at java.base/java.lang.Class.forName(Class.java:398)
   at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:719)
   at org.apache.kafka.connect.runtime.ConnectorConfig.enrich(ConnectorConfig.java:308)
   at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:302)
   at org.apache.kafka.connect.runtime.distributed.DistributedHerder.call(DistributedHerder.java:745)
   at org.apache.kafka.connect.runtime.distributed.DistributedHerder.call(DistributedHerder.java:742)
   at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:342)
   at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:282)
   at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
   at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
   ... 1 more
Caused by: java.lang.ClassNotFoundException: io.debezium.DebeziumException
   at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
   at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:104)
   at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
   ... 14 more

尝试添加一个没有转换的连接器(其他一切都没有改变)并且成功了。 我做错了什么?

好的,所以我从干净的环境开始解决了这个问题,因为我可能混合使用了太多版本。确保我对所有内容都使用 Debezium 1.8,也许最奇怪的是我不得不将所有 Debezium 罐子放在 /kafka/libsconnect 容器中,因为它在 /kafka/connect/debezium-connector-mysql 中不起作用] 出于某种原因...