精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

伴魚基于 Flink 構(gòu)建數(shù)據(jù)集成平臺的設(shè)計與實現(xiàn)

大數(shù)據(jù)
數(shù)據(jù)倉庫有四個基本的特征:面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的。其中數(shù)據(jù)集成是數(shù)據(jù)倉庫構(gòu)建的首要前提,指將多個分散的、異構(gòu)的數(shù)據(jù)源整合在一起以便于后續(xù)的數(shù)據(jù)分析。

數(shù)據(jù)倉庫有四個基本的特征:面向主題的、集成的、相對穩(wěn)定的、反映歷史變化的。其中數(shù)據(jù)集成是數(shù)據(jù)倉庫構(gòu)建的首要前提,指將多個分散的、異構(gòu)的數(shù)據(jù)源整合在一起以便于后續(xù)的數(shù)據(jù)分析。將數(shù)據(jù)集成過程平臺化,將極大提升數(shù)據(jù)開發(fā)人員的效率,本文主要內(nèi)容為:

  1. 數(shù)據(jù)集成 VS 數(shù)據(jù)同步
  2. 集成需求
  3. 數(shù)據(jù)集成 V1
  4. 數(shù)據(jù)集成 V2
  5. 線上效果
  6. 總結(jié)

A data warehouse is a subject-oriented, integrated, nonvolatile, and time-variant collection of data in support of management’s decisions.

—— Bill Inmon

一、數(shù)據(jù)集成 VS 數(shù)據(jù)同步

  • 「數(shù)據(jù)集成」往往和「數(shù)據(jù)同步」在概念上存在一定的混淆,為此我們對這二者進行了區(qū)分:
  • 「數(shù)據(jù)集成」特指面向數(shù)據(jù)倉庫 ODS 層的數(shù)據(jù)同步過程;
  • 「數(shù)據(jù)同步」面向的是一般化的 Source 到 Sink 的數(shù)據(jù)傳輸過程。

二者的關(guān)系如下圖所示:

「數(shù)據(jù)同步平臺」提供基礎(chǔ)能力,不摻雜具體的業(yè)務(wù)邏輯。

「數(shù)據(jù)集成平臺」是構(gòu)建在「數(shù)據(jù)同步平臺」之上的,除了將原始數(shù)據(jù)同步之外還包含了一些聚合的邏輯 (如通過數(shù)據(jù)庫的日志數(shù)據(jù)對快照數(shù)據(jù)進行恢復(fù),下文將會詳細展開) 以及數(shù)倉規(guī)范相關(guān)的內(nèi)容 (如數(shù)倉 ODS 層庫表命名規(guī)范) 等。

目前「數(shù)據(jù)同步平臺」的建設(shè)正在我們的規(guī)劃之中,但這并不影響「數(shù)據(jù)集成平臺」的搭建,一些同步的需求可提前在「實時計算平臺」創(chuàng)建,以「約定」的方式解耦。

值得一提的是「數(shù)據(jù)集成」也應(yīng)當(dāng)涵蓋「數(shù)據(jù)采集」(由特定的工具支持) 和「數(shù)據(jù)清洗」(由采集粒度、日志規(guī)范等因素決定) 兩部分內(nèi)容,這兩部分內(nèi)容各個公司都有自己的實現(xiàn),本文將不做詳細介紹。

二、集成需求

目前伴魚內(nèi)部數(shù)據(jù)的集成需求主要體現(xiàn)在三塊:Stat Log (業(yè)務(wù)標(biāo)準(zhǔn)化日志或稱統(tǒng)計日志)、TiDB 及 MongoDB。除此之外還有一些 Service Log、Nginx Log 等,此類不具備代表性不在本文介紹。另外,由于實時數(shù)倉正處于建設(shè)過程中,目前「數(shù)據(jù)集成平臺」只涵蓋離線數(shù)倉 (Hive)。

  • Stat Log:業(yè)務(wù)落盤的日志將由 FileBeat 組件收集至 Kafka。由于日志為 Append Only 類型, 因此 Stat Log 集成相對簡單,只需將 Kafka 數(shù)據(jù)同步至 Hive 即可。
  • DB (TiDB、MongoDB):DB 數(shù)據(jù)相對麻煩,核心訴求是數(shù)倉中能夠存在業(yè)務(wù)數(shù)據(jù)庫的鏡像,即存在業(yè)務(wù)數(shù)據(jù)庫中某一時刻(天級 or 小時級)的數(shù)據(jù)快照,當(dāng)然有時也有對數(shù)據(jù)變更過程的分析需求。因此 DB 數(shù)據(jù)集成需要將這兩個方面都考慮進去。

由于以上兩種類型的數(shù)據(jù)集成方式差異較大,下文將分別予以討論。

