国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

基于 Flink SQL 構(gòu)建流批一體的 ETL 數(shù)據(jù)集成

共 10354字,需瀏覽 21分鐘

 ·

2021-03-14 10:11


摘要:本文整理自云邪、雪盡在 Flink Forward Asia 2020 的分享,該分享以 4 個(gè)章節(jié)來詳細(xì)介紹如何利用 Flink SQL 構(gòu)建流批一體的 ETL 數(shù)據(jù)集成, 文章的主要內(nèi)容如下:

  1. 數(shù)據(jù)倉庫與數(shù)據(jù)集成

  2. 數(shù)據(jù)接入(E)

  3. 數(shù)據(jù)入倉/湖(L)

  4. 數(shù)據(jù)打?qū)?T)


Tips:點(diǎn)擊文末「閱讀原文」即可回顧作者原版分享視頻~
 

數(shù)據(jù)倉庫與數(shù)據(jù)集成






數(shù)據(jù)倉庫是一個(gè)集成的(Integrated),面向主題的(Subject-Oriented),隨時(shí)間變化的(Time-Variant),不可修改的(Nonvolatile)數(shù)據(jù)集合,用于支持管理決策。這是數(shù)據(jù)倉庫之父 Bill Inmon 在 1990 年提出的數(shù)據(jù)倉庫概念。該概念里最重要的一點(diǎn)就是“集成的”,其余特性都是一些方法論的東西。因?yàn)閿?shù)據(jù)倉庫首先要解決的問題,就是數(shù)據(jù)集成,就是將多個(gè)分散的、異構(gòu)的數(shù)據(jù)源整合在一起,消除數(shù)據(jù)孤島,便于后續(xù)的分析。這個(gè)不僅適用于傳統(tǒng)的離線數(shù)倉,也同樣適用于實(shí)時(shí)數(shù)倉,或者是現(xiàn)在火熱的數(shù)據(jù)湖。首先要解決的就是數(shù)據(jù)集成的問題。如果說業(yè)務(wù)的數(shù)據(jù)都在一個(gè)數(shù)據(jù)庫中,并且這個(gè)數(shù)據(jù)庫還能提供非常高效的查詢分析能力,那其實(shí)也用不著數(shù)據(jù)倉庫和數(shù)據(jù)湖上場(chǎng)了。




數(shù)據(jù)集成就是我們常稱作 ETL 的過程,分別是數(shù)據(jù)接入、數(shù)據(jù)清洗轉(zhuǎn)換打?qū)挕⒁约皵?shù)據(jù)的入倉入湖,分別對(duì)應(yīng)三個(gè)英文單詞的首字母,所以叫 ETL。ETL 的過程也是數(shù)倉搭建中最具工作量的環(huán)節(jié)。那么 Flink 是如何改善這個(gè) ETL 的過程的呢?我們先來看看傳統(tǒng)的數(shù)據(jù)倉庫的架構(gòu)。




傳統(tǒng)的數(shù)據(jù)倉庫,實(shí)時(shí)和離線數(shù)倉是比較割裂的兩套鏈路,比如實(shí)時(shí)鏈路通過 Flume和 Canal 實(shí)時(shí)同步日志和數(shù)據(jù)庫數(shù)據(jù)到 Kafka 中,然后在 Kafka 中做數(shù)據(jù)清理和打?qū)?。離線鏈路通過 Flume 和 Sqoop 定期同步日志和數(shù)據(jù)庫數(shù)據(jù)到 HDFS 和 Hive。然后在 Hive 里做數(shù)據(jù)清理和打?qū)挕?/span>

這里我們主要關(guān)注的是數(shù)倉的前半段的構(gòu)建,也就是到 ODS、DWD 層,我們把這一塊看成是廣義的 ETL 數(shù)據(jù)集成的范圍。那么在這一塊,傳統(tǒng)的架構(gòu)主要存在的問題就是這種割裂的數(shù)倉搭建這會(huì)造成很多重復(fù)工作,重復(fù)的資源消耗,并且實(shí)時(shí)、離線底層數(shù)據(jù)模型不一致,會(huì)導(dǎo)致數(shù)據(jù)一致性和質(zhì)量難以保障。同時(shí)兩個(gè)鏈路的數(shù)據(jù)是孤立的,數(shù)據(jù)沒有實(shí)現(xiàn)打通和共享。

那么 Flink 能給這個(gè)架構(gòu)帶來什么改變呢?




基于 Flink SQL 我們現(xiàn)在可以方便地構(gòu)建流批一體的 ETL 數(shù)據(jù)集成,與傳統(tǒng)數(shù)倉架構(gòu)的核心區(qū)別主要是這幾點(diǎn):


  1. Flink SQL 原生支持了 CDC 所以現(xiàn)在可以方便地同步數(shù)據(jù)庫數(shù)據(jù),不管是直連數(shù)據(jù)庫,還是對(duì)接常見的 CDC工具。

  2. Flink SQL 在最近的版本中持續(xù)強(qiáng)化了維表 join 的能力,不僅可以實(shí)時(shí)關(guān)聯(lián)數(shù)據(jù)庫中的維表數(shù)據(jù),現(xiàn)在還能關(guān)聯(lián) Hive 和 Kafka 中的維表數(shù)據(jù),能靈活滿足不同工作負(fù)載和時(shí)效性的需求。

  3. 基于 Flink 強(qiáng)大的流式 ETL 的能力,我們可以統(tǒng)一在實(shí)時(shí)層做數(shù)據(jù)接入和數(shù)據(jù)轉(zhuǎn)換,然后將明細(xì)層的數(shù)據(jù)回流到離線數(shù)倉中。

  4. 現(xiàn)在 Flink 流式寫入 Hive,已經(jīng)支持了自動(dòng)合并小文件的功能,解決了小文件的痛苦。



所以基于流批一體的架構(gòu),我們能獲得的收益:


  1. 統(tǒng)一了基礎(chǔ)公共數(shù)據(jù)
  2. 保障了流批結(jié)果的一致性
  3. 提升了離線數(shù)倉的時(shí)效性
  4. 減少了組件和鏈路的維護(hù)成本



接下來我們會(huì)針對(duì)這個(gè)架構(gòu)中的各個(gè)部分,結(jié)合場(chǎng)景案例展開進(jìn)行介紹,包括數(shù)據(jù)接入,數(shù)據(jù)入倉入湖,數(shù)據(jù)打?qū)挕?/span>
 



數(shù)據(jù)接入





現(xiàn)在數(shù)據(jù)倉庫典型的數(shù)據(jù)來源主要來自日志和數(shù)據(jù)庫,日志接入現(xiàn)階段已經(jīng)非常成熟了,也有非常豐富的開源產(chǎn)品可供選擇,包括 Flume,F(xiàn)ilebeat,Logstash 等等都能很方便地采集日志到 Kafka 。這里我們就不作過多展開。

數(shù)據(jù)庫接入會(huì)復(fù)雜很多,常見的幾種 CDC 同步工具包括 Canal,Debezium,Maxwell。Flink 通過 CDC format 與這些同步工具做了很好的集成,可以直接消費(fèi)這些同步工具產(chǎn)生的數(shù)據(jù)。同時(shí) Flink 還推出了原生的 CDC connector,直連數(shù)據(jù)庫,降低接入門檻,簡(jiǎn)化數(shù)據(jù)同步流程。




