成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Apache Flink在唯品會的實踐

大數據
目前在唯品會實時平臺并不是一個統一的計算框架,而是包括Storm,Spark,Flink在內的三個主要計算框架。由于歷史原因,當前在Storm平臺上的job數量是最多的,但是從去年開始,業務重心逐漸切換到Flink上面,所以今年在Flink上面的應用數量有了大幅增加。

唯品會實時平臺現狀

目前在唯品會實時平臺并不是一個統一的計算框架,而是包括Storm,Spark,Flink在內的三個主要計算框架。由于歷史原因,當前在Storm平臺上的job數量是最多的,但是從去年開始,業務重心逐漸切換到Flink上面,所以今年在Flink上面的應用數量有了大幅增加。

實時平臺的核心業務包含八大部分:實時推薦作為電商的重點業務,包含多個實時特征;大促看板,包含各種維度的統計指標(例如:各種維度的訂單、UV、轉化率、漏斗等),供領導層、運營、產品決策使用;實時數據清洗,從用戶埋點收集來數據,進行實時清洗和關聯,為下游的各個業務提供更好的數據;此外還有互聯網金融、安全風控、與友商比價等業務,以及Logview、Mercury、Titan作為內部服務的監控系統、VDRC實時數據同步系統等。

Apache Flink在唯品會的實踐

實時平臺的職責主要包括實時計算平臺和實時基礎數據。實時計算平臺在Storm、Spark、Flink等計算框架的基礎上,為監控、穩定性提供了保障,為業務開發提供了數據的輸入與輸出。實時基礎數據包含對上游埋點的定義和規范化,對用戶行為數據、MySQL的Binlog日志等數據進行清洗、打寬等處理,為下游提供質量保證的數據。

在架構設計上,包括兩大數據源。一種是在App、微信、H5等應用上的埋點數據,原始數據收集后發送到在kafka中;另一種是線上實時數據的MySQL Binlog日志。數據在計算框架里面做清洗關聯,把原始的數據通過實時ETL為下游的業務應用(包括離線寬表等)提供更易于使用的數據。

Apache Flink在唯品會的實踐

Flink在唯品會的實踐

場景一:Dataeye實時看板

Dataeye實時看板是支持需要對所有的埋點數據、訂單數據等進行實時計算時,具有數據量大的特點,并且需要統計的維度有很多,例如全站、二級平臺、部類、檔期、人群、活動、時間維度等,提高了計算的復雜程度,統計的數據輸出指標每秒鐘可以達到幾十萬。

以UV計算為例,首先對Kafka內的埋點數據進行清洗,然后與Redis數據進行關聯,關聯好的數據寫入Kafka中;后續Flink計算任務消費Kafka的關聯數據。通常任務的計算結果的量也很大(由于計算維度和指標特別多,可以達到上千萬),數據輸出通過也是通過Kafka作為緩沖,最終使用同步任務同步到HBase中,作為實時數據展示。同步任務會對寫入HBase的數據限流和同類型的指標合并,保護HBase。與此同時還有另一路計算方案作為容災。 

Apache Flink在唯品會的實踐

在以Storm進行計算引擎中進行計算時,需要使用Redis作為中間狀態的存儲,而切換到Flink后,Flink自身具備狀態存儲,節省了存儲空間;由于不需要訪問Redis,也提升了性能,整體資源消耗降低到了原來的1/3。

在將計算任務從Storm逐步遷移到Flink的過程中,對兩路方案先后進行遷移,同時將計算任務和同步任務分離,緩解了數據寫入HBase的壓力。

切換到Flink后也需要對一些問題進行追蹤和改進。對于FlinkKafkaConsumer,由于業務原因對kafka中的Aotu Commit進行修改,以及對offset的設定,需要自己實現支持kafka集群切換的功能。對不帶window的state數據需要手動清理。還有計算框架的通病——數據傾斜問題需要處理。同時對于同步任務追數問題,Storm可以從Redis中取值,Flink只能等待。

場景二:Kafka數據落地HDFS

之前都是通過Spark Streaming的方式去實現,現在正在逐步切換到Flink上面,通過OrcBucketingTableSink將埋點數據落地到HDFS上的Hive表中。在Flink處理中單Task Write可達到3.5K/s左右,使用Flink后資源消耗降低了90%,同時將延遲30s降低到了3s以內。目前還在做Flink對Spark Bucket Table的支持。

