日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Kafka 遷移工具 MirrorMaker2 原理起底

來源: 責編: 時間:2024-04-19 09:29:57 261觀看
導讀注意:本文內容截止到 2024 年 2 月 26 日發布的 Kafka 3.7.0 版本。MirrorMaker2(后文簡稱 MM2)在 2019 年 12 月隨 Kafka 2.4.0 一起推出。顧名思義,是為了解決 Kafka 集群之間數據復制和數據同步的問題而誕生的 Kafka

注意:本文內容截止到 2024 年 2 月 26 日發布的 Kafka 3.7.0 版本。SQx28資訊網——每日最新資訊28at.com

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

在此也預告一下,AutoMQ 基于 MM2 的遷移產品化功能也即將和大家見面,可以幫助用戶更好更快從自建 Kafka 遷移到 AutoMQ,歡迎大家屆時使用。SQx28資訊網——每日最新資訊28at.com

1、 安裝部署 

MM2 一共有三種部署模式,dedicated mode,standalone mode 和 Kafka connect mode。SQx28資訊網——每日最新資訊28at.com

部署模式

Dedicated mode

直接部署 Kafka MM2,啟動命令如下:SQx28資訊網——每日最新資訊28at.com

./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)。SQx28資訊網——每日最新資訊28at.com

Standalone mode

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

Kafka Connect mode

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

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

我們可以把基于 Kafka Connect mode 進行部署的 MM2 里的調度資源分為以下幾種:SQx28資訊網——每日最新資訊28at.com

? Worker:一個 MM2 或者 Kafka Connect 進程,是進行分布式部署時的基本單位。SQx28資訊網——每日最新資訊28at.com

? Connector:單個 Worker 內部執行遷移任務的連接器,一個 Worker 內可以有多個 Connector,每個 Connector 負責相對獨立的功能。SQx28資訊網——每日最新資訊28at.com

? Task:Connector 將需要遷移的任務進行切分,Task 是并發執行的最小單位。SQx28資訊網——每日最新資訊28at.com

Kafka Connect 集群

在 Kafka Connect Mode 下,我們需要先準備一個 Kafka Connect 集群,在每個節點上執行以下命令即可啟動 Kafka Connect 集群。SQx28資訊網——每日最新資訊28at.com

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

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

Connector

假設節點 IP 為本機,啟動三個 Connector 的命令如下(實際上向當前 Kafka Connect 集群中的任一節點發起請求即可):SQx28資訊網——每日最新資訊28at.com

# MirrorSourceConnectorcurl -X POST -H "Content-Type: application/json" --data @mirror-source-connector.properties http://127.0.0.1:8083/connectors# MirrorCheckpointConnectorcurl -X POST -H "Content-Type: application/json" --data @mirror-checkpoint-connector.properties http://127.0.0.1:8083/connectors# MirrorHeartbeatConnectorcurl -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 的配置文件。SQx28資訊網——每日最新資訊28at.com

在啟動完 Connector 之后,我們還可以使用以下命令查看當前 Kafka Connect 集群中已經存在的 Connectors。SQx28資訊網——每日最新資訊28at.com

$ 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]。SQx28資訊網——每日最新資訊28at.com

2、工作流   

從上文可以看到,在 MM2 中,有三個 Connector,它們負責完成整個副本復制過程,這三個 Connector 包括:SQx28資訊網——每日最新資訊28at.com

? MirrorSourceConnector:同步源集群中 topic 的消息數據到目標集群。SQx28資訊網——每日最新資訊28at.com

? MirrorCheckpointConnector:將源集群的消費位點翻譯并同步到目標集群。SQx28資訊網——每日最新資訊28at.com

? MirrorHeartbeatConnector:定時往源集群中發送心跳,驗證和監控兩個集群之間連接和遷移任務的運行情況。SQx28資訊網——每日最新資訊28at.com

對于 MirrorSourceConnector 和 MirrorCheckpointConnector 提供有 JMX 監控信息,可以幫助對遷移進度和遷移健康狀況有全局了解。SQx28資訊網——每日最新資訊28at.com

MM2 會創建以下幾種 Topic(除 heartbeats 之外,所有的 Topic 都會被創建在 target 集群上):SQx28資訊網——每日最新資訊28at.com

? connect-configs:存儲 MM2 中 connector 的配置信息。SQx28資訊網——每日最新資訊28at.com

? connect-offsets:存儲 MM2 中 MirrorSourceConnector 和 MirrorCheckpointConnector 的消費位點。SQx28資訊網——每日最新資訊28at.com

? connect-status:存儲 MM2 中 connector 的狀態信息。SQx28資訊網——每日最新資訊28at.com

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

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

