Application Mode 下的 Flink 查询提交
Flink query submission in Application Mode
我对 Flink 比较陌生,正在检查以下是否是在不发送 JAR 的情况下提交 Flink 作业的好方法。注意:这对我来说在本地有效,我正在 AWS EMR 上试用它。但是想知道这里有没有我遗漏或者应该注意的地方:
在 main 方法中,我设置了必要的数据源,然后轮询远程 HTTP 端点以获取作业(查询)- 如下所示:
public static void main(String[] args) throws Exception {
//Create env
//Define sources
//Define source tables
Job myJob;
while ((myJob = getNextJob(..call endpoint..)) != null) {
//Get the query
Table resultTable = tableEnv.sqlQuery(myJob.getQuery());
DataStream<Row> resultStream = tableEnv.toDataStream(resultTable);
SinkFunction<Row> printSink = new MyHTTPSinkFunction(remoteJobId);
resultStream.addSink(printSink);
JobClient jobRef = env.executeAsync();
//Send ack to remote endpoint
}
}
当然还有使用侦听器和所有边缘条件检查(例如作业失败等)的额外跟踪。
JAR 放在 Flink 集群的 lib 文件夹下,然后我使用 instructions here 在应用程序模式下启动它。
有了这个,我能够非常快速地提交作业并以非常低的延迟返回结果(目前用于批处理作业,但我们也可以在流模式下使用这种方法)。我假设如果 JobManager 崩溃,备份 JobManager 将继续轮询和提交作业。通过 JobID,我也可以跟踪工作。
这似乎是一种合理的方法吗?任何反馈将不胜感激。
不幸的是,应用程序模式目前仅支持 运行 高可用性设置中的单个作业。这主要是由于 main()
方法在 Dispatcher(JobManager 进程的一部分)中执行。
有关详细信息,请参阅 https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/overview/#application-mode。
会话集群最适合(它现在实际上是唯一的选择)运行 在高可用性设置中单个 Flink 集群上的多个作业。
我对 Flink 比较陌生,正在检查以下是否是在不发送 JAR 的情况下提交 Flink 作业的好方法。注意:这对我来说在本地有效,我正在 AWS EMR 上试用它。但是想知道这里有没有我遗漏或者应该注意的地方:
在 main 方法中,我设置了必要的数据源,然后轮询远程 HTTP 端点以获取作业(查询)- 如下所示:
public static void main(String[] args) throws Exception {
//Create env
//Define sources
//Define source tables
Job myJob;
while ((myJob = getNextJob(..call endpoint..)) != null) {
//Get the query
Table resultTable = tableEnv.sqlQuery(myJob.getQuery());
DataStream<Row> resultStream = tableEnv.toDataStream(resultTable);
SinkFunction<Row> printSink = new MyHTTPSinkFunction(remoteJobId);
resultStream.addSink(printSink);
JobClient jobRef = env.executeAsync();
//Send ack to remote endpoint
}
}
当然还有使用侦听器和所有边缘条件检查(例如作业失败等)的额外跟踪。
JAR 放在 Flink 集群的 lib 文件夹下,然后我使用 instructions here 在应用程序模式下启动它。
有了这个,我能够非常快速地提交作业并以非常低的延迟返回结果(目前用于批处理作业,但我们也可以在流模式下使用这种方法)。我假设如果 JobManager 崩溃,备份 JobManager 将继续轮询和提交作业。通过 JobID,我也可以跟踪工作。
这似乎是一种合理的方法吗?任何反馈将不胜感激。
不幸的是,应用程序模式目前仅支持 运行 高可用性设置中的单个作业。这主要是由于 main()
方法在 Dispatcher(JobManager 进程的一部分)中执行。
有关详细信息,请参阅 https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/deployment/overview/#application-mode。
会话集群最适合(它现在实际上是唯一的选择)运行 在高可用性设置中单个 Flink 集群上的多个作业。