場景三:實時的ETL

對于ETL處理工作而言,存在的一個痛點就是字典表存儲在HDFS中,并且是不斷變化的,而實時的數據流需要與字典表進行join。字典表的變化是由離線批處理任務引起的,目前的做法是使用ContinuousFileMonitoringFunction和ContinuousFileReaderOperator定時監聽HDFS數據變化,不斷地將新數據刷入,使用***的數據去做join實時數據。

我們計劃做更加通用的方式,去支持Hive表和Stream的join,實現Hive表數據變化之后,數據自動推送的效果。

Flink On K8S

在唯品會內部有一些不同的計算框架,有實時計算的,有機器學習的,還有離線計算的,所以需要一個統一的底層框架來進行管理,因此將Flink遷移到了K8S上。

在K8S上使用了思科的網絡組件,每個docker容器都有獨立的ip,對外也是可見的。實時平臺的融合器整體架構如下圖所示。

Apache Flink在唯品會的實踐

唯品會在K8S上的實現方案與Flink社區提供的方案差異還是很大的。唯品會使用K8S StatefulSet模式部署,內部實現了cluster相關的一些接口。一個job對應一個mini cluster,并且支持HA。對于Flink來說,使用StatefulSet的***的原因是pod的hostname是有序的;這樣潛在的好處有:

hostname為-0和-1的pod可以直接指定為jobmanager;可以使用一個statefulset啟動一個cluster,而deployment必須2個;Jobmanager和TaskManager分別獨立的deployment。

pod由于各種原因fail后,由于StatefulSet重新拉起的pod的hostname不變,集群recover的速度理論上可以比deployment更快(deployment每次主機名隨機)。 鏡像的docker entrypoint腳本里面需要設置的環境變量設置說明:

| 環境變量名稱 | 參數 | 示例內容 | 說明 | |--- |---|---|---|---| | JOB_MANGER_HOSTS | StatefulSet.name-0,StatefulSet.name-1 | flink-cluster-0,flink-cluster-1 | JM的主機名,短主機名;可以不用FQDN | | FLINK_CLUSTER_IDENT | namespace/StatefulSet.name | default/flink-cluster | 用來做zk ha設置和hdfs checkpiont的根目錄 | | TASK_MANAGER_NUMBER_OF_TASK_SLOTS | containers.resources.cpu.limits | 2 | TM的slot數量,根據resources.cpu.limits來設置 | | FLINK_ZK_QUORUM | env:FLINK_ZK_QUORUM | 10.198.199.112:2181 | HA ZK的地址 | | JOB_MANAGER_HEAP_MB | env:JOB_MANAGER_HEAP_MB value:containers.resources.memory.limit -1024 | 4096 | JM的Heap大小,由于存在堆外內存,需要小于container.resources.memory.limits;否則容易OOM kill | | TASK_MANAGER_HEAP_MB | env:TASK_MANAGER_HEAP_MB value: containers.resources.memory.limit -1024 |4096 | JM的Heap大小,由于存在堆外內存,需要小于container.resources.memory.limits;否則容易OOM kill |

對應Flink集群所依賴的HDFS等其他配置,則通過創建configmap來管理和維護。

  1. kubectl create configmap hdfs-conf --from-file=hdfs-site.xml --from-file=core-site.xml 

后續計劃

當前實時系統,機器學習平臺要處理的數據分布在各種數據存儲組件中,如Kafka、Redis、Tair和HDFS等,如何方便高效的訪問,處理,共享這些數據是一個很大的挑戰,對于當前的數據訪問和解析常常需要耗費很多的精力,主要的痛點包括:

  • 對于Kafka,Redis,Tair中的binary(PB/Avro等格式)數據,使用者無法快速直接的了解數據的schema與數據內容,采集數據內容及與寫入者的溝通成本很高。
  • 由于缺少獨立的統一數據系統服務,對Kafka,Redis,Tair等中的binary數據訪問需要依賴寫入者提供的信息,如proto生成類,數據格式wiki定義等,維護成本高,容易出錯。
  • 缺乏relational schema使得使用者無法直接基于更高效易用的SQL或LINQ層API開發業務。
  • 無法通過一個獨立的服務方便的發布和共享數據。
  • 實時數據無法直接提供給Batch SQL引擎使用。
  • 此外,對于當前大部分的數據源的訪問也缺少審計,權限管理,訪問監控,跟蹤等特性。

