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

實(shí)時(shí)監(jiān)視同步數(shù)據(jù)庫(kù)變更,這個(gè)框架真是神器

運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維
我們數(shù)據(jù)庫(kù)中的數(shù)據(jù)一直在變化,有時(shí)候我們希望能監(jiān)聽(tīng)數(shù)據(jù)庫(kù)數(shù)據(jù)的變化并根據(jù)變化做出一些反應(yīng),比如更新對(duì)應(yīng)變化數(shù)據(jù)的緩存、增量同步到其它數(shù)據(jù)源、對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和審計(jì)等等。而這種技術(shù)就叫變更數(shù)據(jù)捕獲(Change Data Capture)。

[[403537]]

我們數(shù)據(jù)庫(kù)中的數(shù)據(jù)一直在變化,有時(shí)候我們希望能監(jiān)聽(tīng)數(shù)據(jù)庫(kù)數(shù)據(jù)的變化并根據(jù)變化做出一些反應(yīng),比如更新對(duì)應(yīng)變化數(shù)據(jù)的緩存、增量同步到其它數(shù)據(jù)源、對(duì)數(shù)據(jù)進(jìn)行檢測(cè)和審計(jì)等等。而這種技術(shù)就叫變更數(shù)據(jù)捕獲(Change Data Capture)。對(duì)于這種技術(shù)我們可能知道一個(gè)國(guó)內(nèi)比較知名的框架Canal,非常好用!但是Canal有一個(gè)局限性就是只能用于Mysql的變更數(shù)據(jù)捕獲。今天來(lái)介紹另一種更加強(qiáng)大的分布式CDC框架Debezium。

Debezium

提起Debezium這個(gè)框架,相信大多數(shù)普通開(kāi)發(fā)者都比較陌生,但是提及它所屬的公司大家一定不會(huì)陌生。

紅帽公司

沒(méi)錯(cuò)就是開(kāi)源界最成功的紅帽公司。Debezium是為捕獲數(shù)據(jù)更改的流式處理框架,開(kāi)源免費(fèi)。Debezium近乎實(shí)時(shí)地監(jiān)控?cái)?shù)據(jù)庫(kù)行級(jí)別(row-level)的數(shù)據(jù)變更,并針對(duì)變更可以做出反應(yīng)。而且只有已提交的變更才是可見(jiàn)的,所以不用擔(dān)心事務(wù)問(wèn)題或者更改被回滾的問(wèn)題。Debezium為所有的數(shù)據(jù)庫(kù)更改事件提供了一個(gè)統(tǒng)一的模型,所以不用擔(dān)心每種數(shù)據(jù)庫(kù)系統(tǒng)的復(fù)雜性。Debezium提供了對(duì)MongoDB、MySQL、PostgreSQL、SQL Server、Oracle、DB2等數(shù)據(jù)庫(kù)的支持。

另外借助于Kafka Connector可以開(kāi)發(fā)出一個(gè)基于事件流的變更捕獲平臺(tái),具有高容錯(cuò)率和極強(qiáng)的擴(kuò)展性。

Debezium Kafka 架構(gòu)

如圖所示,部署了用于 MySQL 和 PostgresSQL 的 Debezium Kafka連接器以捕獲對(duì)這兩種類型數(shù)據(jù)庫(kù)的更改事件,然后將這些更改通過(guò)下游的Kafka Connector將記錄傳輸?shù)狡渌到y(tǒng)或者數(shù)據(jù)庫(kù)(例如 Elasticsearch、數(shù)據(jù)倉(cāng)庫(kù)、分析系統(tǒng))或緩存。

另一種玩法就是將Debezium內(nèi)置到應(yīng)用程序中,來(lái)做一個(gè)類似消息總線的設(shè)施,將數(shù)據(jù)變更事件傳遞給訂閱的下游系統(tǒng)中。

Debezium內(nèi)置服務(wù)器架構(gòu)

Debezium對(duì)數(shù)據(jù)的完整性和可用性也是做了不少的工作。Debezium用持久化的、有副本備份的日志來(lái)記錄數(shù)據(jù)庫(kù)數(shù)據(jù)變化的歷史,因此,你的應(yīng)用可以隨時(shí)停止再重啟,而不會(huì)錯(cuò)過(guò)它停止運(yùn)行時(shí)發(fā)生的事件,保證了所有的事件都能被正確地、完全地處理掉。