三、數(shù)據(jù)集成 V1

伴魚早期「數(shù)據(jù)集成平臺」已具備雛形,這個階段主要是借助一系列開源的工具實現(xiàn)。隨著時間推進,這個版本暴露的問題也逐漸增多,接下來將主要從數(shù)據(jù)流的角度對 V1 進行闡述,更多的細節(jié)問題將在 V2 版本的設(shè)計中體現(xiàn)。

3.1 Stat Log

日志的集成并未接入平臺,而是煙囪式的開發(fā)方式,數(shù)據(jù)集成的鏈路如下圖所示:

Kafka 中的數(shù)據(jù)先經(jīng)過 Flume 同步至 HDFS,再由 Spark 任務(wù)將數(shù)據(jù)從 HDFS 導(dǎo)入至 Hive 并創(chuàng)建分區(qū)。整體鏈路較長且引入了第三方組件(Flume)增加了運維的成本,另外 Kafka 的原始數(shù)據(jù)在 HDFS 冗余存儲也增加了存儲的開銷。

3.2 DB

DB 數(shù)據(jù)的集成主要是基于查詢的方式(批的方式,通過 Select 查詢進行全表掃描得到快照數(shù)據(jù))實現(xiàn),其鏈路如下圖所示:

用戶通過平臺提交集成任務(wù),由 Airflow 定時任務(wù)掃描集成平臺元數(shù)據(jù)庫,生成對應(yīng)的取數(shù)任務(wù) (TiDB 的數(shù)據(jù)通過 Sqoop 工具,MongoDB 的數(shù)據(jù)則通過 Mongoexport 工具)。可以看到 V1 版本并沒有獲取數(shù)據(jù)庫的變更的日志數(shù)據(jù),不能滿足對數(shù)據(jù)變更過程的分析訴求。

由于 Sqoop 任務(wù)最終要從 TiDB 生產(chǎn)環(huán)境的業(yè)務(wù)數(shù)據(jù)庫獲取數(shù)據(jù),數(shù)據(jù)量大的情況下勢必對業(yè)務(wù)數(shù)據(jù)庫造成一定的影響。Mongoexport 任務(wù)直接作用在 MongoDB 的隱藏節(jié)點 (無業(yè)務(wù)數(shù)據(jù)請求),對于線上業(yè)務(wù)的影響可以忽略不計。基于此,DBA 單獨搭建了一套 TiDB 大數(shù)據(jù)集群,用于將體量較大的業(yè)務(wù)數(shù)據(jù)庫同步至此 (基于 TiDB Pump 和 Drainer 組件),因此部分 Sqoop 任務(wù)可以從此集群拉群數(shù)據(jù)以消除對業(yè)務(wù)數(shù)據(jù)庫的影響。從數(shù)據(jù)流的角度,整個過程如下圖所示:

是否將生產(chǎn)環(huán)境 TiDB 業(yè)務(wù)數(shù)據(jù)庫同步至 TiDB 大數(shù)據(jù)集群由數(shù)倉的需求以及 DBA 對于數(shù)據(jù)量評估決定。可以看出,這種形式也存在著大量數(shù)據(jù)的冗余,集群的資源隨著同步任務(wù)的增加時長達到瓶頸。并且隨著后續(xù)的演進,TiDB 大數(shù)據(jù)集群也涵蓋一部分?jǐn)?shù)據(jù)應(yīng)用生產(chǎn)環(huán)境的業(yè)務(wù)數(shù)據(jù)庫,集群作用域逐漸模糊。

四、數(shù)據(jù)集成 V2

V2 版本我們引入了 Flink,將同步的鏈路進行了簡化,DB 數(shù)據(jù)集成從之前的基于查詢的方式改成了基于日志的方式 (流的方式),大大降低了冗余的存儲。

4.1 Stat Log

借助 Flink 1.11 版本后對于 Hive Integration 的支持,我們可以輕松的將 Kafka 的數(shù)據(jù)寫入 Hive,因此 Stat Log 的集成也就變得異常簡單 (相比 V1 版本,去除了對 Flume 組件的依賴,數(shù)據(jù)冗余也消除了),同時 Flink Exactly-Once 的語義也確保了數(shù)據(jù)的準(zhǔn)確性。從數(shù)據(jù)流的角度,整個過程如下圖所示:

目前按照小時粒度生成日志分區(qū),幾項 Flink 任務(wù)配置參數(shù)如下:

  1. checkpoint: 10 min 
  2. watermark: 1 min 
  3. partition.time-extractor.kind: ‘custom’ 
  4. sink.partition-commit.delay: ‘3600s’ 
  5. sink.partition-commit.policy.kind: ‘metastore,success-file’ 
  6. sink.partition-commit.trigger: ‘partition-time’ 

