Flink的WebMonitorEndpoint介绍+自定义Flink的Handler
一、WebMonitorEndpoint
1)概述
WebMonitorEndpoint 是基于Netty通信框架实现了Restful的服务后端,提供Restful接口支持Flink Web页面在内的所有Rest请求,例如获取集群监控指标。
WebMonitorEndpoint的创建过程比较简单,并且RestEndpoint实现了针对Session和JobCluster集群的SessionRestEndpointFactory和JobRestEndpointFactory两种工厂创建类。
2)类结构
WebMonitorEndpoint继承了RestServerEndpoint基本实现类,其中RestServerEndpoint基于Netty框架实现了Rest服务后端,并提供了自定义Handler的初始化和实现的抽象方法。
WebMonitorEndpoint和DispatcherRestEndpoint等子类能够拓展处理各自业务的Rest接口对应的Handlers实现。
对于WebMonitorEndpoint的另一个实现类MiniDispatcherRestEndpoint,主要是针对本地执行实现的mini版DispatcherRestEndpoint,区别在于MiniDispatcherRestEndpoint不用加载JobGraph提交使用的Handlers,这是因为MiniDispatcherRestEndpoint不支持通过RestAPI提交JobGraph。
在IDEA中执行作业时创建的实际上是MiniCluster,而在MiniCluster中对应的WebMonitorEndpoint实现是MiniDispatcherRestEndpoint。
3)创建 WebMonitorEndpoint
return new DispatcherRestEndpoint(
dispatcherGatewayRetriever,
configuration,
restHandlerConfiguration,
resourceManagerGatewayRetriever,
transientBlobService,
executor,
metricFetcher,
leaderElectionService,
RestEndpointFactory.createExecutionGraphCache(restHandlerConfiguration),
fatalErrorHandler);
参数解析
创建方法涉及参数如下。
configuration:集群配置参数。
dispatcherGatewayRetriever:DispatcherGateway服务地址获取器,用于获取当前活跃的dispatcherGateway地址。基于dispatcherGateway可以实现与Dispatcher的RPC通信,最终提交的JobGraph通过dispatcherGateway发送给Dispatcher组件。
resourceManagerGatewayRetriever:ResourceManagerGateway服务地址获取器,用于获取当前活跃的ResourceManagerGateway地址,通过ResourceManagerGateway实现ResourceManager组件之间的RPC通信,例如在TaskManagersHandler中通过调用ResourceManagerGateway获取集群中的TaskManagers监控信息。
transientBlobService:临时二进制对象数据存储服务,BlobServer接收数据后,会及时清理Cache中的对象数据。
executor:用于处理WebMonitorEndpoint请求的线程池服务。
metricFetcher:用于拉取JobManager和TaskManager上的Metric监控指标。
leaderElectionService:用于在高可用集群中启动和选择服务的Leader节点,如通过leaderElectionService启动WebMonitorEndpoint RPC服务,然后将Leader节点注册至ZooKeeper,以此实现WebMonitorEndpoint服务的高可用。
fatalErrorHandler:异常处理器,当WebMonitorEndpoint出现异常时调用fatalErrorHandler中的处理接口。
4)启动 WebMonitorEndpoint
webMonitorEndpoint.start();
方法主要包含如下逻辑:
检查RestServerEndpoint.state是否为CREATED状态。
启动RestEndpoint,创建Handler使用的路由类Router,用于根据地址寻找对应的Handlers。
调用initializeHandlers()方法初始化子类注册的Handlers,例如WebMonitorEndpoint中的Handlers实现。
调用registerHandler()方法注册已经加载的Handlers。
创建ChannelInitializer服务,初始化Netty中的Channel,在initChannel()方法中设定SocketChannel中Pipeline使用的拦截器。
在Netty中使用ServerBootstrap或者bootstrap启动服务端或者客户端时,会为每个Channel链接创建一个独立的Pipeline,此时需要将自定义的Handler加入Pipeline。
这里实际上会将加载的Handlers加入创建的Pipeline。
在Pipeline中也会按照顺序在尾部增加HttpServerCodec、FileUploadHandler以及ChunkedWriteHandler等基础Handlers处理器。
创建bossGroup和workerGroup两个NioEventLoopGroup实例,可以将其理解为两个线程池,bossGroup设置了一个用于处理连接请求和建立连接的线程,workGroup用于在连接建立之后处理I/O请求。
创建ServerBootstrap启动类并绑定bossGroup、workerGroup和initializer等参数。
为了防止出现端口占用的情况,从restBindPortRange中抽取端口范围。使用bootstrap.bind(chosenPort)按照顺序进行绑定,如果绑定成功则调用bind()方法,启动ServerBootstrap服务,此时Web端口(默认为8081)就可以正常访问了。
将RestServerEndpoint中的状态设定为RUNNING,调用WebMonitorEndpoint.startinternal()方法,启动RPC高可用服务。
初始化 JobSubmitHandler 主要有以下步骤
调用WebMonitorEndpoint.initializeHandlers()方法,加载WebMonitorEndpoint中用于监控指标展示的Handlers。
创建JobSubmitHandler,用于任务提交,其中leaderRetriever参数用于获取DispatcherGateway的Leader地址。
如果集群允许通过Web提交JobGraph,就会通过WebSubmissionExtension加载Web提交任务相关的Handler,在WebSubmissionExtension中包含通过WebSubmissionExtension提交作业的全部Handler,如上传JAR包使用的JarUploadHandler、执行任务使用的JarRunHandler等,对Per-Job类型集群来讲,JarUploadHandler默认是不加载的,不允许提交和运行新的作业。
在loadWebSubmissionExtension()方法中,实际上通过反射的方式构建WebSubmissionExtension,然后获取WebSubmissionExtension中的Handlers。
将jobSubmitHandler添加到handlers中,并返回handlers集合。
节点选举以及方法回调,startInternal();
小结:
1.初始化一堆Handler
2.启动Netty服务,注册Handler
3.启动内部服务: 执行竞选,WebMonitorEndpoint本身就是一个LeaderContender角色
4.竞选成功,其实只是把WebMonitorEndpoint的address以及和zk的sessionId写入znode中
二、分析 JarRunnerHandler
1)核心类
1.处理请求的类:JarRunHandler
2.绑定Handler和URL的类:JarRunHeaders
2)请求处理的核心流程
创建并初始化 JarRunHandler
jarRunHandler =
new JarRunHandler(
leaderRetriever,
timeout,
responseHeaders,
JarRunHeaders.getInstance(),
jarDir,
configuration,
jarRunExecutor,
applicationRunnerSupplier);
三、分析 ClusterOverviewHandler
1)创建ClusterOverviewHandler
// 创建并初始化 ClusterOverviewHandler
ClusterOverviewHandler clusterOverviewHandler =
new ClusterOverviewHandler(
leaderRetriever,
timeout,
responseHeaders,
ClusterOverviewHeaders.getInstance());
1.ClusterOverviewHandler处理请求的核心方法
@Override
public CompletableFuture<ClusterOverviewWithVersion> handleRequest(
@Nonnull HandlerRequest<EmptyRequestBody, EmptyMessageParameters> request,
@Nonnull RestfulGateway gateway) {
// 调用 RestfulGateway 获取对应的参数信息
CompletableFuture<ClusterOverview> overviewFuture = gateway.requestClusterOverview(timeout);
return overviewFuture.thenApply(
statusOverview ->
ClusterOverviewWithVersion.fromStatusOverview(
statusOverview, version, commitID));
}
2.ClusterOverviewHeaders中包含请求的方式、URL、版本等信息
public final class ClusterOverviewHeaders
implements MessageHeaders<
EmptyRequestBody, ClusterOverviewWithVersion, EmptyMessageParameters> {
private static final ClusterOverviewHeaders INSTANCE = new ClusterOverviewHeaders();
public static final String URL = "/overview";
// make this class a singleton
private ClusterOverviewHeaders() {}
@Override
public Class<EmptyRequestBody> getRequestClass() {
return EmptyRequestBody.class;
}
@Override
public HttpMethodWrapper getHttpMethod() {
return HttpMethodWrapper.GET;
}
@Override
public String getTargetRestEndpointURL() {
return URL;
}
@Override
public Class<ClusterOverviewWithVersion> getResponseClass() {
return ClusterOverviewWithVersion.class;
}
@Override
public HttpResponseStatus getResponseStatusCode() {
return HttpResponseStatus.OK;
}
@Override
public EmptyMessageParameters getUnresolvedMessageParameters() {
return EmptyMessageParameters.getInstance();
}
public static ClusterOverviewHeaders getInstance() {
return INSTANCE;
}
@Override
public String getDescription() {
return "Returns an overview over the Flink cluster.";
}
}
2)添加到 handler 集合中
handlers.add(Tuple2.of(clusterOverviewHandler.getMessageHeaders(), clusterOverviewHandler));
3)注册 handler
handlers.forEach(handler -> registerHandler(router, handler, log));
private static void registerHandler(
Router router,
String handlerURL,
HttpMethodWrapper httpMethod,
ChannelInboundHandler handler) {
switch (httpMethod) {
case GET:
router.addGet(handlerURL, handler);
break;
case POST:
router.addPost(handlerURL, handler);
break;
case DELETE:
router.addDelete(handlerURL, handler);
break;
case PATCH:
router.addPatch(handlerURL, handler);
break;
default:
throw new RuntimeException("Unsupported http method: " + httpMethod + '.');
}
}
四、自定义 WebMonitorHandler
1)新建 Handler【用于处理核心业务请求】,继承 AbstractRestHandler 重写 handleRequest 方法,注意方法的返回值需要为 CompletableFuture<?>。
package org.apache.flink.runtime.rest.mycustom;
import org.apache.flink.api.common.time.Time;
import org.apache.flink.runtime.messages.webmonitor.ClusterOverview;
import org.apache.flink.runtime.rest.handler.AbstractRestHandler;
import org.apache.flink.runtime.rest.handler.HandlerRequest;
import org.apache.flink.runtime.rest.messages.EmptyMessageParameters;
import org.apache.flink.runtime.rest.messages.EmptyRequestBody;
import org.apache.flink.runtime.rest.messages.MessageHeaders;
import org.apache.flink.runtime.util.EnvironmentInformation;
import org.apache.flink.runtime.webmonitor.RestfulGateway;
import org.apache.flink.runtime.webmonitor.retriever.GatewayRetriever;
import javax.annotation.Nonnull;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;
import java.util.function.Supplier;
public class MyWebMonitorHandler extends AbstractRestHandler<
RestfulGateway,
EmptyRequestBody,
MyHandlerResponseBody,
EmptyMessageParameters> {
private static final String version = EnvironmentInformation.getVersion();
private static final String commitID = EnvironmentInformation.getRevisionInformation().commitId;
public MyWebMonitorHandler(
GatewayRetriever<? extends RestfulGateway> leaderRetriever,
Time timeout,
Map<String, String> responseHeaders,
MessageHeaders<EmptyRequestBody, MyHandlerResponseBody, EmptyMessageParameters>
messageHeaders) {
super(leaderRetriever, timeout, responseHeaders, messageHeaders);
}
@Override
public CompletableFuture<MyHandlerResponseBody> handleRequest(
@Nonnull HandlerRequest<EmptyRequestBody, EmptyMessageParameters> request,
@Nonnull RestfulGateway gateway) {
CompletableFuture<ClusterOverview> future = gateway.requestClusterOverview(Time.seconds(3));
return future.thenApply(new Function<ClusterOverview, MyHandlerResponseBody>() {
@Override
public MyHandlerResponseBody apply(ClusterOverview clusterOverview) {
return new MyHandlerResponseBody(gateway.getHostname(),
gateway.getAddress(),
clusterOverview.getNumSlotsTotal(),
version,
commitID);
}
});
}
}
2)新建 Headers【用于绑定 Handler 和 URL】,实现 MessageHeaders 接口,并重写以下方法
package org.apache.flink.runtime.rest.mycustom;
import org.apache.flink.runtime.rest.HttpMethodWrapper;
import org.apache.flink.runtime.rest.messages.EmptyMessageParameters;
import org.apache.flink.runtime.rest.messages.EmptyRequestBody;
import org.apache.flink.runtime.rest.messages.MessageHeaders;
import org.apache.flink.shaded.netty4.io.netty.handler.codec.http.HttpResponseStatus;
public class MyWebMonitorHeaders implements MessageHeaders<
EmptyRequestBody, MyHandlerResponseBody, EmptyMessageParameters> {
private static final MyWebMonitorHeaders INSTANCE = new MyWebMonitorHeaders();
public static final String URL = "/my/handler";
private MyWebMonitorHeaders() {}
@Override
public Class<EmptyRequestBody> getRequestClass() {
return EmptyRequestBody.class;
}
@Override
public HttpMethodWrapper getHttpMethod() {
return HttpMethodWrapper.GET;
}
@Override
public String getTargetRestEndpointURL() {
return URL;
}
@Override
public Class<MyHandlerResponseBody> getResponseClass() {
return MyHandlerResponseBody.class;
}
@Override
public HttpResponseStatus getResponseStatusCode() {
return HttpResponseStatus.OK;
}
@Override
public EmptyMessageParameters getUnresolvedMessageParameters() {
return EmptyMessageParameters.getInstance();
}
public static MyWebMonitorHeaders getInstance() {
return INSTANCE;
}
@Override
public String getDescription() {
return "My Custom Handler";
}
}
返回的响应类:
package org.apache.flink.runtime.rest.mycustom;
import org.apache.flink.runtime.messages.webmonitor.InfoMessage;
import org.apache.flink.runtime.rest.messages.ResponseBody;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty;
public class MyHandlerResponseBody implements ResponseBody, InfoMessage {
@JsonProperty("hostname")
private String hostName;
@JsonProperty("address")
private String address;
@JsonProperty("slots")
private Integer slots;
@JsonProperty("flink-version")
private final String version;
@JsonProperty("flink-commit")
private final String commitId;
public MyHandlerResponseBody(@JsonProperty("hostname") String hostName,
@JsonProperty("address") String address,
@JsonProperty("slots") Integer slots,
@JsonProperty("flink-version") String version,
@JsonProperty("flink-commit") String commitId) {
this.hostName = hostName;
this.address = address;
this.slots = slots;
this.version = version;
this.commitId = commitId;
}
@Override
public String toString() {
return "myHandler {"
+ "hostname="
+ hostName
+ ", address="
+ address
+ ", slots="
+ slots
+ ", version="
+ version
+ ", commit="
+ commitId
+ '}';
}
}
3)在 RestServerEndpoint#initializeHandlers 方法中进行初始化,随后会和默认的 handler 一起进行注册
MyWebMonitorHandler myWebMonitorHandler =
new MyWebMonitorHandler(
leaderRetriever,
timeout,
responseHeaders,
MyWebMonitorHeaders.getInstance());
handlers.add(Tuple2.of(myWebMonitorHandler.getMessageHeaders(),myWebMonitorHandler));
4)测试
五、罗列一份 Flink 的 Handler 和 请求的 URL
列举的方式为:将 Flink 的日志改为 DEBUG 模式,在启动集群的时候会打印。
log.debug(
"Register handler {} under {}@{}.",
specificationHandler.f1,
specificationHandler.f0.getHttpMethod(),
versionedHandlerURL);
cluster.ShutdownHandler | DELETE@/v1/cluster. |
---|---|
cluster.ShutdownHandler | DELETE@/cluster. |
cluster.DashboardConfigHandler | GET@/v1/config. |
cluster.DashboardConfigHandler | GET@/config. |
dataset.ClusterDataSetListHandler | GET@/v1/datasets. |
dataset.ClusterDataSetListHandler | GET@/datasets. |
ClusterDataSetDeleteStatusHandler | GET@/v1/datasets/delete/:triggerid. |
ClusterDataSetDeleteStatusHandler | GET@/datasets/delete/:triggerid. |
ClusterDataSetDeleteTriggerHandler | DELETE@/v1/datasets/:datasetid. |
ClusterDataSetDeleteTriggerHandler | DELETE@/datasets/:datasetid. |
handlers.JarListHandler | GET@/v1/jars. |
handlers.JarListHandler | GET@/jars. |
handlers.JarUploadHandler | POST@/v1/jars/upload. |
handlers.JarUploadHandler | POST@/jars/upload. |
handlers.JarDeleteHandler | DELETE@/v1/jars/:jarid. |
handlers.JarDeleteHandler | DELETE@/jars/:jarid. |
handlers.JarPlanHandler | GET@/v1/jars/:jarid/plan. |
handlers.JarPlanHandler | GET@/jars/:jarid/plan. |
handlers.JarPlanHandler | POST@/v1/jars/:jarid/plan. |
handlers.JarPlanHandler | POST@/jars/:jarid/plan. |
handlers.JarRunHandler | POST@/v1/jars/:jarid/run. |
handlers.JarRunHandler | POST@/jars/:jarid/run. |
cluster.ClusterConfigHandler | GET@/v1/jobmanager/config. |
cluster.ClusterConfigHandler | GET@/jobmanager/config. |
cluster.JobManagerLogFileHandler | GET@/v1/jobmanager/log. |
cluster.JobManagerLogFileHandler | GET@/jobmanager/log. |
cluster.JobManagerLogListHandler | GET@/v1/jobmanager/logs. |
cluster.JobManagerLogListHandler | GET@/jobmanager/logs. |
cluster.JobManagerCustomLogHandler | GET@/v1/jobmanager/logs/:filename. |
cluster.JobManagerCustomLogHandler | GET@/jobmanager/logs/:filename. |
job.metrics.JobManagerMetricsHandler | GET@/v1/jobmanager/metrics. |
job.metrics.JobManagerMetricsHandler | GET@/jobmanager/metrics. |
cluster.JobManagerLogFileHandler | GET@/v1/jobmanager/stdout. |
cluster.JobManagerLogFileHandler | GET@/jobmanager/stdout. |
job.JobIdsHandler | GET@/v1/jobs. |
job.JobIdsHandler | GET@/jobs. |
job.JobSubmitHandler | POST@/v1/jobs. |
job.JobSubmitHandler | POST@/jobs. |
job.metrics.AggregatingJobsMetricsHandler | GET@/v1/jobs/metrics. |
job.metrics.AggregatingJobsMetricsHandler | GET@/jobs/metrics. |
job.JobsOverviewHandler | GET@/v1/jobs/overview. |
job.JobsOverviewHandler | GET@/jobs/overview. |
job.JobDetailsHandler | GET@/v1/jobs/:jobid. |
job.JobDetailsHandler | GET@/jobs/:jobid. |
job.JobCancellationHandler | PATCH@/v1/jobs/:jobid. |
job.JobCancellationHandler | PATCH@/jobs/:jobid. |
job.JobAccumulatorsHandler | GET@/v1/jobs/:jobid/accumulators. |
job.JobAccumulatorsHandler | GET@/jobs/:jobid/accumulators. |
job.checkpoints.CheckpointingStatisticsHandler | GET@/v1/jobs/:jobid/checkpoints. |
job.checkpoints.CheckpointingStatisticsHandler | GET@/jobs/:jobid/checkpoints. |
job.checkpoints.CheckpointConfigHandler | GET@/v1/jobs/:jobid/checkpoints/config. |
job.checkpoints.CheckpointConfigHandler | GET@/jobs/:jobid/checkpoints/config. |
job.checkpoints.CheckpointStatisticDetailsHandler | GET@/v1/jobs/:jobid/checkpoints/details/:checkpointid. |
job.checkpoints.CheckpointStatisticDetailsHandler | GET@/jobs/:jobid/checkpoints/details/:checkpointid. |
job.checkpoints.TaskCheckpointStatisticDetailsHandl | GET@/v1/jobs/:jobid/checkpoints/details/:checkpointid/subtasks/:vertexid. |
job.checkpoints.TaskCheckpointStatisticDetailsHandl | GET@/jobs/:jobid/checkpoints/details/:checkpointid/subtasks/:vertexid. |
job.JobConfigHandler | GET@/v1/jobs/:jobid/config. |
job.JobConfigHandler | GET@/jobs/:jobid/config. |
job.coordination.ClientCoordinationHandler | POST@/v1/jobs/:jobid/coordinators/:operatorid. |
job.coordination.ClientCoordinationHandler | POST@/jobs/:jobid/coordinators/:operatorid. |
job.JobExceptionsHandler | GET@/v1/jobs/:jobid/exceptions. |
job.JobExceptionsHandler | GET@/jobs/:jobid/exceptions. |
job.JobExecutionResultHandler | GET@/v1/jobs/:jobid/execution-result. |
job.JobExecutionResultHandler | GET@/jobs/:jobid/execution-result. |
job.metrics.JobMetricsHandler | GET@/v1/jobs/:jobid/metrics. |
job.metrics.JobMetricsHandler | GET@/jobs/:jobid/metrics. |
job.JobPlanHandler | GET@/v1/jobs/:jobid/plan. |
job.JobPlanHandler | GET@/jobs/:jobid/plan. |
RescalingTriggerHandler | PATCH@/v1/jobs/:jobid/rescaling. |
RescalingTriggerHandler | PATCH@/jobs/:jobid/rescaling. |
RescalingStatusHandler | GET@/v1/jobs/:jobid/rescaling/:triggerid. |
RescalingStatusHandler | GET@/jobs/:jobid/rescaling/:triggerid. |
SavepointTriggerHandler | POST@/v1/jobs/:jobid/savepoints. |
SavepointTriggerHandler | POST@/jobs/:jobid/savepoints. |
SavepointStatusHandler | GET@/v1/jobs/:jobid/savepoints/:triggerid. |
SavepointStatusHandler | GET@/jobs/:jobid/savepoints/:triggerid. |
StopWithSavepointHandler | POST@/v1/jobs/:jobid/stop. |
StopWithSavepointHandler | POST@/jobs/:jobid/stop. |
job.JobVertexDetailsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid. |
job.JobVertexDetailsHandler | GET@/jobs/:jobid/vertices/:vertexid. |
job.JobVertexAccumulatorsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/accumulators. |
job.JobVertexAccumulatorsHandler | GET@/jobs/:jobid/vertices/:vertexid/accumulators. |
job.JobVertexBackPressureHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/backpressure. |
job.JobVertexBackPressureHandler | GET@/jobs/:jobid/vertices/:vertexid/backpressure. |
DisabledJobVertexFlameGraphHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/flamegraph. |
DisabledJobVertexFlameGraphHandler | GET@/jobs/:jobid/vertices/:vertexid/flamegraph. |
job.metrics.JobVertexMetricsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/metrics. |
job.metrics.JobVertexMetricsHandler | GET@/jobs/:jobid/vertices/:vertexid/metrics. |
job.SubtasksAllAccumulatorsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/accumulators. |
job.SubtasksAllAccumulatorsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/accumulators. |
job.metrics.AggregatingSubtasksMetricsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/metrics. |
job.metrics.AggregatingSubtasksMetricsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/metrics. |
job.SubtaskCurrentAttemptDetailsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex. |
job.SubtaskCurrentAttemptDetailsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex. |
job.SubtaskExecutionAttemptDetailsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/attempts/:attempt. |
job.SubtaskExecutionAttemptDetailsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/attempts/:attempt. |
job.SubtaskExecutionAttemptAccumulatorsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/attempts/:attempt/accumulators. |
job.SubtaskExecutionAttemptAccumulatorsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/attempts/:attempt/accumulators. |
job.metrics.SubtaskMetricsHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/metrics. |
job.metrics.SubtaskMetricsHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasks/:subtaskindex/metrics. |
job.SubtasksTimesHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/subtasktimes. |
job.SubtasksTimesHandler | GET@/jobs/:jobid/vertices/:vertexid/subtasktimes. |
job.JobVertexTaskManagersHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/taskmanagers. |
job.JobVertexTaskManagersHandler | GET@/jobs/:jobid/vertices/:vertexid/taskmanagers. |
job.metrics.JobVertexWatermarksHandler | GET@/v1/jobs/:jobid/vertices/:vertexid/watermarks. |
job.metrics.JobVertexWatermarksHandler | GET@/jobs/:jobid/vertices/:vertexid/watermarks. |
job.JobCancellationHandler | GET@/v1/jobs/:jobid/yarn-cancel. |
job.JobCancellationHandler | GET@/jobs/:jobid/yarn-cancel. |
job.JobCancellationHandler | GET@/v1/jobs/:jobid/yarn-stop. |
job.JobCancellationHandler | GET@/jobs/:jobid/yarn-stop. |
cluster.ClusterOverviewHandler | GET@/v1/overview. |
cluster.ClusterOverviewHandler | GET@/overview. |
SavepointDisposalTriggerHandler | POST@/v1/savepoint-disposal. |
SavepointDisposalTriggerHandler | POST@/savepoint-disposal. |
SavepointDisposalStatusHandler | GET@/v1/savepoint-disposal/:triggerid. |
SavepointDisposalStatusHandler | GET@/savepoint-disposal/:triggerid. |
taskmanager.TaskManagersHandler | GET@/v1/taskmanagers. |
taskmanager.TaskManagersHandler | GET@/taskmanagers. |
job.metrics.AggregatingTaskManagersMetricsHandler | GET@/v1/taskmanagers/metrics. |
job.metrics.AggregatingTaskManagersMetricsHandler | GET@/taskmanagers/metrics. |
taskmanager.TaskManagerDetailsHandler | GET@/v1/taskmanagers/:taskmanagerid. |
taskmanager.TaskManagerDetailsHandler | GET@/taskmanagers/:taskmanagerid. |
taskmanager.TaskManagerLogFileHandler | GET@/v1/taskmanagers/:taskmanagerid/log. |
taskmanager.TaskManagerLogFileHandler | GET@/taskmanagers/:taskmanagerid/log. |
taskmanager.TaskManagerLogListHandler | GET@/v1/taskmanagers/:taskmanagerid/logs. |
taskmanager.TaskManagerLogListHandler | GET@/taskmanagers/:taskmanagerid/logs. |
taskmanager.TaskManagerCustomLogHandler | GET@/v1/taskmanagers/:taskmanagerid/logs/:filename. |
taskmanager.TaskManagerCustomLogHandler | GET@/taskmanagers/:taskmanagerid/logs/:filename. |
job.metrics.TaskManagerMetricsHandler | GET@/v1/taskmanagers/:taskmanagerid/metrics. |
job.metrics.TaskManagerMetricsHandler | GET@/taskmanagers/:taskmanagerid/metrics. |
taskmanager.TaskManagerStdoutFileHandler | GET@/v1/taskmanagers/:taskmanagerid/stdout. |
taskmanager.TaskManagerStdoutFileHandler | GET@/taskmanagers/:taskmanagerid/stdout. |
taskmanager.TaskManagerThreadDumpHandler | GET@/v1/taskmanagers/:taskmanagerid/thread-dump. |
taskmanager.TaskManagerThreadDumpHandler | GET@/taskmanagers/:taskmanagerid/thread-dump. |
legacy.files.StaticFileServerHandler | GET@/v1/😗. |
legacy.files.StaticFileServerHandler | GET@/😗. |