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

Kafka 遷移工具 MirrorMaker2 原理起底

開發 架構
負載均衡方式會引起比較明顯的驚群效應,比如在 Kafka Connect 集群擴縮容的時候,不是新擴縮容的節點也會出現較長的 stop-the-world 問題,在 K8s 環境中如果有節點需要進行滾動升級,也會出現類似的問題。這種負載均衡方式在 Kafka 中稱之為 Eager Rebalance。

注意:本文內容截止到 2024 年 2 月 26 日發布的 Kafka 3.7.0 版本。

MirrorMaker2(后文簡稱 MM2)在 2019 年 12 月隨 Kafka 2.4.0 一起推出。顧名思義,是為了解決 Kafka 集群之間數據復制和數據同步的問題而誕生的 Kafka 官方的數據復制工具。在實際生產中,經常被用來實現 Kafka 數據的備份,遷移和災備等目的。

在此也預告一下,AutoMQ 基于 MM2 的遷移產品化功能也即將和大家見面,可以幫助用戶更好更快從自建 Kafka 遷移到 AutoMQ,歡迎大家屆時使用。

1、 安裝部署 

MM2 一共有三種部署模式,dedicated mode,standalone mode 和 Kafka connect mode。

部署模式

Dedicated mode

直接部署 Kafka MM2,啟動命令如下:

./bin/connect-mirror-maker.sh connect-mirror-maker.properties

此時 MM2 依然是基于 Kafka Connect,對外封裝掉了 Kafka Connect 的復雜度,與此同時也支持分布式部署。One-line 直接拉起 MM2 以及背后的 Kafka Connect,不過相比較來說也喪失掉了一些 Kafka Connect 的靈活性(閹割了 Kafka Connect 對外的 RESTful API)。

Standalone mode

Standalone mode 更像是為測試環境設計的,并不支持分布式部署。這一點在 KIP-382[1] 中也有說明。因為不是一個生產可用的版本,在此不作多贅述。

Kafka Connect mode

此時整個 MM2 的部署是需要一個現成的 Kafka Connect 集群的,MM2 會在 Kafka Connect 上部署自己的 Connector 來完成整個遷移過程。因為 Kafka Connect mode 是 MM2 最復雜的部署模式,而且無論是 Dedicated mode 還是 Kafka Connect mode,背后的原理都是一樣,只是前者進行了封裝,因此了解 MM2 在 Kafka Connect 上的工作流程最有利于我們對 MM2 有全局了解。

Kafka Connect 在 Kafka 0.9.0 版本中進行推出,旨在簡化數據集成和數據流管道的構建,同時提供了一種可拓展,可靠的方式來連接 Kafka 與外部系統。基于這樣的設計,MM2 基于 Kafka Connect 進行實現是非常自然的事情。

我們可以把基于 Kafka Connect mode 進行部署的 MM2 里的調度資源分為以下幾種:

? Worker:一個 MM2 或者 Kafka Connect 進程,是進行分布式部署時的基本單位。

? Connector:單個 Worker 內部執行遷移任務的連接器,一個 Worker 內可以有多個 Connector,每個 Connector 負責相對獨立的功能。

? Task:Connector 將需要遷移的任務進行切分,Task 是并發執行的最小單位。

Kafka Connect 集群

在 Kafka Connect Mode 下,我們需要先準備一個 Kafka Connect 集群,在每個節點上執行以下命令即可啟動 Kafka Connect 集群。

./bin/connect-distributed.sh config/connect-distributed.properties

在 Kafka Connect 集群部署完成之后,我們可以利用 Kafka Connect 提供的 RESTful API 來啟動 MM2 所需要的所有 Connectors。默認情況下,Kafka Connect 提供的端口為 8083。即使 Kafka Connect 集群中有多個節點,但是執行下列的命令只需要向集群中的任一節點發起請求即可。

Connector

假設節點 IP 為本機,啟動三個 Connector 的命令如下(實際上向當前 Kafka Connect 集群中的任一節點發起請求即可):

# MirrorSourceConnector
curl -X POST -H "Content-Type: application/json" --data @mirror-source-connector.properties http://127.0.0.1:8083/connectors
# MirrorCheckpointConnector
curl -X POST -H "Content-Type: application/json" --data @mirror-checkpoint-connector.properties http://127.0.0.1:8083/connectors
# MirrorHeartbeatConnector
curl -X POST -H "Content-Type: application/json" --data @mirror-heartbeat-connector.properties http://127.0.0.1:8083/connectors