4.2 DB

基于日志的方式對 DB 數(shù)據(jù)進行集成,意味著需要采集 DB 的日志數(shù)據(jù),在我們目前的實現(xiàn)中 TiDB 基于 Pump 和 Drainer 組件(目前生產(chǎn)環(huán)境數(shù)據(jù)庫集群版本暫不支持開啟 TICDC),MongoDB 基于 MongoShake 組件,采集的數(shù)據(jù)將輸送至 Kafka。

采用這種方式,一方面降低了業(yè)務(wù)數(shù)據(jù)庫的查詢壓力,另一方面可以捕捉數(shù)據(jù)的變更過程,同時冗余的數(shù)據(jù)存儲也消除了。不過由于原始數(shù)據(jù)是日志數(shù)據(jù),需要通過一定的手段還原出快照數(shù)據(jù)。新的鏈路如下圖所示:

用戶提交集成任務(wù)后將同步創(chuàng)建三個任務(wù):

  • 增量任務(wù) (流):「增量任務(wù)」將 DB 日志數(shù)據(jù)由 Kafka 同步至 Hive。由于采集組件都是按照集群粒度進行采集,且集群數(shù)量有限,目前都是手動的方式將同步的任務(wù)在「實時計算平臺」創(chuàng)建,集成任務(wù)創(chuàng)建時默認假定同步任務(wù)已經(jīng) ready,待「數(shù)據(jù)同步平臺」落地后可以同步做更多的自動化操作和校驗。
  • 存量任務(wù) (批):要想還原出快照數(shù)據(jù)則至少需要一份初始的快照數(shù)據(jù),因此「存量任務(wù)」的目的是從業(yè)務(wù)數(shù)據(jù)庫拉取集成時數(shù)據(jù)的初始快照數(shù)據(jù)。
  • Merge 任務(wù) (批):「Merge 任務(wù)」將存量數(shù)據(jù)和增量數(shù)據(jù)進行聚合以還原快照數(shù)據(jù)。還原后的快照數(shù)據(jù)可作為下一日的存量,因此「存量任務(wù)」只需調(diào)度執(zhí)行一次,獲取初始快照數(shù)據(jù)即可。

「存量任務(wù)」和「Merge 任務(wù)」由離線調(diào)度平臺 Dolphinscheduler (簡稱 DS) 調(diào)度執(zhí)行,任務(wù)執(zhí)行過程中將從集成任務(wù)的元數(shù)據(jù)庫中獲取所需的信息。目前「Merge 任務(wù)」按小時粒度調(diào)度,即每小時還原快照數(shù)據(jù)。

從數(shù)據(jù)流的角度,整個過程如下圖所示:

DB 的數(shù)據(jù)集成相較于 Stat Log 復(fù)雜性高,接下來以 TiDB 的數(shù)據(jù)集成為例講述設(shè)計過程中的一些要點 (MongoDB 流程類似,區(qū)別在于存量同步工具及數(shù)據(jù)解析)。

4.2.1 需求表達

對于用戶而言,集成任務(wù)需要提供以下兩類信息:

  • TiDB 源信息:包括集群、庫、表。
  • 集成方式:集成方式表示的是快照數(shù)據(jù)的聚合粒度,包括全量和增量。全量表示需要將存量的快照數(shù)據(jù)與今日的增量日志數(shù)據(jù)聚合,而增量表示只需要將今日的增量日志數(shù)據(jù)聚合 (即便增量方式無需和存量的快照數(shù)據(jù)聚合,但初始存量的獲取依舊是有必要的,具體的使用形式由數(shù)倉人員自行決定)。

4.2.2 存量任務(wù)

存量任務(wù)雖然有且僅執(zhí)行一次,但為了完全消除數(shù)據(jù)集成對業(yè)務(wù)數(shù)據(jù)庫的影響,我們選擇數(shù)據(jù)庫的備份-恢復(fù)機制來實現(xiàn)。公司內(nèi)部數(shù)據(jù)庫的備份和恢復(fù)操作已經(jīng)平臺化,集群將定期進行備份 (天粒度),通過平臺可以查詢到集群的最新備份,并且可由接口觸發(fā)備份恢復(fù)操作,故存量的獲取可直接作用于恢復(fù)的數(shù)據(jù)庫。

由于數(shù)據(jù)庫備份的時間點與集成任務(wù)提交的時間點并不一定是同一天,這之間存在著一定的時間差將導(dǎo)致存量快照數(shù)據(jù)不符合我們的預(yù)期,各時間點的關(guān)系如下圖所示:

按照我們的設(shè)定,存量快照數(shù)據(jù)應(yīng)當(dāng)是包含 T4 之前的全部數(shù)據(jù),而實際備份的快照數(shù)據(jù)僅包含 T1 之前的全部數(shù)據(jù),這之間存在這 N 天的數(shù)據(jù)差。