? heartbeats:定期往源集群發送心跳消息,這部分消息會被同步到目標集群。此 Topic 中的消息體主要存儲簡單的時間戳信息,其中的消息由 MirrorHeartbeatConnector 發出。SQx28資訊網——每日最新資訊28at.com

想要了解具體的 MM2 工作流,弄清楚 mm2-offset-syncs.A.internal 和 A.checkpoints.internal 兩個 Topic 的作用尤為關鍵。SQx28資訊網——每日最新資訊28at.com

圖片圖片SQx28資訊網——每日最新資訊28at.com

消息同步與位點映射

MirrorSourceConnector 會從最早位點開始同步消息。在同步消息時會生成 OffsetSync 消息。OffsetSync 消息中記錄了被同步的消息的分區信息,在源集群和目標集群上的位點映射信息。SQx28資訊網——每日最新資訊28at.com

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

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

位點翻譯

MirrorCheckpointConnector 則會執行具體的位點翻譯工作,它會消費 mm2-offset-syncs.A.internal 中的 OffsetSync 消息,然后將源集群上的消費位點翻譯成目標集群上的消費位點并執行 alterConsumerGroupOffsets 方法來重置消費者位點。SQx28資訊網——每日最新資訊28at.com

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

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

圖片圖片SQx28資訊網——每日最新資訊28at.com

可以通過以下命令方便地查看 OffsetSync 消息的內容。SQx28資訊網——每日最新資訊28at.com

