行內大數據平台流計算:
一個作業啟動一個flink集群,各個作業的flink集群是隔離的,在web ui點擊cancel后將job cancel掉,同時將集群終止,將作業終止。
on k8s:一個tm一個slot。
on yarn:一個tm可有多個slot。
kafka topic
TopicSchema:{"type":"object","properties":{"id":{"type":"number"},"username":{"type":"string"}}}
以上提交作業到yarn上的流程:
1、新建yarn目錄
2、將MySQL驅動器傳到yarn
3、將配置文件傳到yarn
4、設置開發模式
5、啟動flink並提交作業命令
flink-1.7.1/bin/flink run -m yarn-cluster -yD hostname=wn18ddzxjap1002 -yD job.inst.id=103989 -yD security.kerberos.login.principal=5D7... -yD security.kerberos.login.keytab=/etc/security/keytabs/5D7....keytab -yD metrics.reporters=sla -yD metrics.reporter.sla.class=com.ksyun.dc.metrics.flink.CollectMetrics -yD metrics.reporter.sla.url=http://ops-platform.internal-bigdata.com:9080/api/metrics/streaming/batch -yD metrics.reporter.sla.interval='60 SECONDS' -ynm store_goods_amount_join_done -c com.ksyun.dc.streaming.framework.ApplicationOnScheduler -yn 1 -ys 1 -p 1 -yjm 1024 -ytm 3072 -yqu ksccd365...-yt /tmp/flink/yarnship/1180 -n -d /flink-1.7.1/framework/streaming-dist-1.0-SANPSHOT-fat.jar
命令行參數:
-c:指定程序入口類
-p:指定多少個並發度
-yD:動態自定義參數
-m yarn-cluster -yn 1:使用yarn集群啟動1個tm
-yjm:指定jm的內存大小
-ytm:指定tm的內存大小
-ys:每個tm的slot數量
-yqu:指定yarn資源隊列
-d:以detached模式運行
flink list:查看進群上運行的job
flink cancel:取消job
flink list --all:查看所有job,包括cancel的
flink命令行參考:
https://my.oschina.net/u/3005325/blog/2998948
flink架構
flink運行時組件:作業管理器JobManager、任務管理器TaskManager、資源管理器Resource Manager、分發器Dispacher
Flink:批處理和流處理結合的統一計算框架,提供數據分發和並行化計算的流數據處理引擎,支持批處理和流處理。
Client:Client給用戶提供向Flink系統提交用戶任務(流式作業)的能力。
TaskManager:業務執行節點,執行具體的用戶任務,可以有多個,各個manager平等。
JobManager:管理節點,管理所有的TaskManager,並決策用戶任務在哪些TaskManager執行。JobManager在HA模式下可以有多個,但只有一個主JobMannager。
一個slot是flink處理的最小單元。
slot隔離的是內存,不是cpu。比如:
4cpu設置8slot,16g內存設置4slot,平均每個slot獨占4g,但如果有的slot計算量過大,則可能導致內存撐爆。具體一個tm包含多少個slot,可根據機器、計算復雜度而定。
一個tm有多少個slot可在配置文件中配置,即numberOfTaskSlots配置項。而parallelism配置項即作業算子的並行度。
slot和parallelism的區分:
parallelism:表示這個算子任務可拆分成多少個子任務去運行。
slot:表示同時可支持多少個子任務並行。
設置並行度的權限大小關系:
代碼設置並行度setParallelism(1) > 命令行提交設置的並行度 > 配置文件默認的並行度
每個算子在代碼里都可分別設置並行度,source算子用socket讀取數據時,並行度默認為1。
flink的並行:
數據並行:多個slot可同時處理數據,即多個子任務可同時運行。
任務並行:多個任務可同時運行。
作業並行:多個job同時在flink集群中運行(在行內大數據平台不支持這種並行,因為是采取的一個作業一個flink集群的模式,各個flink集群是隔離的)。
one to one且相同並行度的子任務可合並為一個任務,中間用->表示。
web ui中一個方框對應一個任務,一個->連接兩個子任務。