注:這里之所以不說數(shù)據(jù)差集為 T1 至 T4 區(qū)間的數(shù)據(jù),是因為增量的 Binlog 數(shù)據(jù)是以整點為分區(qū)的,在 Merge 的時候也是將整點的分區(qū)數(shù)據(jù)與存量數(shù)據(jù)進行聚合,并支持了數(shù)據(jù)去重。因此 T1 時刻的存量數(shù)據(jù)與 T0-T3 之間的增量數(shù)據(jù)的 Merge 結(jié)果等效于 T0 時刻的存量數(shù)據(jù)與 T0-T3 之間的增量數(shù)據(jù)的 Merge 結(jié)果。所以 T1 至 T4 的數(shù)據(jù)差集等效 T0 至 T3 的數(shù)據(jù)差集,即圖示中的 N 天數(shù)據(jù)。

對于缺失的這部分?jǐn)?shù)據(jù)實則是可以在「存量任務(wù)」中進行補全,仔細分析這其實是可以通過執(zhí)行的 「Merge 任務(wù)」的補數(shù)操作實現(xiàn)。

整個「存量任務(wù)」的工作流如下圖所示:

  • 同步觸發(fā)數(shù)據(jù)庫平臺進行備份恢復(fù),產(chǎn)生回執(zhí) ID;
  • 通過回執(zhí) ID 輪訓(xùn)備份恢復(fù)狀態(tài),恢復(fù)失敗需要 DBA 定位異常,故將下線整個工作流,待恢復(fù)成功可在平臺重新恢復(fù)執(zhí)行「存量任務(wù)」。恢復(fù)進行中,工作流直接退出,借助 DS 定時調(diào)度等待下次喚醒。恢復(fù)成功,進入后續(xù)邏輯;
  • 從恢復(fù)庫中拉取存量,判定存量是否存在數(shù)據(jù)差,若存在則執(zhí)行 Merge 任務(wù)的補數(shù)操作,整個操作可冪等執(zhí)行,如若失敗退出此次工作流,等待下次調(diào)度;
  • 成功,下線整個工作流,任務(wù)完成。

4.2.3 Merge 任務(wù)

Merge 任務(wù)的前提是存量數(shù)據(jù)與增量數(shù)據(jù)都已經(jīng) ready,我們通過 _SUCCESS 文件進行標(biāo)記。整個「Merge 任務(wù)」的工作流如下圖所示:

  • 校驗文件標(biāo)記是否存在,若不存在說明數(shù)據(jù)未 ready ,進行報警并退出工作流等待下次調(diào)度;
  • 執(zhí)行 Merge 操作,失敗報警并退出工作流等待下次調(diào)度;
  • 成功,退出工作流等待下次調(diào)度。

Merge 操作通過 Flink DataSet API 實現(xiàn)。核心邏輯如下:

  • 加載存量、增量數(shù)據(jù),統(tǒng)一數(shù)據(jù)格式(核心字段:主鍵 Key 作為同一條數(shù)據(jù)的聚合字段;CommitTs 標(biāo)識 binlog 的提交時間,存量數(shù)據(jù)默認為 0 早于增量數(shù)據(jù);OpType 標(biāo)識數(shù)據(jù)操作類型,包括:Insert、Update、Delete,存量數(shù)據(jù)默認為 Insert 類型),將兩份數(shù)據(jù)進行 union;
  • 按照主鍵聚合;
  • 保留聚合后 CommitTs 最大的數(shù)據(jù)條目,其余丟棄;
  • 過濾 OpType 為 Delete 類型的數(shù)據(jù)條目;
  • 輸出聚合結(jié)果。

核心代碼:

  1. allMergedData.groupBy(x -> x.getKeyCols()) 
  2.              .reduce(new ReduceFunction<MergeTransform>() { 
  3.  
  4.                  public MergeTransform reduce(MergeTransform value1, MergeTransform value2) throws Exception { 
  5.                      if (value1.getCommitTS() > value2.getCommitTS()){ 
  6.                          return value1; 
  7.                      } 
  8.                      return value2; 
  9.                  } 
  10.              }) 
  11.              .filter(new FilterFunction<MergeTransform>() { //增量:過濾掉 op=delete 
  12.  
  13.                  public boolean filter(MergeTransform merge) throws Exception { 
  14.                      if (merge.getOpType().equals(OPType.DELETE)){ 
  15.                          return false
  16.                      } 
  17.                      return true
  18.                  } 
  19.              }) 
  20.              .map(x -> x.getHiveColsText()) 
  21.              .writeAsText(outPath); 

