如何在Kafka Connect Runtime中升级Jetty Client依赖?
解决Kafka Connect Runtime依赖Jetty Client的安全漏洞问题
是否可以强制Kafka Connect使用指定版本的Jetty Client?
可以通过构建工具的依赖管理功能强制覆盖传递依赖的Jetty Client版本,但需要注意版本兼容性风险。
connect-runtime 3.8.1/3.9.0是否支持升级Jetty Client到12.x版本?
Kafka Connect 3.8.1和3.9.0默认依赖Jetty 9.x系列,而Jetty 12是跨大版本升级(从javax.* API切换到jakarta.* API),直接升级大概率会出现兼容性问题,比如类加载错误、方法签名不匹配等。除非你的项目已经全量迁移到Jakarta EE规范,否则不建议直接升级到Jetty 12。
处理依赖问题的具体建议
优先升级Jetty 9.x的最新安全补丁版本
Jetty 9.x系列仍在维护安全补丁,比如9.4.57.v20240903已经修复了已知漏洞。这个版本和Kafka Connect 3.x的兼容性最好,无需修改代码,直接通过依赖覆盖即可。使用构建工具强制覆盖依赖
- Maven:在
dependencyManagement中声明指定版本,自动覆盖传递依赖:<dependencyManagement> <dependencies> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> <version>9.4.57.v20240903</version> </dependency> </dependencies> </dependencyManagement> - Gradle:用
strictly和force强制锁定版本:dependencies { implementation 'org.apache.kafka:connect-runtime:3.8.1' implementation('org.eclipse.jetty:jetty-client') { version { strictly '9.4.57.v20240903' } force = true } }
- Maven:在
若必须升级到Jetty 12.x的注意事项
- 验证所有自定义Connector和业务代码是否兼容Jakarta EE规范,需将所有
javax.servlet相关依赖替换为jakarta.servlet。 - 引入Jetty的兼容性桥接包(如
jetty-jakarta-migration),但会增加项目复杂度,且无法保证100%兼容。 - 做全量测试:启动集群后,验证所有Connector的生产、消费逻辑,以及REST API是否正常工作。
- 验证所有自定义Connector和业务代码是否兼容Jakarta EE规范,需将所有
长期解决方案
查看Kafka官方发布计划,升级到默认使用更高版本Jetty的Kafka Connect版本(如后续的3.10+版本,需确认官方依赖清单),从根源上解决依赖漏洞问题。
内容的提问来源于stack exchange,提问作者Narendra Choudhary
相关产品推荐
相关产品推荐

