前言
flink在實時計算領域中有著舉足輕重的地位。這篇文章來介紹一下,在linux的docker環境下,怎么快速安裝一個單機版本的flink。
操作流程
環境準備
檢查docker環境是不是正常,如果在拉取鏡像的時候比較慢,建議使用鏡像加速,比如使用騰訊云的鏡像加速
cat /etc/docker/daemon.json
{"registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}
執行完成后,重啟docker
拉取flink鏡像
docker pull apache/flink:1.18.0-scala_2.12-java11
注:這個版本的鏡像體積相對比較小?
啟動JobManager
docker run -d --name flink-jobmanager -p 8081:8081 -p 6123:6123 --restart=always flink:1.18.0-scala_2.12-java11 jobmanager
參數說明:
-
-d
:讓容器在后臺運行。 -
--name flink-jobmanager
:為容器指定名稱為flink-jobmanager
。 -
-p 8081:8081
:將容器的 8081 端口映射到宿主機的 8081 端口,通過該端口可以訪問 Flink 的 Web UI。 -
-p 6123:6123
:將容器的 6123 端口映射到宿主機的 6123 端口,此端口用于作業管理器的內部通信。 -
flink:1.18.0-scala_2.12-java11
:指定要使用的 Flink 鏡像。 -
jobmanager
:表示啟動的是作業管理器。 -
--restart 表示容器掛掉后會自動重啟容器
獲取JobManager的IP地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' flink-jobmanager
啟動TaskManager
docker run -d --name flink-taskmanager -e JOB_MANAGER_RPC_ADDRESS=172.17.0.3 -p 6121:6121 -p 6122:6122 --restart=always flink:1.18.0-scala_2.12-java11 taskmanager
參數說明:
-d
:讓容器在后臺運行。--name flink-taskmanager
:為容器指定名稱為flink-taskmanager
。-e JOB_MANAGER_RPC_ADDRESS=xxxx
:指定作業管理器的 RPC 地址,這個地址是上一步得到的-p 6121:6121
和-p 6122:6122
:分別將容器的 6121 和 6122 端口映射到宿主機的對應端口,這兩個端口用于任務管理器的內部通信。flink:1.18.0-scala_2.12-java11
:指定要使用的 Flink 鏡像。taskmanager
:表示啟動的是任務管理器。
驗證安裝
訪問 Web UI
打開瀏覽器,訪問 http://<你的服務器 IP 地址>:8081
,若能看到 Flink 的 Web UI 界面,說明 Flink 單機版已成功啟動。在該界面中,你可以查看作業管理器和任務管理器的狀態、提交作業等。
這里需要注意,如果使用的是公有云,需要開對應的防火墻策略。
檢查容器狀態
docker ps
通過這個docker命令,可以查詢到正在運行中的docker容器,如果運行列表中包含flink-jobmanager、fink-taskmanager,說明啟動ok
停止和清理
停止正在運行中的flink容器、刪除容器
docker stop flink-jobmanager fink-taskmanager
docker rm flink-jobmanager fink-taskmanager
總結
通過上面的安裝教程,一個簡單的單機版的flink就安裝成功了。這里將JobManager和TaskManager進行分開部署,這樣做的好處有如下幾點
- 功能分離
- 可擴展性
- 容錯和高可用性
- 資源隔離
- 方便維護和管理
最后,總結了下常見的docker容器的操作命令
# 查詢所有的容器
docker ps -a# 查詢對應name容器的容器id
docker ps -qf "name=flink-jobmanager"# 實時查看docker容器的日志
docker logs -f afa4783601bc
# 查看最近100行日志
docker logs --tail=100 afa4783601bc# 查詢容器詳細的信息
docker inspect afa4783601bc
當然,更主流的做法是使用docker compose來進行部署,后面會來一章詳細介紹docker compose!?