主要思想為「后來者居上」,針對于 Insert、Update 操作,最新值直接覆蓋舊值,針對 Delete 操作,直接丟棄。這種方式也天然的實現(xiàn)了數(shù)據(jù)去重操作。

4.2.4 容錯性與數(shù)據(jù)一致性保證

我們大體可以從三個任務(wù)故障場景下的處理方式來驗證方案的容錯性。

  • 「存量任務(wù)」異常失敗:通常是備份恢復(fù)失敗導(dǎo)致,DS 任務(wù)將發(fā)送失敗報警,因「數(shù)據(jù)庫平臺」暫不支持恢復(fù)重試,需人工介入處理。同時「Merge 任務(wù)」檢測不到存量的 _SUCCESS 標(biāo)記,工作流不會向后推進。
  • 「增量任務(wù)」異常失敗:Flink 自身的容錯機制以及「實時計算平臺」的外部檢測機制保障「增量任務(wù)」的容錯性。若在「Merge 任務(wù)」調(diào)度執(zhí)行期間「增量任務(wù)」尚未恢復(fù),將誤以為該小時無增量數(shù)據(jù)跳過執(zhí)行,此時相當(dāng)于快照更新延遲(Merge 是將全天的增量數(shù)據(jù)與存量聚合,在之后的調(diào)度時間點如果「增量任務(wù)」恢復(fù)又可以聚合得到最新的快照),或者在「增量任務(wù)」恢復(fù)后可人為觸發(fā)「Merge 任務(wù)」補數(shù)。
  • 「Merge 任務(wù)」異常失敗:任務(wù)具有冪等性,通過設(shè)置 DS 任務(wù)失敗后的重試機制保障容錯性,同時發(fā)送失敗報警。

以上,通過自動恢復(fù)機制和報警機制確保了整個工作流的正確執(zhí)行。接下來我們可以從數(shù)據(jù)的角度看一下方案對于一致性的保障。

數(shù)據(jù)的一致性體現(xiàn)在 Merge 操作。兩份數(shù)據(jù)聚合,從代碼層面一定可以確保算法的正確性 (這是可驗證的、可測試的),那么唯一可能導(dǎo)致數(shù)據(jù)不一致的情況出現(xiàn)在兩份輸入的數(shù)據(jù)上,即存量和增量,存在兩種情況:

  • 存量和增量數(shù)據(jù)有交疊:體現(xiàn)在初始存量與整點的增量數(shù)據(jù)聚合場景,由于算法天然的去重性可以保證數(shù)據(jù)的一致。
  • 存量和增量數(shù)據(jù)有缺失:體現(xiàn)在增量數(shù)據(jù)的缺失上,而增量數(shù)據(jù)是由 Flink 將 Kafka 數(shù)據(jù)寫入 Hive 的,這個過程中是有一定的可能性造成數(shù)據(jù)的不一致,即分區(qū)提交后的亂序數(shù)據(jù)。雖然說亂序數(shù)據(jù)到來后的下一次 checkpoint 時間點分區(qū)將再次提交,但下游任務(wù)一般是檢測到首次分區(qū)提交就會觸發(fā)執(zhí)行,造成下游任務(wù)的數(shù)據(jù)不一致。

針對 Flink 流式寫 Hive 過程中的亂序數(shù)據(jù)處理可以采取兩種手段:

  • 一是 Kafka 設(shè)置單分區(qū),多分區(qū)是產(chǎn)生導(dǎo)致亂序的根因,通過避免多分區(qū)消除數(shù)據(jù)亂序。
  • 二是報警補償,亂序一旦產(chǎn)生流式任務(wù)是無法完全避免的 (可通過 watermark 設(shè)置亂序容忍時間,但終有一個界限),那么只能通過報警做事后補償。

問題轉(zhuǎn)換成了如何感知到亂序,我們可以進一步分析,既然亂序數(shù)據(jù)會觸發(fā)前一個分區(qū)的二次提交,那么只需要在提交分區(qū)的時候檢測前一個分區(qū)是否存在 _SUCCESS 標(biāo)記便可以知曉是否是亂序數(shù)據(jù)以及觸發(fā)報警。

五、線上效果

總覽

存量任務(wù)

Merge 任務(wù)

六、總結(jié)

本文闡述了伴魚「數(shù)據(jù)集成平臺」核心設(shè)計思路,整個方案還有一些細節(jié)未在文章中體現(xiàn),如數(shù)據(jù) Schema 的變更、DB 日志數(shù)據(jù)的解析等,這些細節(jié)對于平臺構(gòu)建也至關(guān)重要。目前伴魚絕大部分的集成任務(wù)已切換至新的方式并穩(wěn)定運行。我們也正在推進實時數(shù)倉集成任務(wù)的接入,以提供更統(tǒng)一的體驗。

 

