前言

我在idea 项目中读取数据是可以的,但是项目打成jar在flink上运行报错。
刚开始以为是打jar 包的问题,最后发现是flink运行jar 缺少依赖。

java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer
	at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer.setDeserializer(FlinkKafkaConsumer.java:290)
	at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer.<init>(FlinkKafkaConsumer.java:196)
	at org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer.<init>(FlinkKafkaConsumer.java:142)
	at org.apache.flink.streaming.connectors.kafka.table.KafkaDynamicSource.createKafkaConsumer(KafkaDynamicSource.java:358)
	at org.apache.flink.streaming.connectors.kafka.table.KafkaDynamicSource.getScanRuntimeProvider(KafkaDynamicSource.java:190)
	at org.apache.flink.table.planner.sources.DynamicSourceUtils.validateScanSource(DynamicSourceUtils.java:254)
	at org.apache.flink.table.planner.sources.DynamicSourceUtils.prepareDynamicSource(DynamicSourceUtils.java:71)
	at org.apache.flink.table.planner.plan.schema.CatalogSourceTable.toRel(CatalogSourceTable.java:101)
	at org.apache.calcite.rel.core.RelFactories$TableScanFactoryImpl.createScan(RelFactories.java:495)

在这里插入图片描述
解决办法: 报错的原因是kafka序列化的问题,在官网下载 kafka-client,然后放到flink 的lib目录下就可以了。
在这里插入图片描述
还有遇到一个问题,是读取mysql 数据 ,在本地能执行,但是打成jar 在服务器上不能运行,这个也怀疑是jar问题,maven 插件打成的可运行的jar 来放到服务器执行,也是不行,最终解决方案,是 打包不打依赖包,然后把 maven 中依赖的包全部放到flink 的 lib 下来运行。这样解决jar 冲突的问题。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