其中 mirror-source-connector.properties,mirror-checkpoint-connector.properties 和 mirror-heartbeat-connector.properties 為對應 Connector 的配置文件。

在啟動完 Connector 之后,我們還可以使用以下命令查看當前 Kafka Connect 集群中已經存在的 Connectors。

$ curl http://127.0.0.1:8083/connectors
["mm2-heartbeat-connector","mm2-source-connector","mm2-checkpoint-connector"]%

更多關于 Kafka Connect RESTful API 的細節,可以參考 Kafka Connect 101: Kafka Connect's REST API[2]。

2、工作流   

從上文可以看到,在 MM2 中,有三個 Connector,它們負責完成整個副本復制過程,這三個 Connector 包括:

? MirrorSourceConnector:同步源集群中 topic 的消息數據到目標集群。

? MirrorCheckpointConnector:將源集群的消費位點翻譯并同步到目標集群。

? MirrorHeartbeatConnector:定時往源集群中發送心跳,驗證和監控兩個集群之間連接和遷移任務的運行情況。

對于 MirrorSourceConnector 和 MirrorCheckpointConnector 提供有 JMX 監控信息,可以幫助對遷移進度和遷移健康狀況有全局了解。

MM2 會創建以下幾種 Topic(除 heartbeats 之外,所有的 Topic 都會被創建在 target 集群上):

? connect-configs:存儲 MM2 中 connector 的配置信息。

? connect-offsets:存儲 MM2 中 MirrorSourceConnector 和 MirrorCheckpointConnector 的消費位點。

? connect-status:存儲 MM2 中 connector 的狀態信息。

? mm2-offset-syncs.A.internal:存儲消息在源集群和目標集群之間同步的 offset 映射信息(即 OffsetSync 消息)用于消費位點翻譯。此 Topic 中的消息由 MirrorSourceConnector 發出(Topic 名中 A 表示源集群的 alias)。

? A.checkpoints.internal:存儲 GroupId 同步的消費進度。具體存儲的信息包括 GroupId,Partition 以及在源集群和目標集群的消費位點,此 Topic 中的信息由 MirrorCheckpointConnector 發出(Topic 名中 A 表示源集群的 alias)。

? heartbeats:定期往源集群發送心跳消息,這部分消息會被同步到目標集群。此 Topic 中的消息體主要存儲簡單的時間戳信息,其中的消息由 MirrorHeartbeatConnector 發出。

想要了解具體的 MM2 工作流,弄清楚 mm2-offset-syncs.A.internal 和 A.checkpoints.internal 兩個 Topic 的作用尤為關鍵。

圖片圖片

消息同步與位點映射

MirrorSourceConnector 會從最早位點開始同步消息。在同步消息時會生成 OffsetSync 消息。OffsetSync 消息中記錄了被同步的消息的分區信息,在源集群和目標集群上的位點映射信息。

記錄在 OffsetSync 消息中的位點映射信息是非常必要的,首先一條消息從源集群被同步到目標集群上,前后的 offset 大概率是不同的,而且還有可能會出現消息重復和多個源集群的 topic 被同步到一個目標 topic 上的情況,而位點映射能最大程度上幫助我們將源集群的消息和目標集群的消息對應上。

這個 OffsetSync 消息就被存儲在 mm2-offset-syncs.A.internal 中。但是并不是每同步一條消息就會生成一個 OffsetSync 消息。默認情況下每隔 100 條消息就會生成一個 OffsetSync 消息,這里的參數可以使用 offset.lag.max 來進行調節。關于 OffsetSync 消息的同步判斷,可以參照 org.apache.kafka.connect.mirror.MirrorSourceTask.PartitionState#update 的具體實現細節。

位點翻譯

MirrorCheckpointConnector 則會執行具體的位點翻譯工作,它會消費 mm2-offset-syncs.A.internal 中的 OffsetSync 消息,然后將源集群上的消費位點翻譯成目標集群上的消費位點并執行 alterConsumerGroupOffsets 方法來重置消費者位點。