我們先來看一個(gè)使用 CDC format 的例子?,F(xiàn)在常見的方案是通過 Debezium 或者  Canal 去實(shí)時(shí)采集 MySQL 數(shù)據(jù)庫的 binlog,并將行級(jí)的變更事件同步到 Kafka 中供 Flink 分析處理。在 Flink 推出 CDC format 之前,用戶要去消費(fèi)這種數(shù)據(jù)會(huì)非常麻煩,用戶需要了解 CDC 工具的數(shù)據(jù)格式,將 before,after 等字段都聲明出來,然后用 ROW_NUMBER 做個(gè)去重,來保證實(shí)時(shí)保留最后一行的語義。但這樣使用成本很高,而且也不支持 DELETE 事件。

現(xiàn)在 Flink 支持了 CDC format,比如這里我們?cè)?with 參數(shù)中可以直接指定 format = ‘debezium-json’,然后 schema 部分只需要填數(shù)據(jù)庫中表的 schema 即可。Flink 能自動(dòng)識(shí)別 Debezium 的 INSERT/UPDATE/DELETE 事件,并轉(zhuǎn)成 Flink 內(nèi)部的 INSERT/UPDATE/DELETE 消息。之后用戶可以在該表上直接做聚合、join 等操作,就跟操作一個(gè) MySQL 實(shí)時(shí)物化視圖一樣,非常方便。




在 Flink 1.12 版本中,F(xiàn)link 已經(jīng)原生支持了大部分常見的 CDC format,比如 Canal json、Debezium json、Debezium avro、Maxwell 等等。同時(shí) Flink 也開放了 CDC format 的接口,用戶可以實(shí)現(xiàn)自己的 CDC format 插件來對(duì)接自己公司的同步工具。




除此之外,F(xiàn)link 內(nèi)部原生支持了 CDC 的語義,所以可以很自然地直接去讀取  MySQL 的 binlog 數(shù)據(jù)并轉(zhuǎn)成 Flink 內(nèi)部的變更消息。所以我們推出了 MySQL CDC connector,你只需要在 with 參數(shù)中指定 connector=mysql-cdc,然后 select 這張表就能實(shí)時(shí)讀取 MySQL 中的全量 +CDC 增量數(shù)據(jù),無需部署其他組件和服務(wù)。你可以把 Flink 中定義的這張表理解成是 MySQL 的實(shí)時(shí)物化視圖,所以在這張表上的聚合、join 等結(jié)果,跟實(shí)時(shí)在 MySQL 中運(yùn)行出來的結(jié)果是一致的。相比于剛剛介紹的 Debezium,Canal 的架構(gòu),CDC connector 在使用上更加簡(jiǎn)單易用了,不用再去學(xué)習(xí)和維護(hù)額外組件,數(shù)據(jù)不需要經(jīng)過 Kafka 落地,減少了端到端延遲。而且支持先讀取全量數(shù)據(jù),并無縫切換到 CDC 增量讀取上,也就是我們說的是流批一體,流批融合的架構(gòu)。




我們發(fā)現(xiàn) MySQL CDC connector 非常受用戶的歡迎,尤其是結(jié)合 OLAP 引擎,可以快速構(gòu)建實(shí)時(shí) OLAP 架構(gòu)。實(shí)時(shí) OLAP 架構(gòu)的一個(gè)特點(diǎn)就是將數(shù)據(jù)庫數(shù)據(jù)同步到  OLAP 中做即席查詢,這樣就無需離線數(shù)倉了。

以前是怎么做的呢?

之前用戶一般先用 datax 做個(gè)全量同步,然后用 canal 同步實(shí)時(shí)增量到 Kafka,然后從 Kafka 同步到 OLAP,這種架構(gòu)比較復(fù)雜,鏈路也很長?,F(xiàn)在很多公司都在用 Flink+ClickHouse 來快速構(gòu)建實(shí)時(shí) OLAP 架構(gòu)。我們只需要在 Flink 中定義一個(gè) mysql-cdc source,一個(gè) ClickHouse sink,然后提交一個(gè) insert into query 就完成了從 MySQL 到 ClickHouse 的實(shí)時(shí)同步工作,非常方便。而且,ClickHouse 有一個(gè)痛點(diǎn)就是 join 比較慢,所以一般我們會(huì)把 MySQL 數(shù)據(jù)打成一張大的明細(xì)寬表數(shù)據(jù),再寫入 ClickHouse。這個(gè)在 Flink 中一個(gè) join 操作就完成了。而在 Flink 提供 MySQL CDC connector 之前,要在全量+增量的實(shí)時(shí)同步過程中做 join 是非常麻煩的。




當(dāng)然,這里我們也可以把 ClickHouse 替換成其他常見的 OLAP 引擎,比如阿里云的 Hologres。我們發(fā)現(xiàn)在阿里云上有很多的用戶都采用了這套鏈路和架構(gòu),因?yàn)樗梢允〉魯?shù)據(jù)同步服務(wù)和消息中間件的成本,對(duì)于很多中小公司來說,在如今的疫情時(shí)代,控制成本是非常重要的。




當(dāng)然,這里也可以使用其他 OLAP 引擎,比如 TiDB。TiDB 官方也在最近發(fā)過一篇文章介紹這種 Flink+TiDB 的實(shí)時(shí) OLAP架構(gòu)。



數(shù)據(jù)入倉湖




剛剛我們介紹了基于 Flink SQL 可以非常方便地做數(shù)據(jù)接入,也就是 ETL 的 Extract 的部分。接下來,我們介紹一下 Flink SQL 在數(shù)據(jù)入倉入湖方面的能力,也就是 Load 的部分。




我們回顧下剛剛的流批一體的架構(gòu)圖,其中最核心的部分就是 Kafka 數(shù)據(jù)的流式入倉,正是這一流程打通了實(shí)時(shí)和離線數(shù)倉,統(tǒng)一了數(shù)倉的基礎(chǔ)公共數(shù)據(jù),提升了離線數(shù)倉的時(shí)效性,所以我們針對(duì)這一塊展開講一講。




使用 Flink SQL 做流式數(shù)據(jù)入倉,非常的方便,而且 1.12 版本已經(jīng)支持了小文件的自動(dòng)合并,解決了小文件的痛點(diǎn)。可以看下右邊這段代碼,先在 Flink SQL 中使用  Hive dialect 創(chuàng)建一張 Hive 的結(jié)果表,然后通過 select from kafka 表 insert into Hive 表這樣一個(gè)簡(jiǎn)單 query,就可以提交任務(wù)實(shí)時(shí)將 Kafka 數(shù)據(jù)流式寫入 Hive。

如果要開啟小文件合并,只需要在 Hive 表參數(shù)中加上 auto-compaction = true,那么在流式寫入這張 Hive 表的時(shí)候就會(huì)自動(dòng)做小文件的 compaction。小文件合并的原理,是 Flink 的 streaming sink 會(huì)起一個(gè)小拓?fù)洌锩?temp writer 節(jié)點(diǎn)負(fù)責(zé)不斷將收到的數(shù)據(jù)寫入臨時(shí)文件中,當(dāng)收到 checkpoint 時(shí),通知 compact coordinator 開始做小文件合并,compact coordinator 會(huì)將 compaction 任務(wù)分發(fā)給多個(gè) compact operator 并發(fā)地去做小文件合并。當(dāng) compaction 完成的時(shí)候,再通知 partition committer 提交整個(gè)分區(qū)文件可見。整個(gè)過程利用了 Flink 自身的 checkpoint 機(jī)制完成 compaction 的自動(dòng)化,無需起另外的 compaction 服務(wù)。這也是 Flink 流式入倉對(duì)比于其他入倉工具的一個(gè)核心優(yōu)勢(shì)。




