通常,我們可以通過Flink WebUI來檢視和監控Flink任務的運作狀态,如圖
但如果我們要基于Flink自建一個實時計算平台,則不能依賴于Flink WebUI,而需要自己實作Flink任務狀态的檢視和監控了。
實際上,Flink有一套自己的監控REST API,Flink WebUI也是基于這套監控API實作的,我們可以通過調用叢集位址+Flink監控API,來實作跟Flink WebUI一樣的功能。
叢集位址在上圖中是http://hadoop-master:8088/proxy/applicationId,常用的Flink監控REST API如下:
請求方法 | 接口 | 功能 | 參數 |
GET | /jobmanager/config | 擷取叢集配置 | |
GET | /jobmanager/metrics | 擷取JM的metrics | get:擷取指定metric的值,有多個值時用逗号隔開 |
GET | /jobs | ||
GET | /jobs/metrics | 擷取所有任務的metrics | get:擷取指定metric的值,有多個值時用逗号隔開;其他支援參數:agg、jobs |
GET | /jobs/overview | 擷取所有任務的概況 | |
GET | /jobs/:jobid | 擷取指定jobid的任務詳情 | jobid(例如e0e129bfb8c68d6a774d493e2d8f0ada) |
GET | /jobs/:jobid/checkpoints | 擷取指定jobid的檢查點統計資訊 | jobid |
GET | /jobs/:jobid/checkpoints/config | 擷取指定jobid的檢查點配置 | jobid |
GET | /jobs/:jobid/checkpoints/details/:checkpointid | 擷取指定jobid和checkpointid的檢查點詳情 | jobid、checkpointid |
GET | /jobs/:jobid/config | 擷取指定jobid的任務配置 | jobid |
GET | /jobs/:jobid/exceptions | 擷取指定jobid的異常資訊 | jobid、maxExceptions |
GET | /jobs/:jobid/metrics | 擷取指定jobid的metrics | jobid |
GET | /jobs/:jobid/vertices/:vertexid | 擷取指定jobid和vertexid的算子節點的資訊 | jobid、vertexid(例如bc764cd8ddf7a0cff126f51c16239658) |
GET | /jobs/:jobid/vertices/:vertexid/backpressure | 擷取指定jobid和vertexid的算子節點的反壓情況 | jobid、vertexid |
GET | /jobs/:jobid/vertices/:vertexid/taskmanagers | 擷取任務管理器彙總的任務資訊 | jobid、vertexid |
GET | /overview | 擷取叢集概況 | |
GET | /taskmanagers | 擷取所有TM的概況 | |
GET | /taskmanagers/metrics | 擷取TM的metrics | get:擷取指定metric的值,有多個值時用逗号隔開 |
GET | /taskmanagers/:taskmanagerid | 擷取指定taskmanagerid的詳情 | taskmanagerid(例如container_1600830023237_0002_01_000002) |
GET | /taskmanagers/:taskmanagerid/metrics | 擷取指定taskmanagerid的metrics | taskmanagerid |
POST | /jobs/:jobid/stop | 停止指定jobid的任務,并儲存一個savepoint | jobid、drain(預設false)、targetDirectory(savepoint存儲位置) |
GET | /jobs/:jobid/yarn-cancel | 停止指定jobid的任務 | jobid |
踩坑:使用POST請求調用接口/jobs/:jobid/stop時,報錯405 HTTP method POST is not supported by this URL
原因:從http://hadoop-master:8088/proxy/application_1606890926991_0001/#/overview的proxy就可以看出,我們是通過Yarn的代理來通路Flink監控API的。這時候使用POST請求調用接口/jobs/:jobid/stop,會出現302跳轉,而302跳轉的時候會更改請求方法,此時服務端可能不能識别,則報405錯誤。
解決:改用GET /jobs/:jobid/yarn-cancel來停止Flink任務
更多Flink監控接口詳見:
Flink監控REST API(官方文檔)
Yarn RM REST API(Flink on Yarn使用)