因為 OffsetSync 沒有按照時間間隔同步的邏輯,導致的結果就是當前分區最新的消息位點距離上一次同步的位點如果沒有超過 100,則不會生成新的 OffsetSync。而 MirrorCheckpointConnector 是根據 OffsetSync 中的消息位點來同步消費進度的,這樣的結果就是目標集群的消費位點基本上不可能被完全同步,最多相比較于源集群會回退 100 個位點。但是在 3.7.0 以及之后的版本中,對 OffsetSync 增加了按照時間同步的兜底邏輯,使得這個問題得到了解決[3]。

詳細來說,如果當前消息距離之前的 OffsetSync 中的最新消息沒有超過 100 個 offset,但是已經有一段時間沒有進行過 OffsetSync 消息的同步了,也會強行進行一次 OffsetSync 消息的同步(由 offset.flush.internal.ms 參數控制,默認為 10S)。

圖片圖片

可以通過以下命令方便地查看 OffsetSync 消息的內容。

$ ./bin/kafka-console-consumer.sh --formatter "org.apache.kafka.connect.mirror.formatters.OffsetSyncFormatter" --bootstrap-server 127.0.0.1:9592 --from-beginning --topic mm2-offset-syncs.A.internal
OffsetSync{topicPartitinotallow=heartbeats-0, upstreamOffset=0, downstreamOffset=0}
OffsetSync{topicPartitinotallow=test-0-0, upstreamOffset=0, downstreamOffset=0}
OffsetSync{topicPartitinotallow=test-0-0, upstreamOffset=101, downstreamOffset=101}
OffsetSync{topicPartitinotallow=heartbeats-0, upstreamOffset=2, downstreamOffset=2}

針對 MM2 中的 HeartbeatConnector,更多的時候則是起到一個觀測當前 MM2 集群同步狀況的作用。使用以下命令可以查看 HeartbeatTopic 的內容。

$ ./bin/kafka-console-consumer.sh --formatter "org.apache.kafka.connect.mirror.formatters.HeartbeatFormatter"  --bootstrap-server 127.0.0.1:9092 --from-beginning --topic heartbeats --property print.key=true
Heartbeat{sourceClusterAlias=A, targetClusterAlias=B, timestamp=1712564822022}
Heartbeat{sourceClusterAlias=A, targetClusterAlias=B, timestamp=1712564842185}
Heartbeat{sourceClusterAlias=A, targetClusterAlias=B, timestamp=1712564862192}
Heartbeat{sourceClusterAlias=A, targetClusterAlias=B, timestamp=1712564882197}
Heartbeat{sourceClusterAlias=A, targetClusterAlias=B, timestamp=1712564902202}

這里每 20 秒會生成一條心跳消息,心跳消息包含一條當時的時間戳。這樣通過在目標集群查看被同步過來的 heartbeat Topic 中的消息,即可查看當前消息同步狀況。

3、負載均衡 

在 Kafka Connect 中,一個獨立的 Kafka Connect 進程我們稱之為一個 worker。在分布式環境下,相同 group.id 的一組 worker 就形成了一個 Kafka Connect 集群。

盡管在負載均衡的過程中,Connector 和 Task 都會參與,但是 Connector 和 Task 并不是正交的。Task 從屬于 Connector。Connector 參與負載均衡只是表示具體的 Connector 類中的邏輯會在哪個 worker 中執行。具體的實現邏輯可以參照 EagerAssigner#performTaskAssignment 中的內容:

private Map<String, ByteBuffer> performTaskAssignment(String leaderId, long maxOffset,
                                                      Map<String, ExtendedWorkerState> memberConfigs,
                                                      WorkerCoordinator coordinator) {
    // 用于記錄 Connector 分配結果
    Map<String /* member */, Collection<String /* connector */>> connectorAssignments = new HashMap<>();
    // 用于記錄 Task 分配結果
    Map<String /* member */, Collection<ConnectorTaskId>> taskAssignments = new HashMap<>();


    List<String> connectorsSorted = sorted(coordinator.configSnapshot().connectors());
    // 使用一個環形迭代器,將 connector 和 task 分別分配給不同的 worker
    CircularIterator<String> memberIt = new CircularIterator<>(sorted(memberConfigs.keySet()));
    // 先分配 Connector
    for (String connectorId : connectorsSorted) {
        String connectorAssignedTo = memberIt.next();
        log.trace("Assigning connector {} to {}", connectorId, connectorAssignedTo);
        Collection<String> memberConnectors = connectorAssignments.computeIfAbsent(connectorAssignedTo, k -> new ArrayList<>());
        memberConnectors.add(connectorId);
    }
    // 在分配具體的 Task,延續 member 迭代器中的順序
    for (String connectorId : connectorsSorted) {
        for (ConnectorTaskId taskId : sorted(coordinator.configSnapshot().tasks(connectorId))) {
            String taskAssignedTo = memberIt.next();
            log.trace("Assigning task {} to {}", taskId, taskAssignedTo);
            Collection<ConnectorTaskId> memberTasks = taskAssignments.computeIfAbsent(taskAssignedTo, k -> new ArrayList<>());
            memberTasks.add(taskId);
        }
    }
    // 序列化分配結果并返回
    ......
}

下圖展示了有 3 個 Worker,1 個 Connector 以及 5 個 Task 時以及 Worker2 宕機前后的負載均衡情況。

圖片圖片

不過這種負載均衡方式會引起比較明顯的驚群效應,比如在 Kafka Connect 集群擴縮容的時候,不是新擴縮容的節點也會出現較長的 stop-the-world 問題,在 K8s 環境中如果有節點需要進行滾動升級,也會出現類似的問題。這種負載均衡方式在 Kafka 中稱之為 Eager Rebalance。

后面 Kafka 提出了 Incremental Cooperative Rebalance[4],引入了一個延遲時間延后 rebalance 的過程。進行了這樣的改進之后,當出現節點滾動升級時,負載均衡就不會馬上發生,因為被升級的節點可能很快就回歸了,之前負載均衡的結果也能最大限度得到保留,對整體消息同步流程的影響也盡可能降到了最低。相比較來說,Eager Rebalance 可以很快就達到負載均衡的終態,而 Incremental Cooperative Rebalance 則可以最大程度上降低滾動升級等場景下對負載均衡帶來的全局影響。

參考資料

[1] KIP-382: MirrorMaker 2.0

https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0

[2] COURSE: KAFKA CONNECT 101 Kafka Connect’s REST API

https://developer.confluent.io/courses/kafka-connect/rest-api/

[3] KAFKA-15906

https://issues.apache.org/jira/browse/KAFKA-15906

[4] Incremental Cooperative Rebalancing in Kafka Connect

https://cwiki.apache.org/confluence/display/KAFKA/KIP-415%3A+Incremental+Cooperative+Rebalancing+in+Kafka+Connect

[5] KIP-415: Incremental Cooperative Rebalancing in Kafka Connect

https://cwiki.apache.org/confluence/display/KAFKA/KIP-415%3A+Incremental+Cooperative+Rebalancing+in+Kafka+Connect

[6] KIP-545: support automated consumer offset sync across clusters in MM 2.0

https://cwiki.apache.org/confluence/display/KAFKA/KIP-545%3A+support+automated+consumer+offset+sync+across+clusters+in+MM+2.0

[7] KIP-656: MirrorMaker2 Exactly-once Semantics

https://cwiki.apache.org/confluence/display/KAFKA/KIP-656%3A+MirrorMaker2+Exactly-once+Semantics

責任編輯:武曉燕 來源: AutoMQ
相關推薦

2020-09-13 13:26:10

Kafka消費者控制器

2021-07-06 07:02:41

Vue 2 Vite 開發工具

2022-04-20 11:41:45

Kafka數據解決方案

2025-09-05 07:35:28

2011-07-15 10:01:02

Active DireADMT

2010-03-29 15:42:33

遷移工具

2014-09-05 10:16:39

(ISC)2CISSP安全考試CISSP考試

2021-04-09 08:54:14

Kafka源碼架構開發技術

2021-06-09 10:29:23

Kafka架構組件

2015-07-02 14:15:28

云遷移應用重構頭號難題

2023-06-07 15:25:19

Kafka版本日志

2024-10-30 10:06:51

2009-05-11 19:03:10

BMCBSM自動化

2021-12-07 07:32:09

kafka架構原理

2023-09-27 12:22:50

Kafka架構

2021-06-16 15:18:03

鴻蒙HarmonyOS應用