除了流式入倉,F(xiàn)link 現(xiàn)在也支持流式入湖。以 Iceberg 舉例,基于 Iceberg 0.10,現(xiàn)在可以在 Flink SQL 里面直接 create 一個(gè) Iceberg catalog,在 Iceberg catalog 下可以 create table 直接創(chuàng)建 Iceberg表。然后提交 insert into query 就可以將流式數(shù)據(jù)導(dǎo)入到 Iceberg 中。然后在 Flink 中可以用 batch 模式讀取這張 Iceberg  表,做離線分析。不過 Iceberg 的小文件自動(dòng)合并功能目前還沒有發(fā)布,還在支持中。




剛剛介紹的是純 append 數(shù)據(jù)流式入倉入湖的能力,接下來介紹 CDC 數(shù)據(jù)流式入倉入湖的能力。我們先介紹 CDC 數(shù)據(jù)入 Kafka 實(shí)時(shí)數(shù)倉。其實(shí)這個(gè)需求在實(shí)時(shí)數(shù)倉的搭建中是非常常見的,比如同步數(shù)據(jù)庫 binlog 數(shù)據(jù)到 Kafka 中,又比如 join,聚合的結(jié)果是個(gè)更新流,用戶想把這個(gè)更新流寫到 Kafka 作為中間數(shù)據(jù)供下游消費(fèi)。

這在以前做起來會(huì)非常的麻煩,在 Flink 1.12 版本中,F(xiàn)link 引入了一個(gè)新的 connector ,叫做 upsert-kafka,原生地支持了 Kafka 作為一個(gè)高效的 CDC 流式存儲(chǔ)。

為什么說是高效的,因?yàn)榇鎯?chǔ)的形式是與 Kafka log compaction 機(jī)制高度集成的,Kafka 會(huì)對(duì) compacted topic 數(shù)據(jù)做自動(dòng)清理,且 Flink 讀取清理后的數(shù)據(jù),仍能保證語義的一致性。而且像 Canal, Debezium 會(huì)存儲(chǔ) before,op_type 等很多無用的元數(shù)據(jù)信息,upsert-kafka 只會(huì)存儲(chǔ)數(shù)據(jù)本身的內(nèi)容,節(jié)省大量的存儲(chǔ)成本。使用上的話,只需要在 DDL 中聲明 connector = upsert-kafka,并定義 PK 即可。

比如我們這里定義了 MySQL CDC 的直播間表,以及一個(gè) upsert-kafka 的結(jié)果表,將直播間的數(shù)據(jù)庫同步到 Kafka 中。那么寫入 Kafka 的 INSERT 和 UPDATE 都是一個(gè)帶 key 的普通數(shù)據(jù),DELETE 是一個(gè)帶 key 的 NULL 數(shù)據(jù)。Flink 讀取這個(gè) upsert-kafka 中的數(shù)據(jù)時(shí),能自動(dòng)識(shí)別出 INSERT/UPDATE/DELETE 消息,消費(fèi)這張 upsert-kafka 表與消費(fèi) MySQL CDC 表的語義一致。并且當(dāng) Kafka 對(duì) topic 數(shù)據(jù)做了 compaction 清理后,F(xiàn)link 讀取清理后的數(shù)據(jù),仍能保證語義的一致性。




CDC 數(shù)據(jù)入 Hive 數(shù)倉會(huì)麻煩一些,因?yàn)?Hive 本身不支持 CDC 的語義,現(xiàn)在的一種常見方式是先將 CDC 數(shù)據(jù)以 changelog-json 格式流式寫入到 HDFS。然后起個(gè)  batch 任務(wù)周期性地將 HDFS 上的 CDC 數(shù)據(jù)按照 op 類型分為 INSERT, UPDATE, DELETE 三張表,然后做個(gè) batch merge。



數(shù)據(jù)打?qū)?/strong>




前面介紹了基于 Flink SQL 的 ETL 流程的 Extract 和 Load,接下來介紹 Transformation 中最常見的數(shù)據(jù)打?qū)挷僮鳌?/span>




數(shù)據(jù)打?qū)捠菙?shù)據(jù)集成中最為常見的業(yè)務(wù)加工場(chǎng)景,數(shù)據(jù)打?qū)捵钪饕氖侄尉褪?Join,F(xiàn)link SQL 提供了豐富的 Join 支持,包括 Regular Join、Interval Join、Temporal Join。




Regular Join 就是大家熟知的雙流 Join,語法上就是普通的 JOIN 語法。圖中案例是通過廣告曝光流關(guān)聯(lián)廣告點(diǎn)擊流將廣告數(shù)據(jù)打?qū)挘驅(qū)捄罂梢赃M(jìn)一步計(jì)算廣告費(fèi)用。從圖中可以看出,曝光流和點(diǎn)擊流都會(huì)存入 join 節(jié)點(diǎn)的 state,join 算子通過關(guān)聯(lián)曝光流和點(diǎn)擊流的 state 實(shí)現(xiàn)數(shù)據(jù)打?qū)?。Regular Join 的特點(diǎn)是,任意一側(cè)流都會(huì)觸發(fā)結(jié)果的更新,比如案例中的曝光流和點(diǎn)擊流。同時(shí) Regular Join 的語法與傳統(tǒng)批 SQL 一致,用戶學(xué)習(xí)門檻低。但需要注意的是,Regular join 通過 state 來存儲(chǔ)雙流已經(jīng)到達(dá)的數(shù)據(jù),state 默認(rèn)永久保留,所以 Regular join 的一個(gè)問題是默認(rèn)情況下 state 會(huì)持續(xù)增長,一般我們會(huì)結(jié)合 state TTL 使用。




Interval Join 是一條流上需要有時(shí)間區(qū)間的 join,比如剛剛的廣告計(jì)費(fèi)案例中,它有一個(gè)非常典型的業(yè)務(wù)特點(diǎn)在里面,就是點(diǎn)擊一般發(fā)生在曝光之后的 10 分鐘內(nèi)。因此相對(duì)于 Regular Join,我們其實(shí)只需要關(guān)聯(lián)這10分鐘內(nèi)的曝光數(shù)據(jù),所以 state 不用存儲(chǔ)全量的曝光數(shù)據(jù),它是在 Regular Join 之上的一種優(yōu)化。要轉(zhuǎn)成一個(gè) Interval Join,需要在兩個(gè)流上都定義時(shí)間屬性字段(如圖中的 click_time 和 show_time)。并在 join 條件中定義左右流的時(shí)間區(qū)間,比如這里我們?cè)黾恿艘粋€(gè)條件:點(diǎn)擊時(shí)間需要大于等于曝光時(shí)間,同時(shí)小于等于曝光后 10 分鐘。與 Regular Join 相同, Interval Join 任意一條流都會(huì)觸發(fā)結(jié)果更新,但相比 Regular Join,Interval Join 最大的優(yōu)點(diǎn)是 state 可以自動(dòng)清理,根據(jù)時(shí)間區(qū)間保留數(shù)據(jù),state 占用大幅減少。Interval Join 適用于業(yè)務(wù)有明確的時(shí)間區(qū)間,比如曝光流關(guān)聯(lián)點(diǎn)擊流,點(diǎn)擊流關(guān)聯(lián)下單流,下單流關(guān)聯(lián)成交流。




