1、概述
博主在测试flink开发任务的时候发现,以下代码在本地测试的时候没有问题,但是上传到flink集群中跑的时候,数据发送不到指定的kafka主题sinkTopic,而是发送了其他的 topic。
...
SingleOutputStreamOperator sso = null;
sso = stream.map(new MapFunction<KafkaSourceMsg, String>() {
@Override
....
});
sso.sinkTo(KafkaSink.<String>builder().setBootstrapServers(sinkKafkaIP)
.setRecordSerializer(KafkaRecordSerializationSchema.builder()
.setTopic(sinkTopic)
.setValueSerializationSchema(new SimpleStringSchema())
.build()
)
.setDeliveryGuarantee(DeliveryGuarantee.AT_LEAST_ONCE)
.build());
...
2、问题原因
经过排查,发现是Flink集群的类加载机制导致的某些配置或代码逻辑被覆盖。博主的flink集群flink-conf.yaml配置文件,写了如下配置:
classloader.resolve-order: parent-first
导致了代码中配置的topic被覆盖。
3、解决方案
将flink-conf.yaml配置文件中的上述配置删掉,测试代码中sinkTopic正常生效。
其他Flink集群的类加载机制配置可能为:classloader.resolve-order。确保作业的依赖包被正确加载,且没有与集群的类加载机制冲突。
感谢阅读~