2012-09-12 10:35:51

Hyper-V

2019-09-16 12:55:27

HBaseKafka數據

2024-07-03 08:19:56

2021-08-30 15:41:13

Kafka運維數據
點贊
收藏

51CTO技術棧公眾號

911福利视频| 一区二区三区四区| 不卡av电影在线| 久久人人99| 日韩欧美国产不卡| 国产精品第12页| 国产福利视频在线观看| www.久久久久久久久| 国产精品久久色| 亚洲综合视频网站| 怕怕欧美视频免费大全| 日韩一区二区麻豆国产| 日本熟妇人妻xxxxx| 在线播放免费av| 国产精品日产欧美久久久久| 国产成人成网站在线播放青青 | 一区二区国产视频| 欧美日韩综合网| 亚洲精品无amm毛片| 蜜臀久久久久久久| 91sao在线观看国产| 日韩在线中文字幕视频| 精品九九在线| 日韩精品在线观看网站| 国产精品二区视频| 欧美亚洲黄色| 欧美视频一区二区| av免费观看大全| 亚洲丝袜一区| 最新日韩av在线| 亚洲欧美日本国产有色| 黄色片视频在线观看| 成人av午夜电影| y111111国产精品久久婷婷| 在线观看免费黄色小视频| 久久激情综合| 日本欧美中文字幕| 日韩欧美不卡视频| 亚洲国产一区二区三区高清 | 97超碰免费在线| 一区二区三区日韩欧美精品 | 国产精品人人爽人人做我的可爱| 久久91精品国产| 国产美女久久久久久| 色婷婷亚洲mv天堂mv在影片| 国产亚洲xxx| 久久精品国产亚洲av麻豆| 风间由美性色一区二区三区四区| 制服丝袜亚洲色图| 亚洲老女人av| 国产精品久久久久久久久久齐齐| 欧美丝袜美女中出在线| 成人网站免费观看入口| 欧美午夜大胆人体| 亚洲精品国产精品乱码不99| 亚洲午夜高清视频| 91欧美在线视频| 国产精品久久久久久亚洲毛片| 奇米影视首页 狠狠色丁香婷婷久久综合| 五月婷婷深深爱| 91丨porny丨国产| 国产一区二区无遮挡| 熟妇人妻系列aⅴ无码专区友真希| 国产精品888| www.久久艹| 四虎在线视频免费观看| 99v久久综合狠狠综合久久| 久久精品国产第一区二区三区最新章节| 天堂网在线播放| 久久亚洲精品国产精品紫薇 | 一二三区不卡| 欧美日韩国产第一页| 久一视频在线观看| 一区三区视频| 91av在线播放| 老熟妇一区二区三区| 老司机精品视频导航| 91精品国产综合久久男男| 国产sm主人调教女m视频| 国产aⅴ综合色| 蜜桃视频在线观看91| 在线免费av网站| 一区二区久久久久久| aa在线免费观看| 综合久久av| 亚洲第一在线视频| 日韩欧美黄色网址| 欧美另类亚洲| 国产精品精品视频一区二区三区| 92久久精品一区二区| 成人黄页毛片网站| 午夜精品一区二区在线观看| 污污视频在线| 欧洲色大大久久| 午夜影院福利社| 久久国产电影| 午夜精品久久久久久久99热| 自拍偷拍色综合| 风间由美一区二区三区在线观看| 日本一区二区三区精品视频| 成人在线免费公开观看视频| 国产精品毛片久久久久久久| 亚洲美免无码中文字幕在线 | 精品国产乱码久久久久软件| 成人福利在线| 亚洲18色成人| 一级黄色大片儿| 教室别恋欧美无删减版| 色与欲影视天天看综合网| 日日夜夜操视频| 国产成人av电影在线| 午夜精品区一区二区三| 91超碰在线播放| 69av一区二区三区| 免费a级黄色片| 你懂的视频一区二区| 国产精品91久久久久久| 日本精品一二区| 亚洲免费大片在线观看| 久久国产精品国产精品| 欧美理伦片在线播放| 久久天天躁狠狠躁老女人| 久久一区二区三区视频| 国产精品原创巨作av| 日本不卡一区二区三区视频| 久久香蕉av| 91精品国产高清一区二区三区 | 亚洲日产av中文字幕| 久久久久五月天| av中文在线观看| 国产精品国产a| 国产精品69页| 日韩三级av| 久久免费视频观看| 99久久免费国产精精品| 中文字幕成人网| 噼里啪啦国语在线观看免费版高清版| 丁香综合av| 久久全国免费视频| 亚洲国产精品久久久久爰性色| 国产精品久久久久久久第一福利| 日本va中文字幕| 国产最新精品| 国产精品美女无圣光视频| 久久手机免费观看| 91传媒视频在线播放| 亚洲av综合一区二区| 久久综合亚州| 日本一区二区在线| 精品欧美一区二区三区在线观看| 亚洲石原莉奈一区二区在线观看| 亚洲影院在线播放| 国产偷v国产偷v亚洲高清| 日本三区在线观看| 日韩av片子| 91免费欧美精品| 18+视频在线观看| 精品国产欧美一区二区| 国产对白videos麻豆高潮| 北岛玲一区二区三区四区| 91专区在线观看| 国产永久精品大片wwwapp| 国产精品日韩久久久久| 欧美边添边摸边做边爱免费| 欧美一区二区女人| 国产污片在线观看| 久久久久国产精品厨房| 性chinese极品按摩| 99久久影视| 国产精品初高中精品久久| 91高清视频在线观看| 亚洲一区第一页| 91成人在线免费| 亚洲高清三级视频| www.黄色在线| 国产成都精品91一区二区三| 午夜免费福利小电影| 欧州一区二区| 亚洲iv一区二区三区| 女厕盗摄一区二区三区| 中文字幕av日韩| 高清乱码毛片入口| 在线视频国产一区| 精国产品一区二区三区a片| 97精品超碰一区二区三区| 簧片在线免费看| 国产一区日韩欧美| 日本一区二区三不卡| 欧洲大片精品免费永久看nba| 欧美亚洲视频一区二区| 最近高清中文在线字幕在线观看| 日韩欧美专区在线| 看黄色一级大片| 一区二区三区四区中文字幕| 97超碰在线资源| 国产精品888| 在线看国产日韩| 一区一区视频| 亚洲一区网址| 国产精品自拍偷拍| 蜜桃麻豆av在线| 欧美老少配视频| p色视频免费在线观看| 欧美精品一区二区三区高清aⅴ| 无码人妻精品一区二| 亚洲综合一区在线| 美国精品一区二区| 久久久精品天堂| 成熟妇人a片免费看网站| 麻豆精品视频在线| 可以免费在线看黄的网站| 国产综合激情| 性生活免费观看视频| 精品盗摄女厕tp美女嘘嘘| 国产精品免费一区二区三区观看| 青青草国产一区二区三区| 日韩av免费在线观看| 国产乱妇乱子在线播视频播放网站| 中文字幕精品久久| 黄色片在线播放| 日韩精品在线视频| 少妇高潮一区二区三区99小说| 欧美一级片免费看| 亚洲一级特黄毛片| 欧美性大战久久| 五月天激情四射| 欧美色道久久88综合亚洲精品| 清纯粉嫩极品夜夜嗨av| 中文字幕欧美一| 欧美视频一区二区在线| 国产日本欧美一区二区| 无码h肉动漫在线观看| 99亚偷拍自图区亚洲| 91传媒理伦片在线观看| 粉嫩一区二区三区性色av| 无码人妻一区二区三区在线视频| 极品少妇一区二区| 一起操在线视频| 精品一区二区三区久久| 999在线精品视频| 理论电影国产精品| 最新av免费在线观看| 美女一区二区三区在线观看| 日本超碰在线观看| 久久99日本精品| 91亚洲一区二区| 国产福利一区二区| 制服丝袜av在线| 99视频有精品| 亚洲精品成人无码| 欧美激情一区二区三区不卡| 一级二级黄色片| 亚洲视频精选在线| 国产成人无码aa精品一区| 亚洲综合一区二区| 日韩精品久久久久久久酒店| 精品国产1区2区| 中文字幕免费观看| 欧美日韩国产123区| 国产情侣激情自拍| 精品乱码亚洲一区二区不卡| 天堂中文资源在线观看| 亚洲欧美综合v| 日本www在线观看视频| 欧美成人合集magnet| hd国产人妖ts另类视频| 欧洲美女7788成人免费视频| 国产福利一区二区三区在线播放| 91精品视频在线播放| 99re热精品视频| 欧美日韩综合另类| 天天做天天爱天天综合网2021| 日本大片免费看| 久久av最新网址| 九一精品久久久| yourporn久久国产精品| 一级特黄曰皮片视频| 一区二区三区精品久久久| 你懂的国产在线| 欧美裸体bbwbbwbbw| 女人18毛片水真多18精品| 国产亚洲一级高清| h片在线观看网站| 欧美在线视频一区| 国产精品久久久久久av公交车| 国产日韩精品久久| 久久蜜桃av| 日本少妇高潮喷水视频| 久久国产精品露脸对白| 50一60岁老妇女毛片| 国产精品久久777777| 日本少妇毛茸茸高潮| 欧美区在线观看| 四虎精品成人影院观看地址| 久久亚洲一区二区三区四区| 国产视频三区四区| 亚洲国产精品视频| 国产又大又黄的视频| 日韩乱码在线视频| 中文字幕在线三区| 国产成人综合亚洲| 国产伦精品一区二区三区在线播放| 亚洲.欧美.日本.国产综合在线| 激情欧美日韩| 午夜天堂在线视频| 久久久久久**毛片大全| 中文在线观看免费网站| 欧美精三区欧美精三区| 美国一级片在线免费观看视频| 色综合久久悠悠| 色8久久久久| 日韩精品欧美专区| 99精品99| 亚洲色偷偷色噜噜狠狠99网| 亚洲三级电影全部在线观看高清| 在线免费观看av网址| 亚洲精品ady| 黄视频在线免费看| 91久久极品少妇xxxxⅹ软件| 日韩免费久久| 久久久国产欧美| 久久久不卡网国产精品一区| 日韩乱码在线观看| 亚洲成av人片在线观看香蕉| 国产激情视频在线观看| 国产精品一区二区三| 国产一区二区精品福利地址| 欧美深夜福利视频| 成人免费高清视频| 久久成人在线观看| 日韩午夜av电影| 成人影院在线观看| 成人做爰www免费看视频网站| 日韩精品看片| 天堂网在线免费观看| 国产精品美女一区二区| 在线观看中文字幕码| 中文字幕亚洲无线码在线一区| 一呦二呦三呦精品国产| 欧美高清视频一区二区三区在线观看 | 欧美剧情片在线观看| 在线日本中文字幕| 国产欧美精品日韩精品| 91亚洲国产| 伊人五月天婷婷| 一区二区三区久久| 日韩性xxxx| 欧美最猛性xxxxx(亚洲精品)| 日韩一级电影| 久热免费在线观看| 中文字幕免费观看一区| 一级特黄aaa大片| 久久国产精品偷| 成人偷拍自拍| 黄www在线观看| 久久久不卡网国产精品二区| 国产精品成人久久久| 少妇高潮久久久久久潘金莲| av在线成人| 青青草国产精品视频| 久久久青草青青国产亚洲免观| 色婷婷久久综合中文久久蜜桃av| 久久精品国产91精品亚洲 | 精品区一区二区| 国产自产自拍视频在线观看| 欧美成人蜜桃| 精品中文字幕一区二区小辣椒| 日韩欧美123区| 亚洲国产高清高潮精品美女| 亚洲wwww| 国产成人三级视频| 99久久综合精品| 最近国语视频在线观看免费播放| 久久影视电视剧免费网站| 美日韩黄色大片| 手机看片一级片| 亚洲已满18点击进入久久| 欧美午夜黄色| 7777精品伊久久久大香线蕉语言| 亚洲经典在线| 婷婷国产成人精品视频| 亚洲国产中文字幕在线观看| 国产 日韩 欧美一区| 国产aaa免费视频| 久久精品视频网| 午夜精品小视频| 国产不卡av在线| 欧美精品色网| 精品人妻中文无码av在线| 日韩免费性生活视频播放| 日韩毛片免费观看| 800av在线免费观看| 国产精品毛片久久久久久| 香蕉视频国产在线| 91在线免费观看网站| 久久一区欧美| 国产中文字幕免费| 俺去亚洲欧洲欧美日韩| 久久99青青| 亚洲精品无码一区二区|