如何在应用程序模式下将Java参数传递给Flink作业工件

时间:2020-09-02 07:25:42

标签: java kubernetes apache-flink

我只是将Flink从1.10版本升级到1.11。在1.11中,Flink提供了新功能,用户可以在Kubernetes上的应用程序模式下部署作业。 https://ci.apache.org/projects/flink/flink-docs-release-1.11/ops/deployment/kubernetes.html#deploy-session-cluster

在V1.10中,我们启动Flink K8s集群,然后通过运行将作业提交给Flink

exec ./bin/flink run \
  -d \
  /streakerflink_deploy.jar \
    --arg1 blablabla
    --arg2 blablabla
    --arg3 blablabla
    ...

我们通过此命令传递java参数。

但是,在V1.11中,如果我们运行“应用程序”模式,则无需运行上面的flink run命令。我想知道我们如何在应用程序模式(又称为作业群集)中将参数传递给Flink作业?

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

{p> 3中描述了

Flink在Kubernetes上的应用模式。您必须创建一个包含作业的Docker映像。可以使用文档中所述的./bin/flink run-application [...]执行该作业。

答案 1 :(得分:1)

由于您使用掌舵图来启动Kubernetes(又名K8s)上的Flink集群,因此我假设您正在谈论独立的K8s模式。实际上,“应用程序”模式与1.10及更低版本中的作业集群非常相似。 因此,您可以像下面这样在update-package -reinstall的{​​{1}}字段中设置作业参数。

args

如果您真的是本机K8s模式,则可以在jobmanager-job.yaml命令之后直接添加。

...
args: ["standalone-job", "--job-classname", "org.apache.flink.streaming.examples.join.WindowJoin", "--windowSize", "3000", "--rate", "100"]
...

注意: 请记住,独立K8和本地K8之间的主要区别在于动态资源分配。在纯模式下,我们有一个嵌入式K8s客户端,因此Flink JobManager可以根据需要分配/释放TaskManager Pod。当前,纯模式只能在Flink命令(flink run-application$ ./bin/flink run-application -p 8 -t kubernetes-application \ -Dkubernetes.cluster-id=<ClusterId> \ -Dtaskmanager.memory.process.size=4096m \ -Dkubernetes.taskmanager.cpu=2 \ -Dtaskmanager.numberOfTaskSlots=4 \ -Dkubernetes.container.image=<CustomImageName> \ local:///opt/flink/examples/streaming/WindowJoin.jar \ --windowSize 3000 --rate 100 )中使用。