前言
在linux部署Flink需要先安裝Java的JDK。
Flink的安裝包,需要到官網先下載。
官網下載地址:https://flink.apache.org/downloads/
各個版本下載地址:https://dlcdn.apache.org/flink/
Flink相關網站如下:
flink官網學習地址:https://nightlies.apache.org/flink/flink-docs-stable/docs/try-flink/local_installation/
flinkCDC,cdc不是flink提供的,是ververica提供的,
參考地址:MySQL CDC 連接器 — CDC Connectors for Apache Flink® documentation (ververica.github.io)
https://ververica.github.io/flink-cdc-connectors/master/content/connectors/mysql-cdc(ZH).html
https://github.com/ververica/flink-cdc-connectors
Flink還可以做機器學習,常用機器學習KMeans,LinearRegression,學習使用地址如下:
https://nightlies.apache.org/flink/flink-ml-docs-master/docs/operators/clustering/kmeans/
https://nightlies.apache.org/flink/flink-ml-docs-master/docs/operators/regression/linearregression/
然後使用final shell上傳到 soft/resources下。
Flink安裝
先下載安裝包。
然後上傳到 soft/resources下。
然後進入soft/resources,執行命令解壓
tar -zxvf flink-1.18.0-bin-scala_2.12.tgz -C /soft/flink/
然後進入flink文件夾
# cd /soft/flink/flink-1.18.0/
然後進入conf。
cd conf
然後修改配置文件裏的localhost都改爲0.0.0.0
vi flink-conf.yaml
然後執行命令啓動
bin/start-cluster.sh
然後放行8081,也可以直接關閉防火牆。
輸入以下命令以停止防火牆服務:
sudo systemctl stop ufw.service
輸入以下命令以禁用防火牆服務:
sudo systemctl disable ufw.service
輸入以下命令以確認防火牆服務已關閉:
sudo ufw status
然後jps查看進程
jps
然後訪問10.1.0.145:8081
flink創建項目
開發flink可以創建maven項目,flink提供了一個快速創建的jar包——flink-quickstart-java。
依賴如下:
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-quickstart-java -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-quickstart-java</artifactId>
<version>1.18.0</version>
</dependency>
Flink CDC
CDC我們都知道是 Change Data Capture。本來這個是數據庫提供的,比如日誌記錄等等。
在Flink裏也有CDC的功能,本質上就是把數據庫的CDC給捕獲了。
Flink連接Mysql的CDC就是連接Mysql的Binlog。
flinkCDC,cdc不是flink提供的,是ververica提供的。
參考地址:MySQL CDC 連接器 — CDC Connectors for Apache Flink® documentation (ververica.github.io)
Flink如果出現classloader異常,可以考慮修改配置文件——flink-conf.yaml,來應對classloader異常
classloader.check-leaked-classloader: false
這個我沒測試過,這裏做個記錄
Flink——Docker實戰
使用docker search命令,查詢flink鏡像如下:
Flink的鏡像,可以在https://hub-stage.docker.com/_/java/tags網站上找到。
可以直接拉取Flink鏡像,也可以自己下載Flink安裝。
下面使用java的jdk鏡像,然後導入Flink壓縮包的模式安裝。
拉取java-jdk鏡像命令如下:
docker pull java:openjdk-8u111-jre
openjdk:8-jdk-alpine
和java:openjdk-8u111-jre
都是Java的安裝包,但它們的來源和用途略有不同。
openjdk:8-jdk-alpine
是基於Alpine Linux構建的輕量級JDK版本,它包含了Java運行環境所需的基本組件,體積更小巧,適合於資源有限的環境。你可以使用它在Docker容器中運行Java應用程序。
java:openjdk-8u111-jre
則是OpenJDK發行的標準JRE(Java Runtime Environment),它包含Java虛擬機(JVM)和Java應用程序所需的類庫。它是一個獨立的安裝包,可以在各種操作系統上安裝和使用。綜上所述,你可以根據具體的應用場景和需求來選擇使用哪個安裝包。如果你需要在Docker容器中運行Java應用程序,可以選擇
openjdk:8-jdk-alpine
;如果你需要在本地計算機上安裝和使用Java,可以選擇java:openjdk-8u111-jre
。
拉取成功如下:
然後執行run命令,使用鏡像生成一個容器。
docker run -it -d --name flink-server -p 8082:8081 java:openjdk-8u111-jre /bin/bash
docker run
: 這是運行 Docker 容器的命令。-it
: 這是選項,其中-i
表示以交互模式運行容器,-t
表示爲容器分配一個僞終端。-d
: 這是選項,表示以守護進程模式運行容器,即在後臺運行容器。--name flink-server
: 這是爲容器指定一個名稱,這裏將容器命名爲flink-server
。-p 8082:8081
: 這是將容器的端口 8081 映射到主機的端口 8082。java:openjdk-8u111-jre
: 這是指定要使用的基礎鏡像,這裏使用的是 OpenJDK 8 的 JRE(Java Runtime Environment)。/bin/bash
: 這是指定在容器啓動後執行的命令,這裏執行的是/bin/bash
,即啓動一個 Bash 終端。
運行成功如下圖:
運行後可以使用下面命令增加端口映射(未測試)
docker run -p 8082:8081 flink-server
查看全部開放的端口
netstat -untlp
使用docker ps可以查看已經運行的容器,如下圖:
執行下面命令,可以進入容器內部。
docker exec -it <container-id> /bin/bash
docker exec -it 221aed7411ad3654a43d157ea4bb75ce20cf065fc34de0b5026e404418509158 /bin/bash
如下圖:
輸入java -version可以查看已安裝的java版本,如下圖:
然後創建一個resources的文件夾,一個soft文件夾,一個soft/flink文件夾。
mkdir resources
mkdir soft
mkdir soft/flink
然後退出容器
exit
安裝Flink
然後執行docker cp 複製系統中的文件到指定的容器下,代碼如下:
docker cp /soft/resources/flink-1.17.1-bin-scala_2.12.tgz flink-server:/resources/flink-1.17.1-bin-scala_2.12.tgz
複製成功如下:
然後重新進入容器,查看 ls resources,如下圖:
然後進入cd resources文件夾,開始解壓flink。這裏使用1.17.1,因爲當時1.18還沒有對應的cdc包。
tar -zxvf flink-1.17.1-bin-scala_2.12.tgz -C /soft/flink/
然後進入flink下的flink-1.17.1文件夾
cd /soft/flink/flink-1.17.1
然後進入conf。
cd conf
然後修改配置文件裏的localhost都改爲0.0.0.0
vi flink-conf.yaml
但容器裏通常沒有vi命令,因爲沒有安裝vi工具,因此需要安裝vi工具。
在容器裏執行下面命令
apt-get update
apt-get install vim
如果安裝提示E: Unable to locate package vim ,是因爲下載地址是海外地址。
修改爲國內鏡像地址即可。
修改方案一:(親測這個163的地址不好用)
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >/etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
修改方案二:(親測,替換鏡像後,apt-get update雖然也有錯誤,但vim安裝成功了)
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free" > /etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free" >>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free" >>/etc/apt/sources.list
echo "deb http://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free">>/etc/apt/sources.list
然後重新執行 vi flink-conf.yaml,修改配置文件裏的localhost都改爲0.0.0.0。
numberOfTaskSlots和parallelism
配置flink-conf.yaml下的numberOfTaskSlots和parallelism。
numberOfTaskSlots
是指任務管理器的併發執行能力,而Parallelism
是指任務管理器實際使用的併發能力。numberOfTaskSlots
可以通過參數taskmanager.numberOfTaskSlots
進行配置,而Parallelism
可以通過參數Parallelism.default
進行配置。
taskmanager.numberOfTaskSlots定義的是【每個】任務管理器可使用的槽的數量,即如果有3個任務管理器,則配置taskmanager.numberOfTaskSlots爲3時,等於我們定義了9個槽。通常,每個 TaskManager 的 numberOfTaskSlots
等於該機器上的 CPU 核數。
Parallelism.default
是配置併發最大數量,如果配置爲16,則我們開發的flink-job時,配置的並行度也需要小於16,否則安裝到flink服務器時,將啓動失敗。如果服務器上上傳多個job,那多個job的併發數量之和也要小於16,否則最後一個將啓動失敗。
開發時配置並行度代碼:
env.setParallelism(1);//設置輸入流並行度
配置flink-conf.yaml 的numberOfTaskSlots和parallelism:
# The number of task slots that each TaskManager offers. Each slot runs one parallel pipeline.
taskmanager.numberOfTaskSlots: 16
# The parallelism used for programs that did not specify and other parallelism.
parallelism.default: 16
當CPU爲16核時,推薦配置如下:
taskmanager.numberOfTaskSlots: 16
parallelism.default: 16
parallelism.default: 32
parallelism.default: 64
parallelism.default: 128
然後 cd ../返回上一級,然後執行命令啓動
bin/start-cluster.sh
然後訪問10.1.0.100:8082(因爲前面已經關閉了防火牆,所以這裏可以直接訪問,不然要開發固定端口)
到此,Flink的docker就配置完了。
其他Dock命令
which docker #which docker` 命令用於查找 `docker命令所在的路徑。
docker images #查看當前服務器中docker 鏡像列表
docker ps #查看正則運行的容器
docker ps -a #查看已停止的容器
netstat -untlp #需要查看端口占用 情況
kill -9 #進程號 殺進程
Docker自定義鏡像
鏡像創建好後,我們可以將鏡像保存下來。
保存鏡像命令如下:
docker commit flink-server flink-server-image;
docker save flink-server-image -o /soft/resources/flink-server-20240104.tar;
如下圖:
在執行了docker commit後,我們就可以在本地鏡像裏找到我們剛剛提交的鏡像了,輸入docker images,就可以找到flink-server-image了,如下圖:
然後我們使用本地鏡像flink-server-image再創建一個容器,代碼如下:
docker run -it -d --name flink-server-pre -p 8083:8081 flink-server-image:latest /bin/bash
執行成功如下圖:
然後進入容器
docker exec -it flink-server-pre /bin/bash
然後cd到/soft/flink/flink-1.17.1,使用ls查看文件信息,如下:
cd /soft/flink/flink-1.17.1
然後執行一下啓動flink,如下:
bin/start-cluster.sh
然後訪問10.1.0.100:8083,就可以訪問Flink的Web管理頁面了。
到此Docker自定義鏡像結束。
注:此文章爲原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!