Temporal join (時(shí)態(tài)表關(guān)聯(lián)) 是最常用的數(shù)據(jù)打?qū)挿绞?,它常用來做我們熟知的維表  Join。在語法上,它需要一個(gè)顯式的 FOR SYSTEM_TIME AS OF 語句。它與 Regular Join 以及 Interval Join 最大的區(qū)別就是,維度數(shù)據(jù)的變化不會(huì)觸發(fā)結(jié)果更新,所以主流關(guān)聯(lián)上的維度數(shù)據(jù)不會(huì)再改變。Flink 支持非常豐富的 Temporal join 功能,包括關(guān)聯(lián) lookup DB,關(guān)聯(lián) changelog,關(guān)聯(lián) Hive 表。在以前,大家熟知的維表 join 一般都是關(guān)聯(lián)一個(gè)可以查詢的數(shù)據(jù)庫,因?yàn)榫S度數(shù)據(jù)在數(shù)據(jù)庫里面,但實(shí)際上維度數(shù)據(jù)可能有多種物理形態(tài),比如 binlog 形式,或者定期同步到 Hive 中變成了 Hive 分區(qū)表的形式。在 Flink 1.12 中,現(xiàn)在已經(jīng)支持關(guān)聯(lián)這兩種新的維表形態(tài)。 




Temporal Join Lookup DB 是最常見的維表 Join 方式,比如在用戶點(diǎn)擊流關(guān)聯(lián)用戶畫像的案例中,用戶點(diǎn)擊流在 Kafka 中,用戶實(shí)時(shí)畫像存放在 HBase 數(shù)據(jù)庫中,每個(gè)點(diǎn)擊事件通過查詢并關(guān)聯(lián) HBase 中的用戶實(shí)時(shí)畫像完成數(shù)據(jù)打?qū)?。Temporal Join Lookup DB 的特點(diǎn)是,維表的更新不會(huì)觸發(fā)結(jié)果的更新,維度數(shù)據(jù)存放在數(shù)據(jù)庫中,適用于實(shí)時(shí)性要求較高的場(chǎng)景,使用時(shí)我們一般會(huì)開啟 Async IO 和內(nèi)存 cache 提升查詢效率。
 




在介紹 Temporal Join Changelog 前,我們?cè)倏匆粋€(gè) Lookup DB 的例子,這是一個(gè)直播互動(dòng)數(shù)據(jù)關(guān)聯(lián)直播間維度的案例。這個(gè)案例中直播互動(dòng)數(shù)據(jù)(比如點(diǎn)贊、評(píng)論)存放在 Kafka 中,直播間實(shí)時(shí)的維度數(shù)據(jù)(比如主播、直播間標(biāo)題)存放在 MySQL 中,直播互動(dòng)的數(shù)據(jù)量是非常大的,為了加速訪問,常用的方案是加個(gè)高速緩存,比如把直播間的維度數(shù)據(jù)通過 CDC 同步,再存入 Redis 中,再做維表關(guān)聯(lián)。這種方案的問題是,直播的業(yè)務(wù)數(shù)據(jù)比較特殊,直播間的創(chuàng)建和直播互動(dòng)數(shù)據(jù)基本是同時(shí)產(chǎn)生的,因此互動(dòng)數(shù)據(jù)可能早早地到達(dá)了 Kafka 被 Flink 消費(fèi),但是直播間的創(chuàng)建消息經(jīng)過了 Canal, Kafka,Redis, 這個(gè)鏈路比較長,數(shù)據(jù)延遲比較大,可能導(dǎo)致互動(dòng)數(shù)據(jù)查詢 Redis 時(shí),直播間數(shù)據(jù)還未同步完成,導(dǎo)致關(guān)聯(lián)不上直播間數(shù)據(jù),造成下游統(tǒng)計(jì)分析的偏差。




針對(duì)這類場(chǎng)景,F(xiàn)link 1.12  支持了 Temporal Join Changelog,通過從 changelog在 Flink state 中物化出維表來實(shí)現(xiàn)維表關(guān)聯(lián)。剛剛的場(chǎng)景有了更簡(jiǎn)潔的解決方案,我們可以通過 Flink CDC connector 把直播間數(shù)據(jù)庫表的 changelog 同步到 Kafka 中,注意我們看下右邊這段 SQL,我們用了 upsert-kafka connector 來將 MySQL binlog 寫入了 Kafka,也就是 Kafka 中存放了直播間變更數(shù)據(jù)的 upsert 流。然后我們將互動(dòng)數(shù)據(jù) temporal join 這個(gè)直播間 upsert 流,便實(shí)現(xiàn)了直播數(shù)據(jù)打?qū)挼墓δ堋?/span>

注意我們這里 FOR SYSTEM_TIME AS OF 不是跟一個(gè) processing time,而是左流的 event time,它的含義是去關(guān)聯(lián)這個(gè) event time 時(shí)刻的直播間數(shù)據(jù),同時(shí)我們?cè)谥辈ラg upsert 流上也定義了 watermark,所以 temporal join changelog 在執(zhí)行上會(huì)做 watermark 等待和對(duì)齊,保證關(guān)聯(lián)上精確版本的結(jié)果,從而解決先前方案中關(guān)聯(lián)不上的問題。




我們?cè)敿?xì)解釋下 temporal join changelog 的過程,左流是互動(dòng)流數(shù)據(jù),右流是直播間 changelog。直播間 changelog 會(huì)物化到右流的維表 state 中,state 相當(dāng)于一個(gè)多版本的數(shù)據(jù)庫鏡像, 主流互動(dòng)數(shù)據(jù)會(huì)暫時(shí)緩存在左流的 state 中,等到 watermark 到達(dá)對(duì)齊后再去查維表 state 中的數(shù)據(jù)。比如現(xiàn)在互動(dòng)流和直播流的 watermark 都到了10:01分,互動(dòng)流的這條 10:01 分評(píng)論數(shù)據(jù)就會(huì)去查詢維表 state,并關(guān)聯(lián)上 103 房間的信息。當(dāng) 10:05 這條評(píng)論數(shù)據(jù)到來時(shí),它不會(huì)馬上輸出,不然就會(huì)關(guān)聯(lián)上空的房間信息。它會(huì)一直等待,等到左右兩流的 watermark 都到 10:05 后,才會(huì)去關(guān)聯(lián)維表 state 中的數(shù)據(jù)并輸出。這個(gè)時(shí)候,它能關(guān)聯(lián)上準(zhǔn)確的 104 房間信息。

總結(jié)下,Temporal Join Changelog 的特點(diǎn)是實(shí)時(shí)性高,因?yàn)槭前凑?event time 做的版本關(guān)聯(lián),所以能關(guān)聯(lián)上精確版本的信息,且維表會(huì)做 watermark 對(duì)齊等待,使得用戶可以通過 watermark 控制遲到的維表數(shù)。Temporal Join Changelog 中的維表數(shù)據(jù)都是存放在 temporal join 節(jié)點(diǎn)的 state 中,讀取非常高效,就像是一個(gè)本地的 Redis 一樣,用戶不再需要維護(hù)額外的 Redis 組件。 




在數(shù)倉場(chǎng)景中,Hive 的使用是非常廣泛的,F(xiàn)link 與 Hive 的集成非常友好,現(xiàn)在已經(jīng)支持 Temporal Join Hive 分區(qū)表和非分區(qū)表。我們舉個(gè)典型的關(guān)聯(lián) Hive 分區(qū)表的案例:訂單流關(guān)聯(lián)店鋪數(shù)據(jù)。店鋪數(shù)據(jù)一般是變化比較緩慢的,所以業(yè)務(wù)方一般會(huì)按天全量同步店鋪表到 Hive 分區(qū)中,每天會(huì)產(chǎn)生一個(gè)新分區(qū),每個(gè)分區(qū)是當(dāng)天全量的店鋪數(shù)據(jù)。