稍后我會(huì)演示一個(gè)Spring Boot集成Debezium的數(shù)據(jù)捕獲系統(tǒng)。

Spring Boot集成Debezium

理論介紹并不能讓你直觀感受到Debezium的能力,所以接下來(lái)我將使用嵌入式Debezium引擎來(lái)演示一下。

流程圖

如上圖所示,當(dāng)我們變更MySQL數(shù)據(jù)庫(kù)中的某行數(shù)據(jù)時(shí),通過(guò)Debezium實(shí)時(shí)監(jiān)聽(tīng)到binlog日志的變化觸發(fā)捕獲變更事件,然后獲取到變更事件模型,并做出響應(yīng)(消費(fèi))。接下來(lái)我們來(lái)搭建環(huán)境。

MySQL開(kāi)啟binlog日志

為了方便這里使用MySQL的Docker容器,對(duì)應(yīng)的腳本為:

  1. # 運(yùn)行mysql容器  
  2. docker run --name mysql-service -v d:/mysql/data:/var/lib/mysql -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone="+8:00" 
  3. # 設(shè)置binlog位置 
  4. docker exec mysql-service bash -c "echo 'log-bin=/var/lib/mysql/mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf" 
  5. # 配置 mysql的server-id 
  6. docker exec mysql-service bash -c "echo 'server-id=123454' >> /etc/mysql/mysql.conf.d/mysqld.cnf" 

上面的腳本運(yùn)行了一個(gè)用戶名為root、密碼為123456并且將數(shù)據(jù)掛載到本地路徑d:/mysql/data的MySQL容器,同時(shí)開(kāi)啟了binlog日志,并設(shè)置server-id為123454,這些信息后面配置會(huì)用。

請(qǐng)注意如果不使用root用戶的話,需要保證用戶具有SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT四種權(quán)限。

Spring Boot集成嵌入式Debezium

Debezium依賴

Spring Boot的應(yīng)用中加入下列依賴:

  1. <dependency> 
  2.      <groupId>io.debezium</groupId> 
  3.      <artifactId>debezium-api</artifactId> 
  4.      <version>${debezium.version}</version> 
  5.  </dependency> 
  6.  <dependency> 
  7.      <groupId>io.debezium</groupId> 
  8.      <artifactId>debezium-embedded</artifactId> 
  9.      <version>${debezium.version}</version> 
  10.  </dependency> 
  11.  <dependency> 
  12.      <groupId>io.debezium</groupId> 
  13.      <artifactId>debezium-connector-mysql</artifactId> 
  14.      <version>${debezium.version}</version> 
  15.  </dependency> 

目前最新的版本號(hào)為1.5.2.Final。

聲明配置

