为 Flink 开发作业

Developing job for Flink

我正在构建一个用于学习目的的简单数据管道。我有来自 Kafka 的实时数据,我想用 Flink 做一些转换。

不幸的是,我不确定我是否理解正确的部署选项。在 Flink 文档中,我找到了有关 Docker Compose 和应用程序模式的部分。它说我只能部署一个作业到 Flink:

A Flink Application cluster is a dedicated cluster which runs a single job. In this case, you deploy the cluster with the job as one step, thus, there is no extra job submission needed.
The job artifacts are included into the class path of Flink’s JVM process within the container and consist of:

  • your job jar, which you would normally submit to a Session cluster and
  • all other necessary dependencies or resources, not included into Flink.

To deploy a cluster for a single job with Docker, you need to

  • make job artifacts available locally in all containers under /opt/flink/usrlib,
  • start a JobManager container in the Application cluster mode
  • start the required number of TaskManager containers.

另一方面,我在 github 上找到了使用 flink-java 工件的示例,没有 运行 任何 docker 图像。

有什么区别,为什么 Flink 文档中没有提到第二个选项?

而且,是否可以将 Flink 作业部署为单独的 docker 映像?

我建议你看看Demystifying Flink Deployments

https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/overview/ 也给出了很好的概述。

如果您有兴趣设置独立集群(没有 Docker 或 Kubernetes 或 YARN),请参阅 https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/resource-providers/standalone/overview/

And, is it possible to deploy Flink job as a separate docker image?

我不确定如何解释这个问题。您是在问 Flink 客户端是否可以 运行 在与 运行 工作的 Flink 集群的单独映像中?您可以对会话集群进行 docker 化,并从其外部将作业提交到该集群中。您将在 https://github.com/apache/flink-playgrounds/blob/master/operations-playground/docker-compose.yaml 中找到相关示例。 (顺便说一句,运营操场是一个很好的资源。)

另一种方法构建一个单一的图像,可以 运行 作为作业管理器或任务管理器,并将 flink 客户端及其所有依赖项内置到该图像中。 https://nightlies.apache.org/flink/flink-docs-stable/docs/deployment/resource-providers/native_kubernetes/#application-mode.

中描述了这种方法

值得注意的是,很多人并没有直接执行任何这些操作,而是依赖于在更高级别管理容器化 Flink 部署的平台。