开发者社区> 问答> 正文

用application mode部署应用,问题如下

用application mode部署应用,classloader.resolve-order参数是否必须要改为parent-first? 我写了一个 process function的demo,自定义source产生数据sink到kafka,然后发布到yarn集群运行,flink版本是1.11.2,采用application Mode 部署,然后发现jobmanager-log报错: Failed to construct kafka producer;Caused by: org.apache.kafka.common.KafkaException: class org.apache.kafka.common.serialization.ByteArraySerializer is not an instance of org.apache.kafka.common.serialization.Serializer。 换了flink版本为1.12.1发现还是报这个错,后尝试采用per-job Mode部署发现是OK的。查资料发现是跟flink的类加载方式有关,即flink-conf.yml中的classloader.resolve-order参数,要将默认的 child-first改成parent-first,修改后确实ok了,但是有个疑惑,为啥要改这个参数呢,看了官方文档,一般不建议改这个参数的,他避免了使用flink内置的类加载器,而是使用APP自己的。*来自志愿者整理的flink邮件归档

展开
收起
JACKJACK 2021-12-08 10:58:04 901 0
1 条回答
写回答
取消 提交回答
  • 对的是我!

    你是打包的时候自己打了 kafka 的依赖进去吗?看起来是应用里有一个 kafka 版本 A,接口 org.apache.kafka.common.serialization.Serializer 用应用 classloader 加载,然后 flink kafka connector 用集群 classloader 加载,继承自集群 classloader 里的 org.apache.kafka.common.serialization.Serializer 导致这个问题。*来自志愿者整理的flink邮件归档

    2021-12-08 11:17:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Scaling Spark application by c 立即下载
Well-That-Escalated-Quickly-How-Abusing-The-Docker-API-Led-To-Remote-Code-Execution-Same-Origin-Bypass-And-Persistence 立即下载
Custom applicationgs 立即下载