然后聲明需要的配置:

  1. /** 
  2.      * Debezium 配置. 
  3.      * 
  4.      * @return configuration 
  5.      */ 
  6.     @Bean 
  7.     io.debezium.config.Configuration debeziumConfig() { 
  8.         return io.debezium.config.Configuration.create() 
  9. //            連接器的Java類名稱 
  10.                 .with("connector.class", MySqlConnector.class.getName()) 
  11. //            偏移量持久化,用來(lái)容錯(cuò) 默認(rèn)值 
  12.                 .with("offset.storage""org.apache.kafka.connect.storage.FileOffsetBackingStore"
  13. //                偏移量持久化文件路徑 默認(rèn)/tmp/offsets.dat  如果路徑配置不正確可能導(dǎo)致無(wú)法存儲(chǔ)偏移量 可能會(huì)導(dǎo)致重復(fù)消費(fèi)變更 
  14. //                如果連接器重新啟動(dòng),它將使用最后記錄的偏移量來(lái)知道它應(yīng)該恢復(fù)讀取源信息中的哪個(gè)位置。 
  15.                 .with("offset.storage.file.filename""C:/Users/n1/IdeaProjects/spring-boot-debezium/tmp/offsets.dat"
  16. //                捕獲偏移量的周期 
  17.                 .with("offset.flush.interval.ms""6000"
  18. //               連接器的唯一名稱 
  19.                 .with("name""mysql-connector"
  20. //                數(shù)據(jù)庫(kù)的hostname 
  21.                 .with("database.hostname""localhost"
  22. //                端口 
  23.                 .with("database.port""3306"
  24. //                用戶名 
  25.                 .with("database.user""root"
  26. //                密碼 
  27.                 .with("database.password""123456"
  28. //                 包含的數(shù)據(jù)庫(kù)列表 
  29.                 .with("database.include.list""etl"
  30. //                是否包含數(shù)據(jù)庫(kù)表結(jié)構(gòu)層面的變更,建議使用默認(rèn)值true 
  31.                 .with("include.schema.changes""false"
  32. //                mysql.cnf 配置的 server-id 
  33.                 .with("database.server.id""123454"
  34. //                 MySQL 服務(wù)器或集群的邏輯名稱 
  35.                 .with("database.server.name""customer-mysql-db-server"
  36. //                歷史變更記錄 
  37.                 .with("database.history""io.debezium.relational.history.FileDatabaseHistory"
  38. //                歷史變更記錄存儲(chǔ)位置  
  39.                 .with("database.history.file.filename""C:/Users/n1/IdeaProjects/spring-boot-debezium/tmp/dbhistory.dat"
  40.                 .build(); 
  41.     } 

配置分為兩部分:

  • 一部分是Debezium Engine的配置屬性,參見(jiàn)Debezium Engine配置[1]。
  • 一部分是Mysql Connector的配置屬性,參見(jiàn)Mysql Connector配置[2]。

實(shí)例化Debezium Engine

應(yīng)用程序需要為運(yùn)行的Mysql Connector啟動(dòng)一個(gè)Debezium引擎,這個(gè)引擎會(huì)以異步線程的形式運(yùn)行,它包裝了整個(gè)Mysql Connector連接器的生命周期。聲明一個(gè)引擎需要以下幾步:

聲明收到數(shù)據(jù)變更捕獲信息的格式,提供了JSON、Avro、Protobuf、Connect、CloudEvents等格式。

加載上面定義的配置。

聲明消費(fèi)數(shù)據(jù)更改事件的函數(shù)方法。

聲明的偽代碼:

  1. DebeziumEngine<RecordChangeEvent<SourceRecord>> debeziumEngine = DebeziumEngine.create(ChangeEventFormat.of(Connect.class)) 
  2.         .using(configuration.asProperties()) 
  3.         .notifying(this::handlePayload) 
  4.         .build(); 

handlePayload方法為:

  1. private void handlePayload(List<RecordChangeEvent<SourceRecord>> recordChangeEvents, DebeziumEngine.RecordCommitter<RecordChangeEvent<SourceRecord>> recordCommitter) { 
  2.     recordChangeEvents.forEach(r -> { 
  3.         SourceRecord sourceRecord = r.record(); 
  4.         Struct sourceRecordChangeValue = (Struct) sourceRecord.value(); 
  5.  
  6.         if (sourceRecordChangeValue != null) { 
  7.             // 判斷操作的類型 過(guò)濾掉讀 只處理增刪改   這個(gè)其實(shí)可以在配置中設(shè)置 
  8.             Envelope.Operation operation = Envelope.Operation.forCode((String) sourceRecordChangeValue.get(OPERATION)); 
  9.  
  10.             if (operation != Envelope.Operation.READ) { 
  11.                 String record = operation == Envelope.Operation.DELETE ? BEFORE : AFTER
  12.                 // 獲取增刪改對(duì)應(yīng)的結(jié)構(gòu)體數(shù)據(jù) 
  13.                 Struct struct = (Struct) sourceRecordChangeValue.get(record); 
  14.                 // 將變更的行封裝為Map 
  15.                 Map<String, Object> payload = struct.schema().fields().stream() 
  16.                         .map(Field::name
  17.                         .filter(fieldName -> struct.get(fieldName) != null
  18.                         .map(fieldName -> Pair.of(fieldName, struct.get(fieldName))) 
  19.                         .collect(toMap(Pair::getKey, Pair::getValue)); 
  20.                 // 這里簡(jiǎn)單打印一下 
  21.                 System.out.println("payload = " + payload); 
  22.             } 
  23.         } 
  24.     }); 

引擎的啟動(dòng)和關(guān)閉正好契合Spring Bean的生命周期:

  1. @Data 
  2. public class DebeziumServerBootstrap implements InitializingBean, SmartLifecycle { 
  3.  
  4.     private final Executor executor = Executors.newSingleThreadExecutor(); 
  5.     private DebeziumEngine<?> debeziumEngine; 
  6.  
  7.     @Override 
  8.     public void start() { 
  9.         executor.execute(debeziumEngine); 
  10.     } 
  11.  
  12.     @SneakyThrows 
  13.     @Override 
  14.     public void stop() { 
  15.         debeziumEngine.close(); 
  16.     } 
  17.  
  18.     @Override 
  19.     public boolean isRunning() { 
  20.         return false
  21.     } 
  22.  
  23.     @Override 
  24.     public void afterPropertiesSet() throws Exception { 
  25.         Assert.notNull(debeziumEngine, "debeziumEngine must not be null"); 
  26.     } 

啟動(dòng)

啟動(dòng)該Spring Boot項(xiàng)目,你可以采用各種手段往數(shù)據(jù)庫(kù)增刪改數(shù)據(jù),觀察會(huì)有類似下面的打印:

  1. payload = {user_id=1123213, username=felord.cn, age=11 , gender=0, enabled=1} 

說(shuō)明Debezium監(jiān)聽(tīng)到了數(shù)據(jù)庫(kù)的變更。你可以想想這種技術(shù)在哪些場(chǎng)景有用武之地。好了今天的分享就到這里,感謝大家的支持,我是:碼農(nóng)小胖哥。原創(chuàng)不易,請(qǐng)多多關(guān)注、點(diǎn)贊、轉(zhuǎn)發(fā)、再看。

參考資料

[1]Debezium Engine配置: https://debezium.io/documentation/reference/1.5/development/engine.html#engine-properties

[2]Mysql Connector配置: https://debezium.io/documentation/reference/1.5/connectors/mysql.html#mysql-connector-properties

本文轉(zhuǎn)載自微信公眾號(hào)「碼農(nóng)小胖哥」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)小胖哥公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: 碼農(nóng)小胖哥
相關(guān)推薦

2023-04-18 18:22:31

開(kāi)源工具數(shù)據(jù)庫(kù)

2020-09-21 11:30:28

CanalMySQL數(shù)據(jù)庫(kù)

2022-07-08 10:09:47

SPLSQL數(shù)據(jù)庫(kù)

2010-05-17 14:00:07

MySql數(shù)據(jù)庫(kù)

2020-08-13 07:42:15

數(shù)據(jù)庫(kù)Flyway代碼

2020-08-31 07:00:00

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)同步

2017-05-25 08:52:08

SQL Server數(shù)據(jù)庫(kù)

2019-07-23 10:43:28

MariaDB數(shù)據(jù)庫(kù)MySQL

2019-10-08 15:54:42

SQL數(shù)據(jù)庫(kù)技術(shù)

2025-07-21 07:20:54

開(kāi)源數(shù)據(jù)同步數(shù)據(jù)庫(kù)

2024-05-22 12:07:12

向量數(shù)據(jù)庫(kù)AI

2009-04-22 09:42:07

SQL Server監(jiān)視鏡像

2009-03-25 18:11:57

監(jiān)視鏡像數(shù)據(jù)庫(kù)

2024-10-30 08:15:18

2024-12-06 08:29:29

2011-08-25 13:41:50

SQL Server 變更跟蹤

2010-07-01 15:44:22

SQL Server數(shù)

2025-04-01 08:38:41

2019-08-13 15:52:34

數(shù)據(jù)庫(kù)同步遷移

2010-06-02 16:57:50

MySQL數(shù)據(jù)庫(kù)同步
點(diǎn)贊
收藏

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

日本三级在线视频| 久久久久久久影院| 国产精品三级在线| 久久久久久久久久久影视| 亚洲黄网在线观看| 第一区第二区在线| 国产麻豆91精品| 中文字幕亚洲综合| 国产成人无码一二三区视频| 欧美 日韩 国产 在线| 亚洲精彩视频| 欧美日韩www| 午夜精品福利一区二区| 亚洲va在线观看| 亚洲素人在线| 欧美性猛交xxxx黑人| 国内精品视频免费| 国产成人无码精品久在线观看| 玖玖精品一区| 亚洲视频中文字幕| 92国产精品视频| 国产少妇在线观看| 亚洲一区二区三区四区电影| 一区二区三区中文字幕精品精品| 91美女片黄在线观看游戏| 美国黄色片视频| 国产精品99久久免费| 亚洲同性同志一二三专区| 久久久99爱| 欧美超碰在线观看| 亚洲二区视频| 亚洲人成电影网站色xx| 天天色综合社区| 国产日产一区二区三区| 东方欧美亚洲色图在线| 午夜精品久久久久久久99热| 亚洲天堂美女视频| 裤袜国产欧美精品一区| 国产精品三级视频| 亚洲tv在线观看| 亚洲高清在线看| 五月精品视频| 欧美成人猛片aaaaaaa| aa视频在线播放| 毛片免费在线| 狠狠色丁香婷婷综合| 久久久免费电影| 非洲一级黄色片| 警花av一区二区三区| 欧美日本在线播放| 91插插插插插插插插| 91p九色成人| 一区二区三区日本| 精品麻豆av| 中文无码av一区二区三区| 亚洲国产精品91| www.亚洲一区| 无码人妻精品一区二区三区温州 | 一区二区三区我不卡| 国产内射老熟女aaaa∵| 一本色道久久综合| 视频直播国产精品| 中文字幕天堂av| 日本少妇一区| 亚洲一二三区不卡| 四虎影视永久免费在线观看一区二区三区| 手机亚洲第一页| 国产米奇在线777精品观看| 久久频这里精品99香蕉| 久草视频精品在线| 日本久久精品| 日韩精品在线观看视频| 久久综合桃花网| 在线成人视屏| 五月激情综合色| 婷婷视频在线播放| 嫩草在线播放| 国产乱人伦精品一区二区在线观看 | 992在线观看| 超碰成人福利| 欧美日韩亚州综合| 日韩av在线第一页| 中文在线免费| 最新国产の精品合集bt伙计| 你懂的视频在线一区二区| а√天堂资源在线| 久久99精品国产91久久来源| 国产成人av在线播放| 国产精品第一页在线观看| 亚洲黄色毛片| 色综合视频网站| 2025国产精品自拍| 日韩一区电影| 永久免费毛片在线播放不卡| 中文字幕在线观看网址| 成人在线免费观看网站| 九九久久精品一区| 亚洲色婷婷一区二区三区| 国产精品久久久久久麻豆一区软件 | 亚洲深夜福利| 色综合老司机第九色激情| 天天综合天天干| 在线观看日韩av电影| 国产成人av网| 欧美在线精品一区二区三区| 亚洲国产成人私人影院tom| 欧美一区二区三区成人久久片| 囯产精品一品二区三区| 风流少妇一区二区| 不卡一区二区三区视频| www.爱爱.com| 国产网站一区二区三区| 日本午夜精品电影| 欧美人与性动交α欧美精品图片| 亚洲欧美日韩一区二区| 国产网站免费在线观看| 精品国产18久久久久久二百| 亚洲欧美日韩网| 欧美激情aaa| 国产一区二区三区四区五区| 一本一道久久a久久精品逆3p| 精品99在线观看| 激情欧美日韩| 91精品视频免费| 国产精品四虎| 中文字幕欧美一| av片中文字幕| 牛牛精品成人免费视频| 亚洲乱码一区av黑人高潮| 69av.com| 韩国女主播成人在线观看| 日日骚一区二区网站| 岛国在线视频网站| 在线日韩国产精品| 91亚洲精品久久久蜜桃借种| 国产亚洲高清一区| 伊人一区二区三区久久精品| 日韩中文字幕在线观看视频| 99久久久久久| 日韩一区国产在线观看| 久久久久久国产精品免费无遮挡 | 欧美国产日本视频| 日韩 欧美 高清| 欧美爱爱视频| 精品日韩在线一区| 久久久精品视频免费观看| 国精产品一区一区三区mba桃花| 特级西西444www大精品视频| 国产亚洲一区二区手机在线观看| 亚洲欧洲日产国产网站| www.com亚洲| 日本一区二区视频在线观看| 久久久99精品视频| 欧美二三四区| 日韩欧美国产系列| 无码一区二区三区在线| 天堂久久久久va久久久久| 91亚洲精品久久久久久久久久久久| av在线三区| 亚洲成人一区二区在线观看| 一本岛在线视频| 97精品国产| 欧美亚洲在线视频| 国产丰满果冻videossex| 久久久午夜精品| 日韩亚洲欧美一区二区| avtt综合网| 91精品国产色综合久久不卡98| 中文字幕人妻一区二区三区视频| 国产欧美日韩麻豆91| 91亚洲精品久久久蜜桃借种| 午夜精品久久| 国产精品美女主播| 黄网页在线观看| 精品成a人在线观看| 亚洲欧洲综合网| 国产精品一区二区三区乱码 | 中文字幕第24页| 影音先锋亚洲电影| 欧美精品v日韩精品v国产精品| 国产婷婷视频在线| 亚洲成色www8888| 免费一级黄色大片| 91日韩在线专区| 久青草视频在线播放| 婷婷久久免费视频| 亚洲桃花岛网站| 国产精品毛片一区视频播| 欧美高清在线视频| 中文字幕第三区| 午夜一级在线看亚洲| 国产精品一区视频网站| 成人免费看片| 欧美一区二区视频在线观看2022 | 亚洲视频狠狠干| 亚洲成人av免费在线观看| 欧美黄在线观看| 久久精品ww人人做人人爽| 久久天堂影院| 97色在线视频| 国产原创精品视频| 亚洲欧洲在线观看| 亚洲精品国产手机| 亚洲午夜视频在线观看| 亚洲国产日韩一区无码精品久久久| 99视频精品| 中文字幕一区二区三区在线乱码| 国产人妖ts一区二区| 成人av电影天堂| 麻豆免费在线视频| 欧美一区二区三区日韩视频| 精品人妻一区二区三区免费看 | 91久久国产综合久久91| 一区二区三区在线播| 国产第一页精品| 麻豆精品视频在线观看免费| 亚洲ai欧洲av| 日韩有码一区| 国产精品99久久久久久白浆小说| 在线电影福利片| 久久精品视频导航| 不卡视频免费在线观看| 欧美日韩一级二级| 中文字幕日韩免费| 欧美日韩中文字幕| 日韩成人高清视频| 久久久99久久精品欧美| 美女久久久久久久久| 国产精品一区免费在线观看| 久久人人爽av| 日本中文字幕不卡| 看全色黄大色大片| 欧美美女黄色| 国产欧美在线一区二区| 亚洲福利合集| 日本精品免费观看| 免费av在线网址| 在线视频国产日韩| 国产精品视频一区二区久久| 亚洲视频在线观看| 国产精品久久久久久久龚玥菲| 亚洲精品丝袜日韩| 免费在线黄色电影| 亚洲欧美日韩国产中文| 免费一级在线观看播放网址| 亚洲人成网站免费播放| 韩日在线视频| 欧美成人激情免费网| av免费观看网址| 日韩久久久久久| 后入内射欧美99二区视频| 欧美精品一区二区三区视频| 日韩一级在线播放| 亚洲精品一区二区久| 加勒比一区二区三区在线| 亚洲无av在线中文字幕| 亚洲国产欧美另类| 欧美成人精精品一区二区频| 日韩一级中文字幕| 亚洲人线精品午夜| 91大神在线网站| 亚洲国产天堂久久国产91| 在线观看亚洲国产| 欧美日韩国产一中文字不卡| 久久精品亚洲a| 亚洲欧美日本在线| 大又大又粗又硬又爽少妇毛片| 久久综合久久综合九色| 欧美熟妇精品一区二区| 七七婷婷婷婷精品国产| 向日葵污视频在线观看| 噜噜噜在线观看免费视频日韩| 成人午夜视频免费观看| 亚洲国内精品| 成人一级片网站| 久久精品免费看| 国内自拍偷拍视频| 久久精品视频免费| 午夜精品一区二区三区视频| 亚洲一区二区在线观看视频| 天堂网视频在线| 欧美精品久久一区| 精品人妻一区二区三区免费看| 色婷婷综合久久久久中文一区二区| 免费无遮挡无码永久在线观看视频| 偷拍亚洲欧洲综合| 在线播放一级片| 精品美女一区二区| 丁香婷婷在线| 欧美黑人xxxx| 成人av色网站| 国产精品一区二区a| 日本a级不卡| 五月丁香综合缴情六月小说| 美国毛片一区二区三区| 丰满岳乱妇一区二区| 国产精品久久看| 精品美女久久久久| 黄网动漫久久久| 一区二区三区精| 欧美日韩另类一区| 日本xxxx人| 久久精品国产亚洲精品| 中文字幕人成乱码在线观看| 91tv亚洲精品香蕉国产一区7ujn| 成人一级视频| 久久久久久a亚洲欧洲aⅴ| 亚洲一区色图| 妺妺窝人体色www看人体| 日韩精品视频网站| 亚洲一级片网站| 99国产一区二区三精品乱码| 五级黄高潮片90分钟视频| 久久青草欧美一区二区三区| 欧美成欧美va| 欧美精品乱码久久久久久| 成年在线电影| 欧美在线视频网| 国产精品久久久久久久久免费高清 | 欧美激情精品久久久久久免费印度 | 欧美性猛交xxxx偷拍洗澡| 性做久久久久久久| 久久亚洲国产精品| 性欧美1819sex性高清大胸| 欧美劲爆第一页| 国产日韩在线观看视频| 尤物国产精品| 美女久久久精品| 91人妻一区二区三区| 国产三级一区二区| 区一区二在线观看| 亚洲美女又黄又爽在线观看| 日韩脚交footjobhd| 国产精品美女av| 神马电影久久| avove在线观看| 另类调教123区| 色婷婷粉嫩av| 欧美精品日日鲁夜夜添| 色网站免费在线观看| 国产欧美久久一区二区| 99精品在免费线中文字幕网站一区| 日韩最新中文字幕| 国产一区二区美女诱惑| 天天操夜夜操av| 欧美一区二区三区四区五区 | 午夜影院免费版| 亚洲精品乱码久久久久久久久 | 风流少妇一区二区| 国产精品第二十页| 日韩精品亚洲元码| 伊人久久国产| 五月天亚洲综合小说网| 日韩国产欧美三级| 久久噜噜色综合一区二区| 这里只有精品免费| 污污网站免费在线观看| 中文字幕久热精品视频在线| 国产成人77亚洲精品www| 杨幂一区欧美专区| 国产精品日韩| 亚洲黄色小说视频| 欧美日韩国产天堂| 色呦呦在线播放| 久久久久久久久久久久久久一区| 亚洲综合三区| 亚洲精品国产精品国自| 88在线观看91蜜桃国自产| 在线中文字幕-区二区三区四区| 草莓视频一区| 久久精品女人天堂| 国产喷水在线观看| 精品国产网站在线观看| 欧美一区国产| 97精品国产97久久久久久粉红| 丰满岳乱妇一区二区三区| 欧美h在线观看| 久久久久北条麻妃免费看| 国产成人一二片| 爱情岛论坛亚洲首页入口章节| 亚洲品质自拍视频| 亚洲三级黄色片| 国产中文字幕亚洲| 精品视频99| 国产成人亚洲精品无码h在线| 欧美国产日韩a欧美在线观看| 精品人妻少妇AV无码专区 | 青青视频免费在线| 九九久久精品视频| 动漫精品一区一码二码三码四码| 亚洲欧美日韩网| silk一区二区三区精品视频| aaa毛片在线观看| 亚洲在线免费播放| www.色婷婷.com| 国产精品第100页| 欧美色图激情小说| 精品熟女一区二区三区| 欧美日韩一区二区在线观看 | 天天综合网91|