我只是将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作业?
任何帮助将不胜感激!
答案 0 :(得分:1)
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
)中使用。