UDM(統一數據管理系統)包括Location Manager, Schema Metastore以及Client Proxy等模塊,主要的功能包括:

  • 提供從名字到地址的映射服務,使用者通過抽象名字而不是具體地址訪問數據。
  • 用戶可以方便的通過Web GUI界面方便的查看數據Schema,探查數據內容。
  • 提供支持審計,監控,溯源等附加功能的Client API Proxy。
  • 在Spark/Flink/Storm等框架中,以最適合使用的形式提供這些數據源的封裝。

UDM的整體架構如下圖所示:

 

Apache Flink在唯品會的實踐

UDM的使用者包括實時,機器學習以及離線平臺中數據的生產者和使用者。在使用Sql API或Table API的時候,首先完成Schema的注冊,之后使用Sql進行開發,降低了開發代碼量。

Apache Flink在唯品會的實踐

在Flink中,使用UDMExternalCatalog來打通Flink計算框架和UDM之間的橋梁,通過實現ExternalCatalog的各個接口,以及實現各自數據源的TableSourceFactory,完成Schema和接入管控等各項功能。

關于作者:王新春目前在唯品會負責實時平臺相關內容,主要包括實時計算框架和提供實時基礎數據,以及機器學習平臺的工作。之前在美團點評,也是負責大數據平臺工作。他已經在大數據實時處理方向積累了豐富的工作經驗。

責任編輯:未麗燕 來源: 李博bluemind
相關推薦

2021-05-06 11:54:40

大數據Flink

2017-03-21 10:24:40

敏捷Scrum實踐總結

2017-03-22 09:04:21

敏捷Scrum實踐

2017-03-29 10:09:44

敏捷Scrum實踐

2024-06-03 10:19:05

2016-11-10 19:10:09

唯品會雙11

2021-05-20 09:55:23

Apache Flin阿里云大數據

2022-09-16 08:23:22

Flink數據湖優化

2014-02-25 19:22:18

唯品會樂蜂網

2019-04-30 09:00:33

SQL數據庫Apache Flin

2022-04-22 09:05:12

蔚來汽車Flink實時數倉

2015-08-11 07:17:56

唯品會電商運營移動互聯網

2022-05-10 08:27:15

小紅書FlinkK8s

2023-06-07 07:27:32

唯品會冷凍系統故障

2022-06-10 15:21:15

MySQL CDCSqlServer數據庫

2013-08-09 16:54:07

華為ICT華為

2022-04-07 16:50:28

FlinkB站Kafka

2022-07-08 09:26:45

Flink快手計算

2015-08-19 16:10:58

51CTOIT技術周刊
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 蜜桃av一区二区三区 | 久久成人一区 | 欧美精品在线免费观看 | 欧美一区二区在线播放 | 欧美成人第一页 | 综合色久| 午夜视频免费网站 | 国产精品国产三级国产aⅴ中文 | 成人国产精品久久 | 国产乱码一二三区精品 | 精品日本久久久久久久久久 | 琪琪午夜伦伦电影福利片 | 欧美日韩大陆 | 久久乐国产精品 | 一级毛毛片 | 国产精品色一区二区三区 | 伊人网99 | 国产精品电影在线观看 | 天天干天天想 | 男女一区二区三区 | 丁香综合 | 999久久久国产精品 欧美成人h版在线观看 | 91精品国产综合久久婷婷香蕉 | 色中文在线 | 久久这里有精品 | 久久久久久国产精品免费免费男同 | 国产一区二区激情视频 | 色资源在线观看 | 成人午夜电影在线观看 | 午夜寂寞影院列表 | 女女爱爱视频 | 欧美日韩在线免费 | 亚洲精品1| 国产精品久久久久久久久久久免费看 | 亚洲欧美日韩在线不卡 | 日本免费一区二区三区四区 | 91精品久久久久久综合五月天 | 黄色网址在线免费观看 | 在线观看日本高清二区 | 日本精品一区二区三区在线观看视频 | 国产精品99久久久精品免费观看 |