在有网络并发基础和大数据框架算法基础情况下,算法和理解源码并不是最耗时的(大概),因为如果首次自己搭建火花在卡夫卡消费应用框架,并且缺乏可执行演示情况下,总会莫名其妙出现一些奇怪问题。
很容易可以写出一个SparkStreaming消费卡夫卡的简单的java的的样例,但奇怪的是本地调试集群总是通不过,
检查发现程序莫名被停止,但控制台在决定停止之前并没有抛出异常
查看Spark Web UI发现是有成功提交程序的,但是大部分错误并没有记录log而是被杀,(有时还会出现一两次“ERROR CoarseGrainedExecutorBackend:Executor自我退出由于:驱动程序169.254.35.0:63201解除关联!关闭。“或”ERROR CoarseGrainedExecutorBackend:RECEIVED SIGNAL TERM“之类的日志,以至于怀疑Spark配置有问题,结果和这次错误没有太大关联),可以推测断点应该在JavaStreamingContext之后,差错期间也有评论过Kafka / Spark /集群Spark和Kafka版本是否对应,但对比并无明显错误。最后打断点到KafkaUtils.createDirectStream,发现确实是在此处抛出如下异常:1
2.1
2.2
线索在第二个例外中:JsonMappingException状语从句:参照jackson问题有关 https://blog.csdn.net/dapanbest/article/details/81281861
解决方法:
<!--排除Kafka自带jackson-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>${kafka.version}</version>
<exclusions>
<exclusion>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
<scope>provided</scope>
</dependency>
<!--重新添加对jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.6.6</version>
</dependency>
测试通过,最后得出结论:KafkaUtil的问题和默认依赖的jackson使用版本有关..