$ ./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.internalOffsetSync{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 的內容。SQx28資訊網——每日最新資訊28at.com

$ ./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=trueHeartbeat{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 中的消息,即可查看當前消息同步狀況。SQx28資訊網——每日最新資訊28at.com

3、負載均衡 

在 Kafka Connect 中,一個獨立的 Kafka Connect 進程我們稱之為一個 worker。在分布式環境下,相同 group.id 的一組 worker 就形成了一個 Kafka Connect 集群。SQx28資訊網——每日最新資訊28at.com

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

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 宕機前后的負載均衡情況。SQx28資訊網——每日最新資訊28at.com

圖片圖片SQx28資訊網——每日最新資訊28at.com

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

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

參考資料

[1] KIP-382: MirrorMaker 2.0SQx28資訊網——每日最新資訊28at.com

https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0SQx28資訊網——每日最新資訊28at.com

[2] COURSE: KAFKA CONNECT 101 Kafka Connect’s REST APISQx28資訊網——每日最新資訊28at.com

https://developer.confluent.io/courses/kafka-connect/rest-api/SQx28資訊網——每日最新資訊28at.com

[3] KAFKA-15906SQx28資訊網——每日最新資訊28at.com

https://issues.apache.org/jira/browse/KAFKA-15906SQx28資訊網——每日最新資訊28at.com

[4] Incremental Cooperative Rebalancing in Kafka ConnectSQx28資訊網——每日最新資訊28at.com

https://cwiki.apache.org/confluence/display/KAFKA/KIP-415%3A+Incremental+Cooperative+Rebalancing+in+Kafka+ConnectSQx28資訊網——每日最新資訊28at.com

[5] KIP-415: Incremental Cooperative Rebalancing in Kafka ConnectSQx28資訊網——每日最新資訊28at.com

https://cwiki.apache.org/confluence/display/KAFKA/KIP-415%3A+Incremental+Cooperative+Rebalancing+in+Kafka+ConnectSQx28資訊網——每日最新資訊28at.com

[6] KIP-545: support automated consumer offset sync across clusters in MM 2.0SQx28資訊網——每日最新資訊28at.com

https://cwiki.apache.org/confluence/display/KAFKA/KIP-545%3A+support+automated+consumer+offset+sync+across+clusters+in+MM+2.0SQx28資訊網——每日最新資訊28at.com

[7] KIP-656: MirrorMaker2 Exactly-once SemanticsSQx28資訊網——每日最新資訊28at.com

https://cwiki.apache.org/confluence/display/KAFKA/KIP-656%3A+MirrorMaker2+Exactly-once+SemanticsSQx28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-84043-0.htmlKafka 遷移工具 MirrorMaker2 原理起底

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 2024年在Web應用程序中實現前沿技術的JavaScript庫

下一篇: Prism:打造WPF項目的MVVM之選,簡化開發流程、提高可維護性

標簽:
  • 熱門焦點
  • MIX Fold3包裝盒泄露 新機本月登場

    小米的全新折疊屏旗艦MIX Fold3將于本月發布,近日該機的真機包裝盒在網上泄露。從圖上來看,新的MIX Fold3包裝盒在外觀設計方面延續了之前的方案,變化不大,這也是目前小米旗艦
  • 掘力計劃第 20 期:Flutter 混合開發的混亂之治

    在掘力計劃系列活動第20場,《Flutter 開發實戰詳解》作者,掘金優秀作者,Github GSY 系列目負責人戀貓的小郭分享了Flutter 混合開發的混亂之治。Flutter 基于自研的 Skia 引擎
  • 一篇聊聊Go錯誤封裝機制

    %w 是用于錯誤包裝(Error Wrapping)的格式化動詞。它是用于 fmt.Errorf 和 fmt.Sprintf 函數中的一個特殊格式化動詞,用于將一個錯誤(或其他可打印的值)包裝在一個新的錯誤中。使
  • 分享六款相見恨晚的PPT模版網站, 祝你做出精美的PPT!

    1、OfficePLUSOfficePLUS網站旨在為全球Office用戶提供豐富的高品質原創PPT模板、實用文檔、數據圖表及個性化定制服務。優點:OfficePLUS是微軟官方網站,囊括PPT模板、Word模
  • 一篇文章帶你了解 CSS 屬性選擇器

    屬性選擇器對帶有指定屬性的 HTML 元素設置樣式。可以為擁有指定屬性的 HTML 元素設置樣式,而不僅限于 class 和 id 屬性。一、了解屬性選擇器CSS屬性選擇器提供了一種簡單而
  • 品牌洞察丨服務本地,美團直播成效幾何?

    來源:17PR7月11日,美團App首頁推薦位出現&ldquo;美團直播&rdquo;的固定入口。在直播聚合頁面,外賣&ldquo;神槍手&rdquo;直播間、美團旅行直播間、美團買菜直播間等均已上線,同時
  • 東方甄選單飛:有些鳥注定是關不住的

    作者:彭寬鴻來源:華爾街科技眼&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;&zwj;東方甄選創始人俞敏洪帶隊的&ldquo;7天甘肅行&rdquo;直播活動已在近日順利收官。成立后一
  • 馮提莫簽約抖音公會 前“斗魚一姐”消失在直播間

    來源:直播觀察提起&ldquo;馮提莫&rdquo;這個名字,很多網友或許聽過,但應該不記得她是哪位主播了。其實,作為曾經的&ldquo;斗魚一姐&rdquo;,馮提莫在游戲直播的年代影響力不輸于現
  • 機構稱Q2全球智能手機出貨量同比下滑11% 蘋果份額依舊第2

    7月20日消息,據外媒報道,研究機構的報告顯示,由于需求下滑,今年二季度全球智能手機的出貨量,同比下滑了11%,三星、蘋果等主要廠商的銷量,較去年同期均有下
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品国产三级国产普通话蜜臀| 免费h精品视频在线播放| 日韩视频亚洲视频| 一区二区av在线| 亚洲免费一区二区| 久久精品免费观看| 欧美二区不卡| 国产精品日韩在线| 一区二区视频免费在线观看 | 欧美成人第一页| 欧美日韩国产另类不卡| 国产精品h在线观看| 国产综合18久久久久久| 亚洲欧洲中文日韩久久av乱码| 亚洲精品在线视频| 午夜欧美精品| 欧美va亚洲va日韩∨a综合色| 国产精品第2页| 极品尤物一区二区三区| 亚洲视频在线观看网站| 久久影院午夜论| 欧美小视频在线观看| 激情欧美一区二区| 亚洲一区免费观看| 麻豆av一区二区三区| 国产精品福利片| 在线观看三级视频欧美| 亚洲免费视频网站| 欧美a级大片| 国产区日韩欧美| 日韩亚洲精品视频| 久久精品一区中文字幕| 欧美视频亚洲视频| 亚洲电影在线观看| 欧美一区二区三区免费看| 欧美经典一区二区三区| 国内精品视频在线播放| 亚洲视频综合| 免费黄网站欧美| 国产三区精品| 亚洲性视频h| 欧美精品久久久久久久免费观看| 韩日精品视频| 亚洲欧美日韩一区在线| 欧美日韩精品久久| 亚洲精品1区| 久久婷婷蜜乳一本欲蜜臀| 国产精品视频一区二区三区| 亚洲美女淫视频| 麻豆av福利av久久av| 国产精品高精视频免费| 99精品视频免费在线观看| 嫩草成人www欧美| 国产一区二区中文字幕免费看| 宅男噜噜噜66国产日韩在线观看| 噜噜噜噜噜久久久久久91| 国产亚洲欧美一区二区三区| 亚洲一区免费| 欧美日韩一区二区视频在线观看 | 欧美精品一区二区久久婷婷 | 欧美在线观看网站| 国产精品久久久一区二区三区| 91久久在线观看| 美女露胸一区二区三区| 黄色成人在线网址| 久久精品理论片| 国产一区二区三区成人欧美日韩在线观看 | 亚洲日本中文字幕区| 美日韩精品免费| 伊人成年综合电影网| 久久国产精品一区二区| 国产精品久久一区二区三区| 国产精品99免费看| 亚洲免费观看高清在线观看 | 亚洲高清电影| 老司机久久99久久精品播放免费| 国产一区二区三区无遮挡| 欧美亚洲一级| 国产视频亚洲| 久久狠狠婷婷| 激情综合在线| 久久一区二区三区四区五区| 一区免费观看视频| 久久综合色一综合色88| 1000部精品久久久久久久久| 美日韩免费视频| 亚洲人在线视频| 欧美黄色免费网站| 日韩亚洲欧美一区| 欧美日韩国产综合一区二区| 日韩午夜av电影| 欧美日韩中文字幕日韩欧美| 中文精品在线| 国产精品三级久久久久久电影| 午夜激情综合网| 国产一区日韩一区| 卡通动漫国产精品| 亚洲美女毛片| 国产精品你懂的在线欣赏| 欧美一区二区三区男人的天堂 | 欧美激情按摩在线| 这里只有精品视频| 国产伦精品一区二区三区| 欧美一区二区三区四区在线观看地址| 国产一区二区三区四区三区四| 久久久国产一区二区| 亚洲高清毛片| 欧美日韩一区三区四区| 午夜精品久久久久久| 国自产拍偷拍福利精品免费一| 噜噜噜91成人网| 日韩天堂在线观看| 国产精品色婷婷| 久久三级视频| 9久re热视频在线精品| 国产精品视频导航| 久久蜜桃精品| 日韩视频不卡中文| 国产精品视频免费观看| 久久久91精品国产| 亚洲黄色天堂| 国产精品久久久久久久久免费樱桃| 欧美一区二区啪啪| 91久久久久久久久| 国产精品男gay被猛男狂揉视频| 久久精品人人做人人综合| 亚洲精品自在久久| 国产欧美一区二区视频| 欧美99在线视频观看| 亚洲一区欧美二区| 黄色一区二区在线观看| 欧美日韩国产小视频| 欧美一区精品| 亚洲毛片视频| 国产综合18久久久久久| 欧美激情一区二区三区全黄| 午夜影院日韩| 99re66热这里只有精品3直播| 国产视频久久久久久久| 欧美国产第二页| 欧美一区二区黄色| 亚洲日本中文| 国产一区二区三区电影在线观看| 欧美精品999| 久久精品在线| 亚洲一区日韩在线| 亚洲国产精品成人综合色在线婷婷| 国产精品爱啪在线线免费观看| 久久久久久久久久码影片| 一区二区三区日韩精品视频| 在线电影院国产精品| 国产精品一区二区男女羞羞无遮挡| 欧美成人一区二区在线| 欧美影院在线播放| 亚洲小视频在线| 亚洲人成小说网站色在线| 国内精品视频在线观看| 国产精品久久影院| 欧美日韩第一区日日骚| 久色成人在线| 欧美在线亚洲在线| 亚洲一区二区三区乱码aⅴ| 亚洲精品国产系列| 激情久久久久| 国产日韩欧美一区在线| 国产精品成人免费视频| 欧美精品午夜视频| 美日韩精品免费| 久久经典综合| 午夜电影亚洲| 亚洲一区二区三区三| 亚洲精品日韩综合观看成人91| 娇妻被交换粗又大又硬视频欧美| 国产精品区一区二区三| 欧美日韩国产综合视频在线观看| 欧美99在线视频观看| 久久久久久久久蜜桃| 欧美专区亚洲专区| 亚洲欧美日韩网| 一区二区福利| 亚洲日本欧美天堂| 亚洲激情网站| 亚洲国产高清自拍| 黄色国产精品一区二区三区| 国产三区精品| 国产午夜精品理论片a级探花| 欧美性做爰毛片| 欧美日韩午夜在线| 欧美高清视频免费观看| 久久大综合网| 欧美一区二区观看视频| 午夜一区不卡| 香港久久久电影| 欧美一区二区三区喷汁尤物| 亚洲欧美一区在线| 性欧美暴力猛交另类hd| 午夜精品亚洲| 国产欧美一区二区精品婷婷| 国产精品尤物福利片在线观看| 欧美体内she精视频在线观看| 欧美日韩123| 欧美日韩视频一区二区| 欧美日韩网站| 欧美网站在线|