為了關(guān)聯(lián)這種 Hive 數(shù)據(jù),只需我們?cè)趧?chuàng)建 Hive 分區(qū)表時(shí)指定右側(cè)這兩個(gè)紅圈中的參數(shù),便能實(shí)現(xiàn)自動(dòng)關(guān)聯(lián) Hive 最新分區(qū)功能,partition.include = latestb 表示只讀取 Hive 最新分區(qū),partition-name 表示選擇最新分區(qū)時(shí)按分區(qū)名的字母序排序。到 10 月 3 號(hào)的時(shí)候,Hive 中已經(jīng)產(chǎn)生了 10 月 2 號(hào)的新分區(qū), Flink 監(jiān)控到新分區(qū)后,就會(huì)重新加載10月2號(hào)的數(shù)據(jù)到 cache 中并替換掉10月1號(hào)的數(shù)據(jù)作為最新的維表。之后的訂單流數(shù)據(jù)關(guān)聯(lián)上的都是 cache 10 月 2 號(hào)分區(qū)的數(shù)據(jù)。Temporal join Hive 的特點(diǎn)是可以自動(dòng)關(guān)聯(lián) Hive 最新分區(qū),適用于維表緩慢更新,高吞吐的業(yè)務(wù)場(chǎng)景。




總結(jié)一下我們剛剛介紹的幾種在數(shù)據(jù)打?qū)捴惺褂玫?join:


  1. Regular Join 的實(shí)效性非常高,吞吐一般,因?yàn)?state 會(huì)保留所有到達(dá)的數(shù)據(jù),適用于雙流關(guān)聯(lián)場(chǎng)景;
  2. Interval Jon 的時(shí)效性非常好,吞吐較好,因?yàn)?state 只保留時(shí)間區(qū)間內(nèi)的數(shù)據(jù),適用于有業(yè)務(wù)時(shí)間區(qū)間的雙流關(guān)聯(lián)場(chǎng)景;
  3. Temporal Join Lookup DB 的時(shí)效性比較好,吞吐較差,因?yàn)槊織l數(shù)據(jù)都需要查詢外部系統(tǒng),會(huì)有 IO 開銷,適用于維表在數(shù)據(jù)庫中的場(chǎng)景;
  4. Temporal Join Changelog 的時(shí)效性很好,吞吐也比較好,因?yàn)樗鼪]有 IO 開銷,適用于需要維表等待,或者關(guān)聯(lián)準(zhǔn)確版本的場(chǎng)景;
  5. Temporal Join Hive 的時(shí)效性一般,但吞吐非常好,因?yàn)榫S表的數(shù)據(jù)存放在cache 中,適用于維表緩慢更新的場(chǎng)景,高吞吐的場(chǎng)景。



總結(jié)





最后我們來總結(jié)下 Flink 在 ETL 數(shù)據(jù)集成上的能力。這是目前 Flink 數(shù)據(jù)集成的能力矩陣,我們將現(xiàn)有的外部存儲(chǔ)系統(tǒng)分為了關(guān)系型數(shù)據(jù)庫、KV 數(shù)據(jù)庫、消息隊(duì)列、數(shù)據(jù)湖、數(shù)據(jù)倉庫 5 種類型,可以從圖中看出 Flink 有非常豐富的生態(tài),并且對(duì)每種存儲(chǔ)引擎都有非常強(qiáng)大的集成能力。

橫向上我們定義了 6 種能力,分別是 3 種數(shù)據(jù)接入能力:


  • 全量讀取
  • 流式讀取
  • CDC 流式讀取



一種數(shù)據(jù)打?qū)捘芰Γ?/span>


  • 維度關(guān)聯(lián);



以及兩種入倉/入湖能力:


  • 流式寫入
  • CDC 寫入



可以看到 Flink 對(duì)各個(gè)系統(tǒng)的數(shù)據(jù)接入能力、維度打?qū)捘芰?、入倉/入湖能力都已經(jīng)非常完善了。在 CDC 流式讀取上,F(xiàn)link 已經(jīng)支持了主流的數(shù)據(jù)庫和 Kafka 消息隊(duì)列。在數(shù)據(jù)湖方向,F(xiàn)link 對(duì) Iceberg 的流式讀取和 CDC 寫入的功能也即將在接下來的 Iceberg 版本中發(fā)布。從這個(gè)能力矩陣可以看出,F(xiàn)link 的數(shù)據(jù)集成能力是非常全面的。

