Flink 踩坑汇总

这篇博客汇总了作者在学习Flink过程中遇到的两个主要问题:1)在使用field positions指定keys时出现InvalidProgramException,原因是尝试在Java程序中使用Scala的Tuple2;2)由于jar包冲突,KafkaConsumer调用assign方法时抛出NoSuchMethodError,解决方法是确保所有相关依赖版本一致。

最近在学习Flink,踩坑汇总。(后续会持续添加)

1、Exception in thread “main” org.apache.flink.api.common.InvalidProgramException: Specifying keys via field positions is only valid for tuple data types. Type: GenericType<scala.Tuple2>

17:23:53,861 INFO  org.apache.flink.api.java.typeutils.TypeExtractor             - class scala.Tuple2 is missing a default constructor so it cannot be used as a POJO type and must be processed as GenericType. Please read the Flink documentation on "Data Types & Serialization" for details of the effect on performance.
Exception in thread "main" org.apache.flink.api.common.InvalidProgramException: Specifying keys via field positions is only valid for tuple data types. Type: GenericType<scala.Tuple2>
	at org.apache.flink.api.common.operators.Keys$ExpressionKeys.<init>(Keys.java:232)
	at org.apache.flink.api.common.operators.Keys$ExpressionKeys.<init>(Keys.java:223)
	at org.apache.flink.streaming.api.datastream.DataStream.keyBy(DataStream.java:319)
	at com.xiaojian.StreamingJob.main(StreamingJob.java:76)

运行Flink的时候一直报这个错。

原因:我写的是Java程序,但是引用的Tuple2包是scala的,改成Java的就行。

2、java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.assign(Ljava/util/List;)V

Exception in thread "main" org.apache.flink.runtime.client.JobExecutionException: Job execution failed.
	at org.apache.flink.runtime.jobmaster.JobResult.toJobExecutionResult(JobResult.java:146)
	at org.apache.flink.runtime.minicluster.MiniCluster.executeJobBlocking(MiniCluster.java:647)
	at org.apache.flink.streaming.api.environment.LocalStreamEnvironment.execute(LocalStreamEnvironment.java:123)
	at com.xiaojian.mode.kafka.KafkaStream.main(KafkaStream.java:30)
Caused by: java.lang.NoSuchMethodError: org.apache.kafka.clients.consumer.KafkaConsumer.assign(Ljava/util/List;)V
	at org.apache.flink.streaming.connectors.kafka.internal.KafkaConsumerCallBridge09.assignPartitions(KafkaConsumerCallBridge09.java:42)
	at org.apache.flink.streaming.connectors.kafka.internal.KafkaConsumerThread.reassignPartitions(KafkaConsumerThread.java:405)
	at org.apache.flink.streaming.connectors.kafka.internal.KafkaConsumerThread.run(KafkaConsumerThread.java:243)

原因:我使用的 flink-connector-kafka-0.10_2.11中的kafka是 0.10 版本的,但是 kafka-clients 是 2.3.1 的,jar包冲突。此处将 kafka-clients 改成 0.10 版本就可以了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值