責(zé)任編輯:未麗燕 來源: Apache Flink
相關(guān)推薦

2021-06-01 06:59:58

運維Jira設(shè)計

2018-04-23 12:41:21

云計算政務(wù)云平臺架構(gòu)

2010-07-06 11:34:15

EclipseRationalJazz

2022-12-28 08:31:38

平臺設(shè)計應(yīng)用

2009-05-18 09:11:00

IPTV融合寬帶

2023-03-14 18:06:07

flink數(shù)字集成

2015-09-16 09:24:49

2022-08-21 07:25:09

Flink云原生K8S

2011-07-27 18:12:17

云計算大數(shù)據(jù)商業(yè)智能

2021-11-24 08:55:38

代理網(wǎng)關(guān)Netty

2023-12-25 07:35:40

數(shù)據(jù)集成FlinkK8s

2024-03-26 07:35:24

日志索引語言

2022-08-29 08:58:49

項目開源組件

2021-07-13 07:04:19

Flink數(shù)倉數(shù)據(jù)

2023-08-10 10:13:35

轉(zhuǎn)轉(zhuǎn)短鏈平臺

2025-04-27 01:05:00

AI智能日志

2022-07-20 23:15:11

Flink數(shù)據(jù)集CDC

2024-08-02 19:49:41

2009-06-14 22:09:24

Java界面布局DSL

2009-06-29 10:34:34

VxWorks視頻采集系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號

