我想在Kubernetes内的Flink runner上使用Beam运行一个连续的流处理作业。我一直在这里学习这个教程(https://python.plainenglish.io/apache-beam-flink-cluster-kubernetes-python-a1965f37b7cb),但我不确定作者在谈论“flink主容器”时指的是什么。我不明白我应该如何将我的Python代码提交到集群中,当代码在容器映像本身中定义时。
Kubernetes Flink集群架构看起来像这样:
- 单个JobManager,通过Service和Ingress暴露Flink Web UI
*多个任务管理器,每个任务管理器运行2个容器: - Flink任务管理器
- Beam worker池,暴露端口50000
示例教程中的Python代码具有Beam配置,如下所示:
options = PipelineOptions([
"--runner=FlinkRunner",
"--flink_version=1.10",
"--flink_master=localhost:8081",
"--environment_type=EXTERNAL",
"--environment_config=localhost:50000"
])
很明显,当您按照教程在本地运行它时,它会与Beam worker池对话以启动应用程序。但是,如果我有一个包含我的应用程序代码的Docker镜像,并且我想在Kubernetes中启动这个应用程序,我应该在Kubernetes集群中的哪里部署这个镜像?是否作为eachTask Manager pod中的容器(因此使用localhost:50000与Beam通信)?或者我创建一个包含我的应用程序代码的单个pod,并将该pod指向我的任务管理器的端口50000-如果是这样,我有多个任务管理器是一个问题吗?
任何指向文档或示例的指针都将非常有帮助。这个other SO question有一个不完整的答案。
2条答案
按热度按时间hc8w905p1#
Flink Kubernetes Operator确实提供了一个Beam example,它解决了您面临的大多数工具问题。它是为Java编写的,但通过将Python源代码添加到Docker镜像中,您应该能够实现您正在寻找的内容。
hiz5n14c2#
使用flink的作业管理器和任务管理器的自定义图像
Dockerfile
此外,在上述部署中,没有卷来存储staging-artifacts。因此,像这样创建PVC,并根据storageclassName调整PVC
使用flink的自定义映像的部署yaml应该是这样的
以下是Flinkpipeline选项
从另一个容器运行Beam代码可以是cronjob/job或deployment,要使用python sdk运行Beam代码,请使用python代码创建一个映像,并确保使用
apache/beam_python3.7_sdk:2.48.0
并在其中安装java,以便扩展服务将启动,否则它将使用docker。请根据需要调整sdk的版本