前言
我在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 冲突的问题。