极品粉嫩国产18尤物| 成人免费看片网址| www.4hu95.com四虎| 日本一区二区中文字幕| 一区二区三区免费网站| 久久婷婷人人澡人人喊人人爽| 久久久成人免费视频| 日韩欧美精品| 亚洲国产精品va在线| 国产三级日本三级在线播放| 国产成人l区| 99re热这里只有精品视频| 国产欧美日韩视频| 欧美bbbbbbbbbbbb精品| 欧美激情偷拍自拍| 日韩成人久久久| 国产又粗又长又爽又黄的视频| 182在线播放| **网站欧美大片在线观看| 精品婷婷色一区二区三区蜜桃| 中国女人一级一次看片| 国产午夜精品一区二区三区欧美 | 91精品国产91久久久久久吃药| 阿v天堂2014| 久久久久久毛片免费看 | 亚洲少妇久久久| av手机免费在线观看| 中文字幕一区二区三区在线观看| 极品校花啪啪激情久久| 99久久久无码国产精品免费| 日本欧美韩国一区三区| 91av在线网站| 久久精品免费av| 91tv官网精品成人亚洲| 国产一区二区黄| 久久久久久久久久久国产精品| 亚洲大奶少妇| 欧美一区二区视频在线观看2022| 无码人妻精品一区二区三区66| 草草在线视频| 亚洲在线一区二区三区| 国产四区在线观看| 在线免费看a| 欧美激情一区二区三区蜜桃视频| 鲁丝一区二区三区免费| 无码国产精品一区二区色情男同| 国产精品亚洲一区二区三区在线| 国产精品中文在线| 国产精品国产精品国产| 老**午夜毛片一区二区三区| 668精品在线视频| 国产精选第一页| 国产精品国码视频| 欧美劲爆第一页| 精品一区免费观看| 最新日韩欧美| 久久久久久免费精品| 久久综合色综合| 极品裸体白嫩激情啪啪国产精品| 欧美激情免费看| 亚洲国产精品午夜在线观看| 亚洲精品欧洲| 欧美中文在线视频| 无码视频一区二区三区| 日韩精品免费专区| 国产免费久久av| 国产精品久久久久久久一区二区 | 在线观看成人动漫| 久久99偷拍| 亚洲精品有码在线| 日韩免费成人av| 国产国产精品| 欧美激情亚洲综合一区| 日产精品久久久久久久| 老鸭窝91久久精品色噜噜导演| 欧洲成人午夜免费大片| 中文字幕日本视频| 精品一区免费av| 国产99午夜精品一区二区三区| 男人天堂网在线视频| 91丨九色丨蝌蚪富婆spa| 农村寡妇一区二区三区| 成人欧美亚洲| 一区二区三区小说| 免费看又黄又无码的网站| 欧美美女日韩| 欧美一区二区三区日韩| 成人在线视频免费播放| 免费电影一区二区三区| 精品国产一区av| 日韩女优在线观看| 日韩国产精品91| 99国产高清| 国产在线一在线二| 亚洲精品第1页| caopor在线视频| 国产一区 二区| 日韩精品在线视频美女| av黄色免费在线观看| 国产精品地址| 国产精品欧美一区二区| 亚洲精品911| 国产亚洲福利社区一区| 黄网站色视频免费观看| aa国产成人| 91精品麻豆日日躁夜夜躁| 国产精品边吃奶边做爽| 91久久高清国语自产拍| 8x拔播拔播x8国产精品| 国产精品一区二区免费视频| 久久午夜电影网| 国产精品日韩三级| 99精品在免费线偷拍| 亚洲国产精品一区二区三区| 美女视频久久久| 亚洲欧美日本日韩| 99国产在线视频| 欧洲不卡视频| 色成人在线视频| 精品人妻在线视频| 一本一道久久综合狠狠老| 国产精品吹潮在线观看| 无码国产伦一区二区三区视频| 国产精品免费看片| 国产精品视频一区二区三区四区五区| 欧美片网站免费| 色狠狠av一区二区三区香蕉蜜桃| 成年人视频在线免费看| 成人av在线资源网| 九九久久九九久久| 欧美日韩va| 伊人亚洲福利一区二区三区| 国产无遮挡又黄又爽又色| 国产精品性做久久久久久| 亚洲女人毛片| 成人免费毛片嘿嘿连载视频…| 国产视频精品va久久久久久| 在线观看精品国产| 成人18视频日本| www.日本在线视频| 欧洲大片精品免费永久看nba| xvideos成人免费中文版| 国产精品成人久久久| 久久精品视频一区二区三区| 婷婷无套内射影院| www.丝袜精品| 欧美激情一级欧美精品| 亚洲风情第一页| 亚洲一区视频在线观看视频| 黑人性生活视频| 欧美精品97| 成人激情av| 国产激情视频在线看| 亚洲精品福利在线| 中文字幕在线观看免费视频| youjizz国产精品| 精品久久一二三| 婷婷精品在线观看| 国产成人高潮免费观看精品| 蜜芽tv福利在线视频| 在线观看成人免费视频| 91香蕉国产视频| 国产呦萝稀缺另类资源| 日韩免费在线观看av| 精品视频在线你懂得| 欧美中文在线字幕| 国产高清视频免费最新在线| 欧美日韩国产一级片| 紧身裙女教师波多野结衣| 国产99久久久国产精品潘金 | 国产一区日韩二区欧美三区| 三年中文高清在线观看第6集| 看亚洲a级一级毛片| 97国产一区二区精品久久呦| 麻豆app在线观看| 欧美日韩免费视频| 欧美交换国产一区内射| 91一区二区在线观看| 青青草精品视频在线观看| 99视频精品全部免费在线视频| 成人动漫在线观看视频| 欧美电影h版| 日韩中文字在线| 成人小说亚洲一区二区三区| 日韩欧美在线网址| 无码人妻精品中文字幕 | 国产精品久久久久久久久久久久午夜片 | 中文文精品字幕一区二区| 日韩欧美色视频| 国产精品视区| www.亚洲一区二区| 婷婷精品在线观看| 亚洲已满18点击进入在线看片| 嗯啊主人调教在线播放视频| 在线观看精品自拍私拍| 亚洲AV无码一区二区三区性| 欧美专区亚洲专区| 免费在线视频观看| 国产无遮挡一区二区三区毛片日本| 五月六月丁香婷婷| 新67194成人永久网站| 青青草免费在线视频观看| 一区二区三区日本久久久 | 欧美高清性猛交| 成年午夜在线| 亚洲成成品网站| 一级黄色a视频| 日韩欧美在线观看| 青青草成人免费| 国产精品久久网站| 亚洲精品视频大全| 国产aⅴ精品一区二区三区色成熟| 性生交免费视频| 国产人成精品一区二区三| 综合色婷婷一区二区亚洲欧美国产| 欧美色图五月天| 99精彩视频| 日韩三级一区| 国产成人在线一区| 国产福利片在线观看| 欧美麻豆久久久久久中文| av在线日韩国产精品| 精品一区二区三区三区| 欧美77777| 日韩欧美国产三级| 在线观看国产小视频| 色94色欧美sute亚洲线路二| 日本免费观看视| 亚洲午夜精品久久久久久久久| 在线看的片片片免费| 国产精品色眯眯| 卡一卡二卡三在线观看| 91网页版在线| 毛茸茸多毛bbb毛多视频| 不卡的av网站| 中文字幕人妻一区| 成人午夜激情视频| 91porn在线| 丁香亚洲综合激情啪啪综合| 欧美日韩一区二区区别是什么| 久久99这里只有精品| 污网站免费在线| 美女视频第一区二区三区免费观看网站 | 亚洲av综合一区二区| 99国产欧美久久久精品| 亚洲精品女人久久久| 26uuu久久天堂性欧美| 偷拍女澡堂一区二区三区| 99综合电影在线视频| 人妻在线日韩免费视频| 91在线观看视频| 亚洲精品女人久久久| 久久久综合网站| 国产肥白大熟妇bbbb视频| 久久久久久久国产精品影院| a天堂中文字幕| 中文字幕欧美日本乱码一线二线| 极品尤物一区二区| 中文字幕一区二区三区精华液 | 午夜精品免费在线观看| 日韩毛片在线视频| 色综合久久久久久久久| 在线观看你懂的网站| 欧美日韩国产片| 国产91视频在线| 精品国产乱码久久久久久闺蜜| 免费看黄网站在线观看| 亚洲视频在线播放| 91福利在线视频| 欧美麻豆久久久久久中文| 美女在线视频免费| 国产mv久久久| 亚洲一区二区三区久久久| 99re在线国产| 蜜桃一区二区| 日韩精品第1页| 日韩亚洲国产欧美| 成人性生生活性生交12| 国产乱码精品一区二区三区忘忧草 | 福利视频一二区| 久久久蜜桃一区二区人| 日本免费观看网站| 国产精品一品二品| 一二三不卡视频| 中文字幕在线观看不卡视频| 久久久精品人妻一区二区三区四| 色哟哟亚洲精品| 国产绿帽一区二区三区| 日韩av有码在线| 麻豆av免费在线观看| 韩国精品美女www爽爽爽视频| 欧美性片在线观看| 国产成人精品福利一区二区三区| 国产91精品对白在线播放| 先锋影音男人资源| 午夜一区不卡| 古装做爰无遮挡三级聊斋艳谭| 91美女片黄在线| 一区二区成人免费视频| 色狠狠av一区二区三区| 国产成人无码www免费视频播放| 亚洲午夜国产成人av电影男同| 午夜激情在线| 国产精品视频yy9099| 国产精伦一区二区三区| 日韩精品一区二区三区外面| 综合av在线| 久草福利视频在线| 成人免费毛片a| 内射一区二区三区| 91久久精品一区二区| 动漫av一区二区三区| 久久精品电影网站| 欧美与亚洲与日本直播| 精品国产一区二区三区麻豆小说 | 成人做爰www免费看视频网站| 欧美日韩直播| 精品国产一区二区三区无码| 久久91精品国产91久久小草| av网站免费在线看| 亚洲成人第一页| www日本高清| 久久偷看各类女兵18女厕嘘嘘| 日韩成人影音| 久久久99爱| 亚洲美女黄色| 激情av中文字幕| 一区二区三区中文字幕精品精品 | 蜜臀精品一区二区| 国产在线观看一区二区| 美女100%露胸无遮挡| 91久久人澡人人添人人爽欧美| 视频一区二区免费| 欧美裸体男粗大视频在线观看| 国产精品日本一区二区不卡视频| 亚洲精品无人区| 日本vs亚洲vs韩国一区三区二区| 国产精品成人一区二区三区电影毛片| 五月天一区二区| 欧美在线精品一区二区三区| 国内精品美女av在线播放| caoporn成人| 精品国产av无码一区二区三区| 丁香激情综合五月| 国产真实的和子乱拍在线观看| 精品美女被调教视频大全网站| av大大超碰在线| 成人av男人的天堂| 亚洲经典三级| 欧美精品黑人猛交高潮| 欧美视频一区二区三区…| 欧洲成人av| 国产成人jvid在线播放| 欧美性感美女一区二区| 成年网站免费在线观看| 亚洲欧洲精品成人久久奇米网 | 精品中文视频在线| 欧美gay囗交囗交| 日韩久久不卡| 久久精品国产精品亚洲红杏| 日韩欧美综合视频| 欧美xxxxxxxxx| 在线成人av观看| 视频在线99re| 国产在线不卡一区| 国产大片aaa| 亚洲天堂av女优| 四虎在线精品| 日韩精品综合在线| 91麻豆精品视频| 中文天堂在线播放| 欧美大胆在线视频| 日韩精品免费一区二区三区竹菊 | 国产精品99| 国产午夜精品视频一区二区三区| 成人免费视频播放| 手机av免费观看| 九九热视频这里只有精品| 久久综合五月婷婷| 午夜在线观看av| 亚洲综合色成人| 成人亚洲综合天堂| 91在线看网站| 欧美在线综合| 成年人一级黄色片| 精品无人区太爽高潮在线播放| 国产一区影院| 男女猛烈激情xx00免费视频| 国产日本一区二区| 国产丰满美女做爰| 奇门遁甲1982国语版免费观看高清| 欧美电影免费观看高清| av黄色一级片| 欧美夫妻性生活| 亚洲天堂资源| 亚洲精品少妇一区二区| 国产午夜精品一区二区三区视频| 国产jzjzjz丝袜老师水多| 茄子视频成人在线| 欧美1区2区视频|