瀏覽 59
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 北条麻妃网站| av在线资源播放| 99热这里有精品| 五月开心激情网| 日韩无码免费视频| 日韩AV在线天堂| 少妇搡BBBB搡BBB搡HD(| 国产免费黄色片| 翔田千里无码| 北条麻妃免费视频| 国产一级片在线| 黃色一级A片一級片| 精品欧美片在线观看步骤| 一级内射片在线网站观看| 亚洲黄色视频网站在线观看| 欧美日韩视频在线播放| 操逼逼网| 国产午夜三级| 国产经典午夜福利视频合集| 免费一级无码婬片A片APP直播| 中文字幕在线观看一区二区三区| 日本精品三级| 成年人黄色视频在线观看| 中文字幕成人网| 欧美aaa| 操逼视频电影| 久久久久无码精品亚洲日韩| 成人免费毛片果冻日本| 欧美精品三区| 国产麻豆三级片| 亚洲无码成人电影| 久草在在线| 无码免费视频观看| 小草久久95| 天堂在线中文网| 欧美一级黃色A片免费看小优视频| 午夜黄电影| 欧美级黑寡妇毛片app| 欧美色色网站| gogogo高清在线观看免费直播中国| 国产高清无码免费在线观看| 精品人妻午夜一区二区三区四区 | 夜夜嗨av| 黑人Av在线| 久久精品久久久久久久| 西西人体WW大胆无码| 日韩69| 激情五月婷婷丁香| 韩国无码视频| 五月天婷婷影院影院| 免费看黃色AAAAAA片| 97色在线视频| 九九九精品在线| 精品福利导航| 成人免费A片在线观看直播96| 日本免费中文字幕| 色色网站视频| 韩国精品一区二区三区| 成人毛片在线播放免费| 男人天堂综合网| 日韩成人免费| 国产精品久久久久久久久久久久久久久久 | 亚洲日韩在线视频播放| 丁香色色网| 天天射夜夜骑| 国产一级片在线| 亚洲天堂无码| 欧美性爱导航| 中文字幕无码在线观看| 国产v欧美| 亚洲人妻中文字幕| 亚洲ww国产a大作| 蜜桃av秘无码一区二区三区| 最近最火中文字幕mv歌词| 九九综合久久| 亚洲无码久久网| 久久午夜无码鲁丝片午夜精| 97超碰网| 岛国av在线播放| 香蕉中文网| 成人特级毛片| 日韩综合精品| 日韩一级欧美一级| 国内超碰| 日韩va| 蜜臀网| 日本无码在线| 日韩不卡视频在线| 久久久久久国际四虎免费精品视频| 九九自拍视频| 日本高清版色视频| A一级黄色片| 成人黄色网址| 成人一级黄片| 毛片天天干| A片在线观看视频| 亚洲无码人妻在线| 欧美日韩免费看| 欧美熟妇高潮流白浆| 国产欧美日韩在线| 日韩无码少妇| 吴梦梦md0069| 亚洲AV无码成人| 午夜伦理福利| h片免费在线观看| 欧美大鸡巴在线观看| 亚洲最大成人网站| 欧美一级A片在线观看| 日韩不卡| 91啦丨露脸丨熟女色啦| 夜色精品视频| 无码免费在线视频| 中文字幕第11页| 2025四虎在线视频观看| 亚洲Av无码成人专区擼| 日韩欧美国产一区二区| 欧美日韩小视频| 亚洲无码人妻视频| 日韩三级在线免费观看| 日韩人妻在线视频| 无码蜜桃一区二区| 黄色视频在线观看免费| 欧美成人精品欧美一级| 国产婬片一级A片AAA毛片AⅤ | 国产精品久久久久精| 大鸡吧大香蕉| 欧美成人精品AAA| 91干逼| 青草网在线观看| 亚洲视频免费播放| 国产午夜精品一区二区三区牛牛 | 99热免费在线| 免费无码国产在线55| 蜜桃久久久久久久| 在线视频亚洲| 国产成人精品无码| 成人a片在线免费观看| 超碰精品在线| 国产高清无码在线观看视频| 少妇熟女视频一区二区三区| 五月婷婷在线播放| 一区二区三区四区在线看| 国产操P| 尤物视频网址| 丁香五月五月婷婷| 11一12周岁女毛片| Av天堂图片在线| 人人澡人人爽人人精品| 永久m3u8在线观看| 91麻豆精品国产91久久久久久久久| 91成人免费电影| 四川BBB搡BBB爽爽爽电影| 北条麻妃在线精品| 女人的天堂AV| 岛国无码破解AV在线播放| 天天操天天谢| 国产乱伦电影| 中文字幕高清无码视频| 日逼| 国产精品秘精东影业| 大香蕉视频网| 国产精品免费一区二区三区都可以| 亚洲黄v| 日本无码一区二区| 无码成人午夜在线影院| 中文字幕在线免费观看电影| 色婷婷亚洲综合| 娇小,学生,高潮,videos| 九九色| 日韩高清欧美| 黄色片在线视频| 欧美,日韩,日| 人妻体内射精一区二区| 蜜桃毛片| 想要xx视频| 欧美日韩一区二区三区视频| 亚洲高清无码在线观看| 久久99精品久久久久久| 日韩成人视频在线| 免费在线观看AV网站| 日韩v欧美v日本v亚洲v国产v| 黄色伊人| 久久久国产91桃色一区二区三区| 9l农村站街老熟女| 好男人WWW社区在线视频夜恋| 欧美日韩亚洲视频| 天堂国产一区二区三区| 五月婷在线| 欧美操BB| 日本视频精品| 国产黄在线| 欧美日韩伊人| 中文字幕乱伦性爱| 亚洲av电影在线观看| 西西444www无码精品| 亚洲中文字幕观看| 日本在线视频不卡| 久久草草热国产精| 麻豆精东一区二区欧美国产| 色婷婷基地| 日本欧美亚洲| 亚洲无码视频一区二区| 一级a免一级a做免费线看内祥| 国产18水真多18精品| 色丁香在线| 亚洲日操| 中文字幕在线观看完整av| 免费A片在线观看| 欧美拍拍视频| 免费做爱网站| 亚洲中文综合| 欧美激情影院| 尤物网站在线播放| 97超碰成人| 欧美日韩无| 久久日精品| 国产一区二区三区在线| 亚洲成人福利在线| 老妇bbw| 国产高清AV在线| 欧美成在线视频| 人人爽人人操人人| 中文解说AⅤ水果派| 成年人A片| 午夜无码在线| 久久久亚洲无码| 国产精品天天AVJ精麻传媒| 午夜视频99| 97精产国品久久蜜桃臀| 久久电影精品| 香蕉视频毛片| 日韩有码在线观看| 华女与黑人91A∨| 中文字幕婷婷| 免费黄色大片网站| 成人片网站在线观看| www,色婷婷| 中文字幕无码网站| 好吊妞在线| 91天堂| 一级黄色大片| 久久三级片电影| 97久久超碰| 黄色视频网站在线看| 在线观看免费A片| 亚洲第一天堂| 亚洲一区二区黄色电影视频网站 | 日本免费高清视频在线观看一区| 最新日韩中文字幕| www.91madou| 天天肏天天肏| 欧美日韩精品久久久免费观看| 国产精品123区| 日本三级黄色视频| 韩国无码视频在线观看| 97国产高清| 精品无码在线| 亚洲成人自拍| 97桃色| 一区二区三区久久久久| 国产日本在线| 日韩A视频| 熟女一区二区三区| 偷拍一区二区三区| 桃色五月天| 无码人妻一区二区三区| 久久99久久视频| 国产精品被狂躁到高潮| 91成人无码看片在线观看网址| 99re热| 免费v片在线| 最近中文字幕中文翻译歌词| 水蜜桃视频在线| 18一20女一片毛片| 极品小仙女69| 亚洲AV毛片成人精品网站| 欧美亚洲三级| 中文字幕综合| 国产一级电影网站| 久久久精品网站| 五月天狠狠干| 色色天堂成人电影| 国产精品中文字幕在线观看| 亚洲精品久久久久avwww潮水| 亚洲口爆 | 国产小视频在线观看| 日本三级片中文字幕| 色欲五月天| 思思99热| 日韩中文字幕一区二区三区| 人人超碰在线| 日韩一级在线播放| 骚妇一区| 欧美熟妇搡BBBB搡BBBBB| 激情六月丁香| 91在线资源| 香蕉成人网站在线观看| 日韩中文字幕免费在线观看| 人人妻人人澡人人爽人人| 精品无码在线观看视频| NP玩烂了公用爽灌满视频播放| www.国产在线| 97黄色| 精品动漫3D一区二区三区免费版| 91蝌蚪| 91人妻一区二区三区无不码超满| 日韩性爱在线观看| 色婷婷丁香五月天| 7777精品伊人久久7777| 狠狠干天天干| 苗条一区小视频| 俺去啦俺去啦| 国产在线视频你懂的| 午夜老司机福利| 嫩草入口| www.天天日| 国产精品一区一区三区| 婷婷五月丁香激情| 天天日毛片| 亚洲精品一区二区三区无码电影| 国产久久在线| 色老板av| av在线资源网| 91丝袜足交| 搡老熟女-91Porn| 国产激情视频在线观看| 欧美深夜福利视频| 久久免费视频观看| 特级毛片av| 色婷网| 成人毛片网| 亚洲无码精品专区| 亚洲日韩久久| 六十路老熟女码视频| 中文在线永久免费观看| 午夜伦理福利| 91日韩精品| 91丨豆花丨成人熟女| 91精品日韩| 婷婷五月丁香五月| 天天日人人| 久久这里只有| 大地影视官网第三页入口| 伊人久久大香线蕉av一区| 日韩中文字幕区| 在线免费毛片| 无码在线免费| 久久aaaa| 五月天黄色电影| 日韩亚洲在线观看| 欧美日韩在线免费观看| 天天干天天日| 亚洲三级无码| 久久夜色精品国产噜噜亚洲AV| 婷婷五月天影院| 精产国品一区二区三区| 黄色片免费| 中文字字幕在线| 樱桃码一区二区三区| 91精品成人电影| 五十路在线| 国产精品无码在线播放| 黑人av| 色屁屁草草影院ccyycom| 肏少妇女情人大骚逼直播一区二区| 三级片网站在线观看| 色婷婷天天操天天干| 在线视频一区二区三区四区| 青榴视频免费观看| 午夜精品视频在线观看| 午夜AV在线播放| 日韩精品成人无码免费| 人人操日本| 无码高潮| 九九热这里有精品| 日韩欧美视频| 牛牛精品一区二区| 日本伊人网| 在线免费看a片| 国内自拍网站| 爱爱无码| 黄色成人视频免费看| 中文字幕免费视频在线播放| 俺去俺来也WWW色老板| 人妻人人干| 中文字幕在线观看免费高清电影 | 国产A片免费| 国产精品v欧美精品v日韩精品| 亚洲成人网站在线| 日韩无码视频观看| 成人黄色无码视频| 亚洲精品无码视频| 日韩无码操逼视频| 山东乱子伦视频国产| 无码高潮| 九九九AV| 国产手机AV在线| 久草视频观看| 中国精品77777777| 亚洲看片| 特大妓女BBwBBWBBw| 日本AⅤ中文字幕| 免费性爱视频网站| 美女扣穴| 尤物视频网站在线观看| 嫩BBB槡BBBB槡BBBB视频-百度 | 国产精品VA| 五月婷婷中文版| 香蕉综合网| wwwsesese| 日韩无码一卡| 国产成人视频在线| 久久新视频| 草久av| 91成人免费视频| 欧美中文字幕在线播放| 免费福利视频网站| 日韩一级片在线观看| 青娱乐国产在线视频| 香蕉中文在线| 一级无码专区| 亚洲天堂成人网| 亚洲天堂网在线观看视频| 国产黄色AV片| 欧美精品在线播放| 上海熟妇搡BBBB搡BBBB| 亲子乱婬-一级A片| 欧美成人精品一区二区| 青娱乐伊人| 狠狠ri| www.色欲av| 污视频免费在线观看| 色妞视频| 免费在线a视频| 亚洲性爱工厂| 国产美女自拍视频| 99热精品国产| 亚洲午夜激情| 欧美日韩男女淫乱一区二区| 日韩精品视频在线免费观看| 大香蕉AV在线观看| 西西337| 亚洲小说图片AV在线| 91超碰在线免费观看| 免费啪啪网| 中文字幕无码一区二区三区一本久| 波多野结衣久久| 日韩黄视频| 在线免费看黄网站| 在线视频播放| 色丁香视频在线观看的| 江苏妇搡BBBB搡BBBB| 日本一级大毛片a一| 日本aaaa片| 国产免费网址| 日韩无码中文字幕| 成人欧美| 欧美老熟女18| 久久久久久久网| 无码九九九| 欧美淫秽视频| 国内操逼| 亚洲视频中文字幕| 日韩精品一二区| 久久群交| 色婷婷俺来也| 欧美一区二区丁香五月天激情| 欧美人人操| 91久久| 日韩精品人妻中文字幕有| 99精品国产热久久91色欲| 五月天无码av| 91九色丨国产丨爆乳| 中文字幕成人网| 伊人成人小说| 性爱麻豆| 日韩性爱av| 毛片A片免费看| 成人黄色毛片视频| 欧美丝袜脚交xxxxBH| 亚洲AV成人无码久久精品麻豆| www.日韩欧美| 欧美口爆视频| 影音先锋在线成人| 色五月网站| 熟女人妻人妻の视频| 黄色插逼视频| 国产亚洲视频完整在线观看 | 成人午夜视频在线观看| 欧美黄色网址| 蜜臀久久久| 日韩专区在线观看| 在线播放91灌醉迷J高跟美女| 无码成人网| 欧美成人午夜福利| 久久精品毛片| 骚逼无码| 一级黄视频| 中文字幕日本成人| 高清无码视频免费看| 蜜桃黄色视频| 水蜜桃视频网站在线观看| 黄色777| 欧美一区| 超碰91在线| 国产熟妇搡BBBB搡BBBB毛片 | 苍井空一区二区| 在线免费观看AV片| 天天操人妻| 黄色成人视频免费看| 亚洲中文字幕在线视频播放| 欧美激情国产精品| 国产精品秘国产精品88| 91精品少妇高潮一区二区三区不卡 | 成人做爰A片免费看网站| 日韩在线观看视频网站| 91久久免费视频| 猫咪AV大香蕉| 97在线精品| 黄色在线免费观看网站| 在线观看黄A片免费网站| 99久热在线精品视频| 丁香天堂| 日韩天堂在线观看| av超碰在线| 国产成人自拍视频在线观看| 亚洲成人无码精品| 少妇4p| 我和岳m愉情XXXⅩ视频| 无码无码无码| 俺来操| 成人国产在线无码AV免费| 一级A级毛片| 伊人视频在线| 亚洲成人网在线| 99精品无码| 久久国产成人| 国产AV一区二区三区精品| 国产A片视频| 最近中文字幕免费| 亚洲天堂无码在线| 性欧美成人18| 亚州精品国产精品乱码不99勇敢 | 黄色毛片,男人天堂| 亚洲AV无码第一区二区三区蜜桃| 加勒比日韩在线| 波多野结衣av在线| 初学影院WWWBD英语完整版在线观看| 亚洲成人精品少妇| XXXX操| 黑人AV在线播放| 97精品人妻一区| 黄色综合网站| 狠狠干狠狠艹| 无码黄漫| 51精品国产| 亚洲成人日韩| 久久久91| 神马午夜福利| 99性视频| 91人妻人人澡人人爽人人精品一 | 精品少妇人妻| 国产成人免费做爰视频| 无码专区中文字幕| 欧美在线成人视频| 久久久久久久免费视频| 久久av电影| 伊人久久狼人| 久草中文在线视频| 日屄在线观看| 亚洲一区二区视频在线观看| 亚洲AV成人无码一区二区三区| 大香蕉在线伊人| 爱爱爱免费视频| 麻豆精品久久久久久久99蜜桃| www黄片| 黄色亚洲无码| 天天操人人射| 久久无码在线观看| 农村老太HD肉HD| 日皮视频免费看| 日本无码一区二区三三| 99久久爱re热6在播放| 色五月亚洲| 亚洲a电影| 无码一区二区在线观看| 大香蕉性爱| 蜜桃传媒一区二区| 按摩性高湖婬AAA片A片中国| 色在线视频| 亚洲娱乐在线| 97在线视频免费观看| 免费亲子乱婬一级A片| 成人黄色视频网站| 欧美特黄AAA| 亚洲激色| 国产精品婷婷午夜在线观看| 欧美另类激情| 免费无码视频一区二区| 国产精品伊人| 少妇4p| www.俺来也| 一区在线观看| 三级视频网址| 先锋影音在线| 丁香五月婷婷综合| 午夜操p| 欧美精品一级| 国产精品AV在线观看| 狠狠干狠狠撸| 美国无码黄片| 久久一级A片| 囯产精品一区二区三区线一牛影视1| 日日夜夜天天| 国产一区二区00000视频| 污视频网站免费观看| 特级西西444www大精品| 成人在线免费视频观看| 日本不卡一区二区三区四区| 日韩一区二区三区免费视频| 中文字幕天天干| 黄片AV| sm视频网站| 日韩人妻av| 超碰91在线观看| 国外亚洲成AV人片在线观看 | 欧美一级A| 久久99久久视频| 91蜜桃视频在线观看| 亚洲无码99| 色色激情视频| 嫩BBB槡BBBB槡BBBB免费视频| 色婷婷综合激情| 亚洲一级黄片| 国产精品秘国产精品88| 黄色视频网站在线免费观看| 无码人妻一区二区三区四区老鸭窝| 9l人人澡人人妻人人精品| 国产精品三级视频| 亚洲成人高清| 黃色毛片A片AAAA级20| 一本久久精品一区二区| 午夜AV在线| 午夜福利日本| 国产一级二级在线观看| 亚洲看片| 天天日天天干天天草| 国产黄色视频免费观看| 久久人妻无码| 色五月电影| 国产一a毛一a毛A免费| 成人精东影业JDAV3密友| 狠狠色噜噜狠狠狠888米奇视频| 午夜无码在线| 中国人妻HDbute熟睡| 欧洲精品视频在线观看| 超碰超碰| 天堂va欧美ⅴa亚洲va一夜| 97人妻一区二区三区| 免费看一级高潮毛片| 亚州视频在线| 久草视频免费在线观看| 操逼视频在线免费看| 美女自慰网站在线观看| 中文无码Av| 久久久久无码国产精品不卡| 一区二区三区在线看| 在线无码中文字幕| 搡BBBB搡BBB搡我瞎了| 亚洲欧美成人片| 无码白浆| 中文字幕日本电影| 午夜成人福利剧场| 五月天网址| 日本一区二区视频在线| 强伦轩农村人妻| 一级片AV| 亚洲中文无码字幕| 亚洲综合中文字幕在线播放| 日本欧美视频| 在线天堂9| 超碰在线观看99| 91精品国产成人www| 亚洲无码在线视频观看| 亚洲免费无码| 日韩久久网站| 99热免费| 亚洲精品一二| 99视频精品| 台湾无码片| 另类天堂| 一级欧美黑人大战白妞| 操一操| 日韩操屄视频| 亚洲色图狠狠撸| 亚洲五月天色| 亚洲的天堂的αⅴ| 自拍三级| 免费a级毛片| 日韩精品视频免费在线观看| 8050网午夜| 超碰2023| 国产xxxx| 成人午夜在线观看| 在线中文字幕在线观看| 精品欧美一区二区三区久久久| 亚洲成人网站视频| 操操干| 欧美V视频| 亚洲免费成人网站| 丁香六月婷| AA无码| 国产一级a毛一级a毛观看视频网站www.jn | 日本一区二区视频| 少妇AAA级久久久无码精品片 | 一道本无码在线| 日本精品视频在线| 最新国产av| 黑人乱伦| 国产高清无码在线观看| 亚洲日产专区| 亚洲精品三级在线观看| 美女自慰网站在线观看| 激情五月天激情网| 亚洲性爱一区| 狼人一区二区| 中文字幕日本电影| 免费a视频在线观看| av亚洲波多野结衣白嫩水多波| 亚洲无码综合| 国产黄a| 色天堂视频在线观看| 日本免费视频| 狠狠操婷婷| 四虎永久在线精品无码| 99久久婷婷国产综合精品| 久久精品免费| 三级片网站视频| 福利视频免费观看| 国产一区无码| 欧美视频基地| 免费av一区二区| 亚洲欧美一区二区三区在线| 亚洲无码视频在线免费观看| 国产激情艹逼| 婷婷九九| 国产18水真多18精品| 97精品视频| 黄色视频网站国产| 日本中文不卡| 影音先锋人妻限定| A在线免费观看| 日韩在线成人中文字幕亚洲| 国产激情都市一区二区三区欧美| 三级片一区二区| 大香蕉少妇| 亚洲成人性爱av| 91九色在线观看| 久久婷婷在线| 噜噜噜网| 天天久久综合| 亚洲AV无一区二区三区久久 | 蝌蚪窝免费在线视频| 色婷婷基地| 京东一热本色道久久爱| 日本A∨在线| 三洞齐开Av在线免费观看| www.色悠悠| 亚洲精品伦理| 98无码人妻精品一区二区三区| 国产无码片| 日韩在线观看视频网站| 免费国产精品视频| 正在播放亚洲| 人妻p| 九九久热| 在线观看中文字幕一区| 色婷婷一区二区三区四区五区精品视| 免费看一区二区三区| 成人毛片AV无码| 亚洲一区无码在线观看| A片免费在线观看| 蜜桃BBwBBWBBwBBw| 成人先锋| 日本少妇BBw| aa人人操夜夜操人人| 免费看黃色AAAAAA片| 一级黄色小视频| 丁香婷婷五月基地| 日韩一级电影在线| 四虎av| 日韩欧美二区| 男女啪啪国产| 中文字幕国产综合| 国产91人| 五月天黄色网| 丰满人妻一区二区三区精品高 | 九色91PORNY国产| 国产色自拍| 日韩成人精品| 一道本无吗一区| 中文字幕日韩高清| 天堂网亚洲| 国内自拍欧美| 欧亚精品视频| 丁香六月婷婷综合| www.国产在线| 91久久精品一区二区三| 欧美BBWBBWBBWBBWBBwBBW | 西西www444无码大胆| 91精东传媒果冻传媒| 欧美一级片在线| 京熱大亂交无碼大亂交| 国产成人精品久久| 成人国产无码| 国产成人高清在线| 丁香六月婷婷久久综合| 91精品人妻一区二区三区蜜桃欧美 | 亚洲视频无码| 国产一区二区无码| 国产精品爽爽久久久久| 最近中文字幕在线中文字幕7| a片视频免费| 国产69AV| 亚州精品成人片| 亚洲精品国产精品乱码视99| 国产拍拍拍| 青青草免费公开视频| 亚洲精品娱乐| 日韩高清在线播放| 午夜福利视频网| 影音先锋av在线资源| 日逼| 三级成人AV| 专肏老妇人大逼| 69成人精品视频| 欧美丝袜脚交xxxxBH| 樱桃av| 91视频播放| 麻豆精品久久久久久久99蜜桃| 一区二区三区成人电影| 不卡的av在线| 国产在线毛片| 精品伊人| 欧美日韩在线视频免费观看| 无码熟妇人妻无码AV在线天堂| 台湾色综合| 有免费的欧美操逼视频吗| 精品乱子伦一区二区三区毛| 亚洲无码高清在线观看视频| 国产精品国产精品国产| 中文字幕色| 五月丁香啪| 中文字幕毛片| 国产一区二区无码| 中文字幕无码在线视频| 中文天堂网| 亚洲女人被黑人巨大进入| 午夜精品久久久久久久| 国产在线观看av| 久久免费视频精品| 小视频+福利| 人人干人人操人人摸| 久操视频在线免费观看| 成人亚洲AV日韩AV无码| 正在播放JUQ-878木下凛凛子 | 丰满人妻一区二区三区蜜桃视频| 噜噜噜av| 天天干中文字幕| 天堂在线中文字幕| 色九| 天天插夜夜操| 婷婷五月天在线播放| 香蕉久久a毛片| 亚洲AV在线免费观看| 欧美老妇另类| 亚洲美女视频| 日韩欧美一级| 在线免费观看黄片| 国产亚洲午夜久久久成人电影| 91大神免费观看| 亚洲视频中文字母| 久久精品综合| 午夜三级视频| 嫩BBB槡BBBB槡BBBB| 日本黄在线看| 久久无码专区| 亚欧在线| 男人天堂大香蕉| 桃色五月天| 无码爱爱视频| 亚洲精品日韩无码| 久久逼逼| 亚洲三级在线| 韩国三级HD中文字幕2019年| 亚洲成人中文字幕在线| 人妖黃色一級A片| 亚洲五月天色| a级片在线观看| 西西444WWW无码大胆知乎|