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

刨根問底: Kafka 到底會不會丟數(shù)據(jù)?

開發(fā) 新聞
認真讀完這篇文章,我相信你會對Kafka 如何解決丟數(shù)據(jù)問題,有更加深刻的理解。

今天我們來聊聊 Kafka 生產(chǎn)環(huán)境大家都比較關(guān)心的問題。

那么 Kafka 到底會不會丟數(shù)據(jù)呢?如果丟數(shù)據(jù),究竟該怎么解決呢?

只有掌握了這些, 我們才能處理好 Kafka 生產(chǎn)級的一些故障,從而更穩(wěn)定地服務(wù)業(yè)務(wù)。

認真讀完這篇文章,我相信你會對Kafka 如何解決丟數(shù)據(jù)問題,有更加深刻的理解。

這篇文章干貨很多,希望你可以耐心讀完。

01 總體概述

越來越多的互聯(lián)網(wǎng)公司使用消息隊列來支撐自己的核心業(yè)務(wù)。由于是核心業(yè)務(wù),一般都會要求消息傳遞過程中最大限度的做到不丟失,如果中間環(huán)節(jié)出現(xiàn)數(shù)據(jù)丟失,就會引來用戶的投訴,年底績效就要背鍋了。

那么使用 Kafka 到底會不會丟數(shù)據(jù)呢?如果丟數(shù)據(jù)了該怎么解決呢?為了避免類似情況發(fā)生,除了要做好補償措施,我們更應(yīng)該在系統(tǒng)設(shè)計的時候充分考慮系統(tǒng)中的各種異常情況,從而設(shè)計出一個穩(wěn)定可靠的消息系統(tǒng)。

大家都知道 Kafka 的整個架構(gòu)非常簡潔,是分布式的架構(gòu),主要由 Producer、Broker、Consumer 三部分組成,后面剖析丟失場景會從這三部分入手來剖析。

02 消息傳遞語義剖析

在深度剖析消息丟失場景之前,我們先來聊聊「消息傳遞語義到底是個什么玩意?

所謂的消息傳遞語義是 Kafka 提供的 Producer 和 Consumer 之間的消息傳遞過程中消息傳遞的保證性。主要分為三種, 如下圖所示:

1)首先當 Producer 向 Broker 發(fā)送數(shù)據(jù)后,會進行 commit,如果 commit 成功,由于 Replica 副本機制的存在,則意味著消息不會丟失,但是 Producer 發(fā)送數(shù)據(jù)給 Broker 后,遇到網(wǎng)絡(luò)問題而造成通信中斷,那么 Producer 就無法準確判斷該消息是否已經(jīng)被提交(commit),這就可能造成 at least once 語義。

2)在 Kafka 0.11.0.0 之前, 如果 Producer 沒有收到消息 commit 的響應(yīng)結(jié)果,它只能重新發(fā)送消息,確保消息已經(jīng)被正確的傳輸?shù)?Broker,重新發(fā)送的時候會將消息再次寫入日志中;而在 0.11.0.0 版本之后, Producer 支持冪等傳遞選項,保證重新發(fā)送不會導(dǎo)致消息在日志出現(xiàn)重復(fù)。為了實現(xiàn)這個, Broker 為 Producer 分配了一個ID,并通過每條消息的序列號進行去重。也支持了類似事務(wù)語義來保證將消息發(fā)送到多個 Topic 分區(qū)中,保證所有消息要么都寫入成功,要么都失敗,這個主要用在 Topic 之間的 exactly once 語義。

其中啟用冪等傳遞的方法配置:enable.idempotence = true。

啟用事務(wù)支持的方法配置:設(shè)置屬性 transcational.id = "指定值"。

3)從 Consumer 角度來剖析, 我們知道 Offset 是由 Consumer 自己來維護的, 如果 Consumer 收到消息后更新 Offset, 這時 Consumer 異常 crash 掉, 那么新的 Consumer 接管后再次重啟消費,就會造成 at most once 語義(消息會丟,但不重復(fù))。

4) 如果 Consumer 消費消息完成后, 再更新 Offset, 如果這時 Consumer crash 掉,那么新的 Consumer 接管后重新用這個 Offset 拉取消息, 這時就會造成 at least once 語義(消息不丟,但被多次重復(fù)處理)。

總結(jié):默認 Kafka 提供 at least once」語義的消息傳遞,允許用戶通過在處理消息之前保存 Offset 的方式提供 at most once 語義。如果我們可以自己實現(xiàn)消費冪等,理想情況下這個系統(tǒng)的消息傳遞就是嚴格的exactly once」, 也就是保證不丟失、且只會被精確的處理一次,但是這樣是很難做到的。

從 Kafka 整體架構(gòu)圖我們可以得出有三次消息傳遞的過程:

1)Producer 端發(fā)送消息給 Kafka Broker 端。

2)Kafka Broker 將消息進行同步并持久化數(shù)據(jù)。

3)Consumer 端從 Kafka Broker 將消息拉取并進行消費。

在以上這三步中每一步都可能會出現(xiàn)丟失數(shù)據(jù)的情況, 那么 Kafka 到底在什么情況下才能保證消息不丟失呢?

通過上面三步,我們可以得出:Kafka 只對 「已提交」的消息做「最大限度的持久化保證不丟失」。

怎么理解上面這句話呢?

1)首先是 「已提交」的消息:當 Kafka 中 N 個 Broker 成功的收到一條消息并寫入到日志文件后,它們會告訴 Producer 端這條消息已成功提交了,那么這時該消息在 Kafka 中就變成 "已提交消息" 了。

這里的 N 個 Broker 我們怎么理解呢?這主要取決于對 "已提交" 的定義, 這里可以選擇只要一個 Broker 成功保存該消息就算已提交,也可以是所有 Broker 都成功保存該消息才算是已提交。

2)其次是 最大限度的持久化保證不丟失」,也就是說 Kafka 并不能保證在任何情況下都能做到數(shù)據(jù)不丟失。即 Kafka 不丟失數(shù)據(jù)是有前提條件的。假如這時你的消息保存在 N 個 Broker 上,那么前提條件就是這 N 個 Broker 中至少有1個是存活的,就可以保證你的消息不丟失。

也就是說 Kafka 是能做到不丟失數(shù)據(jù)的, 只不過這些消息必須是 「已提交的消息,且還要滿足一定的條件才可以。

了解了 Kafka 消息傳遞語義以及什么情況下可以保證不丟失數(shù)據(jù),下面我們來詳細剖析每個環(huán)節(jié)為什么會丟數(shù)據(jù),以及如何最大限度的避免丟失數(shù)據(jù)。

03 消息丟失場景剖析

Producer 端丟失場景剖析

在剖析 Producer 端數(shù)據(jù)丟失之前,我們先來了解下 Producer 端發(fā)送消息的流程,對于不了解 Producer 的讀者們,可以查看 聊聊 Kafka Producer 那點事

消息發(fā)送流程如下:

1)首先我們要知道一點就是 Producer 端是直接與 Broker 中的 Leader Partition 交互的,所以在 Producer 端初始化中就需要通過 Partitioner 分區(qū)器從 Kafka 集群中獲取到相關(guān) Topic 對應(yīng)的 Leader Partition 的元數(shù)據(jù) 。

2)待獲取到 Leader Partition 的元數(shù)據(jù)后直接將消息發(fā)送過去。

3)Kafka Broker 對應(yīng)的 Leader Partition 收到消息會先寫入 Page Cache,定時刷盤進行持久化(順序?qū)懭氪疟P)。

4) Follower Partition 拉取 Leader Partition 的消息并保持同 Leader Partition 數(shù)據(jù)一致,待消息拉取完畢后需要給 Leader Partition 回復(fù) ACK 確認消息。

5)待 Kafka Leader 與 Follower Partition 同步完數(shù)據(jù)并收到所有 ISR 中的 Replica 副本的 ACK 后,Leader Partition 會給 Producer 回復(fù) ACK 確認消息。

根據(jù)上圖以及消息發(fā)送流程可以得出:Producer 端為了提升發(fā)送效率,減少IO操作,發(fā)送數(shù)據(jù)的時候是將多個請求合并成一個個 RecordBatch,并將其封裝轉(zhuǎn)換成 Request 請求「異步」將數(shù)據(jù)發(fā)送出去(也可以按時間間隔方式,達到時間間隔自動發(fā)送),所以 Producer 端消息丟失更多是因為消息根本就沒有發(fā)送到 Kafka Broker 端。

導(dǎo)致 Producer 端消息沒有發(fā)送成功有以下原因:

  • 網(wǎng)絡(luò)原因:由于網(wǎng)絡(luò)抖動導(dǎo)致數(shù)據(jù)根本就沒發(fā)送到 Broker 端。
  • 數(shù)據(jù)原因:消息體太大超出 Broker 承受范圍而導(dǎo)致 Broker 拒收消息。

另外 Kafka Producer 端也可以通過配置來確認消息是否生產(chǎn)成功:

在 Kafka Producer 端的 acks 默認配置為1, 默認級別是 at least once 語義, 并不能保證 exactly once 語義。

既然 Producer 端發(fā)送數(shù)據(jù)有 ACK 機制, 那么這里就可能會丟數(shù)據(jù)的!!!

  • acks = 0:由于發(fā)送后就自認為發(fā)送成功,這時如果發(fā)生網(wǎng)絡(luò)抖動, Producer 端并不會校驗 ACK 自然也就丟了,且無法重試。
  • acks = 1:消息發(fā)送 Leader Parition 接收成功就表示發(fā)送成功,這時只要 Leader Partition 不 Crash 掉,就可以保證 Leader Partition 不丟數(shù)據(jù),但是如果 Leader Partition 異常 Crash 掉了, Follower Partition 還未同步完數(shù)據(jù)且沒有 ACK,這時就會丟數(shù)據(jù)。
  • acks = -1 或者 all: 消息發(fā)送需要等待 ISR 中 Leader Partition 和 所有的 Follower Partition 都確認收到消息才算發(fā)送成功, 可靠性最高, 但也不能保證不丟數(shù)據(jù),比如當 ISR 中只剩下 Leader Partition 了, 這樣就變成 acks = 1 的情況了。

Broker 端丟失場景剖析

接下來我們來看看 Broker 端持久化存儲丟失場景, 對于不了解 Broker 的讀者們,可以先看看 聊聊 Kafka Broker 那點事,數(shù)據(jù)存儲過程如下圖所示:

Kafka Broker 集群接收到數(shù)據(jù)后會將數(shù)據(jù)進行持久化存儲到磁盤,為了提高吞吐量和性能,采用的是「異步批量刷盤的策略」,也就是說按照一定的消息量和間隔時間進行刷盤。首先會將數(shù)據(jù)存儲到 PageCache 中,至于什么時候?qū)?Cache 中的數(shù)據(jù)刷盤是由操作系統(tǒng)根據(jù)自己的策略決定或者調(diào)用 fsync 命令進行強制刷盤,如果此時 Broker 宕機 Crash 掉,且選舉了一個落后 Leader Partition 很多的 Follower Partition 成為新的 Leader Partition,那么落后的消息數(shù)據(jù)就會丟失

                

既然 Broker 端消息存儲是通過異步批量刷盤的,那么這里就可能會丟數(shù)據(jù)的!!!

  • 由于 Kafka 中并沒有提供「同步刷盤的方式,所以說從單個 Broker 來看還是很有可能丟失數(shù)據(jù)的。
  • kafka 通過「多 Partition (分區(qū))多 Replica(副本)機制」已經(jīng)可以最大限度的保證數(shù)據(jù)不丟失,如果數(shù)據(jù)已經(jīng)寫入 PageCache 中但是還沒來得及刷寫到磁盤,此時如果所在 Broker 突然宕機掛掉或者停電,極端情況還是會造成數(shù)據(jù)丟失。

Consumer 端丟失場景剖析

接下來我們來看看 Consumer 端消費數(shù)據(jù)丟失場景,對于不了解 Consumer 的讀者們,可以先看看 聊聊 Kafka Consumer 那點事, 我們先來看看消費流程:

1)Consumer 拉取數(shù)據(jù)之前跟 Producer 發(fā)送數(shù)據(jù)一樣, 需要通過訂閱關(guān)系獲取到集群元數(shù)據(jù), 找到相關(guān) Topic 對應(yīng)的 Leader Partition 的元數(shù)據(jù)。

2)然后 Consumer 通過 Pull 模式主動的去 Kafka 集群中拉取消息。

3)在這個過程中,有個消費者組的概念(不了解的可以看上面鏈接文章),多個 Consumer 可以組成一個消費者組即 Consumer Group,每個消費者組都有一個Group-Id。同一個 Consumer Group 中的 Consumer 可以消費同一個 Topic 下不同分區(qū)的數(shù)據(jù),但是不會出現(xiàn)多個 Consumer 去消費同一個分區(qū)的數(shù)據(jù)。

4)拉取到消息后進行業(yè)務(wù)邏輯處理,待處理完成后,會進行 ACK 確認,即提交 Offset 消費位移進度記錄。

5)最后 Offset 會被保存到 Kafka Broker 集群中的 __consumer_offsets 這個 Topic 中,且每個 Consumer 保存自己的 Offset 進度。 

根據(jù)上圖以及消息消費流程可以得出消費主要分為兩個階段:

  • 獲取元數(shù)據(jù)并從 Kafka Broker 集群拉取數(shù)據(jù)。
  • 處理消息,并標記消息已經(jīng)被消費,提交 Offset 記錄。

                       

既然 Consumer 拉取后消息最終是要提交 Offset, 那么這里就可能會丟數(shù)據(jù)的!!!

  • 可能使用的「自動提交 Offset 方式」
  • 拉取消息后「先提交 Offset,后處理消息」,如果此時處理消息的時候異常宕機,由于 Offset 已經(jīng)提交了,  待 Consumer 重啟后,會從之前已提交的 Offset 下一個位置重新開始消費, 之前未處理完成的消息不會被再次處理,對于該 Consumer 來說消息就丟失了。
  • 拉取消息后「先處理消息,在進行提交 Offset」, 如果此時在提交之前發(fā)生異常宕機,由于沒有提交成功 Offset, 待下次 Consumer 重啟后還會從上次的 Offset 重新拉取消息,不會出現(xiàn)消息丟失的情況, 但是會出現(xiàn)重復(fù)消費的情況,這里只能業(yè)務(wù)自己保證冪等性。        

04 消息丟失解決方案

上面帶你從 Producer、Broker、Consumer 三端剖析了可能丟失數(shù)據(jù)的場景,下面我們就來看看如何解決才能最大限度的保證消息不丟失。

Producer 端解決方案

在剖析 Producer 端丟失場景的時候, 我們得出其是通過「異步」方式進行發(fā)送的,所以如果此時是使用「發(fā)后即焚」的方式發(fā)送,即調(diào)用 Producer.send(msg) 會立即返回,由于沒有回調(diào),可能因網(wǎng)絡(luò)原因?qū)е?Broker 并沒有收到消息,此時就丟失了。

因此我們可以從以下幾方面進行解決 Producer 端消息丟失問題:

4.1.1 更換調(diào)用方式:

棄用調(diào)用發(fā)后即焚的方式,使用帶回調(diào)通知函數(shù)的方法進行發(fā)送消息,即 Producer.send(msg, callback), 這樣一旦發(fā)現(xiàn)發(fā)送失敗, 就可以做針對性處理。

Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback);


public Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) {
// intercept the record, which can be potentially modified; this method does not throw exceptions
ProducerRecord<K, V> interceptedRecord = this.interceptors == null ? record : this.interceptors.onSend(record);
return doSend(interceptedRecord, callback);
}

1)網(wǎng)絡(luò)抖動導(dǎo)致消息丟失,Producer 端可以進行重試。

(2)消息大小不合格,可以進行適當調(diào)整,符合 Broker 承受范圍再發(fā)送。

通過以上方式可以保證最大限度消息可以發(fā)送成功。

4.1.2 ACK 確認機制:

該參數(shù)代表了對"已提交"消息的定義。

需要將 request.required.acks 設(shè)置為 -1/ all,-1/all 表示有多少個副本 Broker 全部收到消息,才認為是消息提交成功的標識。

針對 acks = -1/ all , 這里有兩種非常典型的情況:

(1)數(shù)據(jù)發(fā)送到 Leader Partition, 且所有的 ISR 成員全部同步完數(shù)據(jù), 此時,Leader Partition 異常 Crash 掉,那么會選舉新的 Leader Partition,數(shù)據(jù)不會丟失, 如下圖所示:

(2)數(shù)據(jù)發(fā)送到 Leader Partition,部分 ISR 成員同步完成,此時 Leader Partition 異常 Crash, 剩下的 Follower Partition 都可能被選舉成新的 Leader Partition,會給 Producer 端發(fā)送失敗標識, 后續(xù)會重新發(fā)送數(shù)據(jù),數(shù)據(jù)可能會重復(fù), 如下圖所示:

因此通過上面分析,我們還需要通過其他參數(shù)配置來進行保證:

replication.factor >= 2

min.insync.replicas > 1

這是 Broker 端的配置,下面會詳細介紹。

4.1.3 重試次數(shù) retries:

該參數(shù)表示 Producer 端發(fā)送消息的重試次數(shù)。

需要將 retries 設(shè)置為大于0的數(shù), 在 Kafka 2.4 版本中默認設(shè)置為Integer.MAX_VALUE。另外如果需要保證發(fā)送消息的順序性,配置如下:

retries = Integer.MAX_VALUE
max.in.flight.requests.per.connection = 1

這樣 Producer 端就會一直進行重試直到 Broker 端返回 ACK 標識,同時只有一個連接向 Broker 發(fā)送數(shù)據(jù)保證了消息的順序性。

4.1.4 重試時間 retry.backoff.ms:

該參數(shù)表示消息發(fā)送超時后兩次重試之間的間隔時間,避免無效的頻繁重試,默認值為100ms,  推薦設(shè)置為300ms。

Broker 端解決方案

在剖析 Broker 端丟失場景的時候, 我們得出其是通過「異步批量刷盤」的策略,先將數(shù)據(jù)存儲到 PageCache」,再進行異步刷盤, 由于沒有提供 步刷盤」策略, 因此 Kafka 是通過多分區(qū)多副本的方式來最大限度的保證數(shù)據(jù)不丟失。

我們可以通過以下參數(shù)配合來保證:

4.2.1 unclean.leader.election.enable

該參數(shù)表示有哪些 Follower 可以有資格被選舉為 Leader , 如果一個 Follower 的數(shù)據(jù)落后 Leader 太多,那么一旦它被選舉為新的 Leader, 數(shù)據(jù)就會丟失,因此我們要將其設(shè)置為false,防止此類情況發(fā)生。

4.2.2 replication.factor

該參數(shù)表示分區(qū)副本的個數(shù)。建議設(shè)置 replication.factor >=3, 這樣如果 Leader 副本異常 Crash 掉,F(xiàn)ollower 副本會被選舉為新的 Leader 副本繼續(xù)提供服務(wù)。

4.2.3 min.insync.replicas

該參數(shù)表示消息至少要被寫入成功到 ISR 多少個副本才算"已提交",建議設(shè)置min.insync.replicas > 1, 這樣才可以提升消息持久性,保證數(shù)據(jù)不丟失。

另外我們還需要確保一下 replication.factor > min.insync.replicas, 如果相等,只要有一個副本異常 Crash 掉,整個分區(qū)就無法正常工作了,因此推薦設(shè)置成: replication.factor = min.insync.replicas +1, 最大限度保證系統(tǒng)可用性。

Consumer 端解決方案

在剖析 Consumer 端丟失場景的時候,我們得出其拉取完消息后是需要提交 Offset 位移信息的,因此為了不丟數(shù)據(jù),正確的做法是:拉取數(shù)據(jù)、業(yè)務(wù)邏輯處理、提交消費 Offset 位移信息。

我們還需要設(shè)置參數(shù) enable.auto.commit = false, 采用手動提交位移的方式。

另外對于消費消息重復(fù)的情況,業(yè)務(wù)自己保證冪等性, 保證只成功消費一次即可

05 總結(jié)

這里,我們一起來總結(jié)一下這篇文章的重點。

1、從 Kafka 整體架構(gòu)上概述了可能發(fā)生數(shù)據(jù)丟失的環(huán)節(jié)。

2、帶你剖析了「消息傳遞語義」的概念, 確定了 Kafka 只對「已提交」的消息做「最大限度的持久化保證不丟失」。

3、帶你剖析了 Producer、Broker、Consumer 三端可能導(dǎo)致數(shù)據(jù)丟失的場景以及具體的高可靠解決方案。

責任編輯:張燕妮 來源: 華仔聊技術(shù)
相關(guān)推薦

2020-11-13 07:14:55

Kafka消息中間件

2019-07-04 10:49:13

HTTPWebSocket協(xié)議

2015-07-02 15:04:53

CSS好奇心+

2013-10-10 15:41:38

綠色數(shù)據(jù)中心數(shù)據(jù)中心

2020-09-29 08:33:17

基站信號健康

2012-09-07 09:23:01

Win 8操作系統(tǒng)

2010-03-22 16:51:31

無線網(wǎng)絡(luò)穩(wěn)定性

2023-02-07 08:36:32

2024-07-03 09:15:33

MySQL表達式索引

2021-02-09 08:13:51

項目內(nèi)存TCP

2024-07-07 21:39:34

2020-07-20 15:20:44

ThreadLocalJava多線程

2019-08-09 11:25:01

Java虛擬機Java程序員

2012-07-13 16:29:30

2021-09-21 16:18:07

手機電池快充

2019-01-21 16:54:24

車聯(lián)網(wǎng)智能手機系統(tǒng)iOS

2021-02-07 18:07:28

大數(shù)據(jù)AI人工智能

2020-10-14 09:04:18

Kafka系統(tǒng)通信

2020-09-29 11:33:11

5G

2020-04-09 13:38:40

MySQL數(shù)據(jù)庫臟讀
點贊
收藏

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

亚洲国产欧美在线人成| 国产成人亚洲综合a∨婷婷| 亚洲欧美日韩第一区| 五月婷婷之综合激情| 青青影院在线观看| www.久久精品| 国产免费亚洲高清| 久久高清免费视频| 日韩精品免费一区二区三区| 日韩午夜激情av| 免费观看精品视频| 成人午夜在线影视| 久久久影院官网| 亚洲自拍av在线| 日本免费精品视频| 亚洲天堂黄色| www.亚洲免费视频| 波多野结衣一本| 国产精品久久久久久久久久辛辛| 精品久久久久久久中文字幕 | 欧洲亚洲免费在线| 永久久久久久久| 国产成人影院| 亚洲精品videossex少妇| 中文字幕中文在线| 经典三级一区二区| 亚洲成人1区2区| 992tv成人免费观看| 国产视频网站在线| 91在线码无精品| 亚洲自拍偷拍色片视频| 怡红院成永久免费人全部视频| 激情综合视频| 欧美成人精品在线| 三级黄色录像视频| 欧洲激情综合| 亚洲欧美日韩另类| 亚洲国产综合视频| 国产主播性色av福利精品一区| 欧美一级高清片| 九九九九九伊人| 成人精品三级| 91高清视频免费看| 一本大道熟女人妻中文字幕在线 | 欧美新色视频| 9i在线看片成人免费| 成人av蜜桃| 精品国产av鲁一鲁一区| 国内精品视频一区二区三区八戒| 日韩免费av一区二区| 一区二区三区视频免费看| 综合久久精品| 欧美成人免费全部| 2018天天弄| 欧美极品一区二区三区| 欧美日韩福利视频| 国产网友自拍视频| 亚洲全部视频| 欧美专区中文字幕| 欧美brazzers| 免费的国产精品| 国产区亚洲区欧美区| 一区二区视频免费| 久99久精品视频免费观看| 成人激情综合网| 国产夫妻性生活视频| 懂色av噜噜一区二区三区av| 痴汉一区二区三区| 午夜视频在线免费播放| 久久色在线观看| 五月婷婷综合色| 麻豆tv在线| 亚洲国产一区二区视频| 日韩精品视频一区二区在线观看| 日韩欧美精品电影| 欧美高清一级片在线| 日本一二三四区视频| 99精品国产高清一区二区麻豆| 亚洲成av人乱码色午夜| 最新版天堂资源在线| 亚洲第一二三区| 中文字幕av一区| 麻豆精品一区二区三区视频| 亚洲黄色三级| 国产精品情侣自拍| 中文字幕在线观看免费| 国产激情视频一区二区在线观看| 国产三区二区一区久久| 国产h视频在线观看| 亚洲蜜臀av乱码久久精品| 免费人成自慰网站| 成人看片网站| 日韩欧美精品在线| 最新中文字幕视频| 91精品国产福利在线观看麻豆| 欧美激情一区二区久久久| 国产成人无码专区| 国产成人精品免费| 午夜精品短视频| 高清在线视频不卡| 欧美高清dvd| 久久久无码人妻精品一区| 99精品视频在线观看播放| 4438全国成人免费| 国产熟女一区二区丰满| 91老师片黄在线观看| 麻豆传媒网站在线观看| 天天综合网天天| 精品剧情v国产在线观看在线| 欧美狂猛xxxxx乱大交3| 欧美日韩久久| 国产999在线| 内射后入在线观看一区| 最好看的中文字幕久久| 国产精品免费成人| jizzjizzjizz欧美| www.久久色.com| 亚洲 欧美 中文字幕| 懂色中文一区二区在线播放| 亚洲午夜精品久久久中文影院av| 亚洲人体影院| 亚洲成人精品久久久| 国产精品白丝喷水在线观看| 日韩电影一区二区三区| 久久影院理伦片| 国模雨婷捆绑高清在线| 欧美一区二区三区视频在线观看 | 亚洲色图20p| 五月婷婷之综合激情| 夜夜春成人影院| 欧美精品成人在线| 亚洲av无码国产精品久久不卡| 国产精品麻豆视频| 韩国日本美国免费毛片| 青青一区二区| 7m第一福利500精品视频| 亚洲精品久久久久久久久久久久久久 | 男女精品网站| 精品欧美一区二区久久久伦| 成人爽a毛片免费啪啪动漫| 日韩一区二区不卡| 欧美成人国产精品高潮| 国产丶欧美丶日本不卡视频| 在线观看日本一区| 日韩一级视频| 精品久久久av| 91精品国产乱码久久久| 亚洲欧洲精品一区二区三区| av在线网址导航| 99久久精品网站| 成人免费看黄网站| www.久久久久.com| 日韩欧美一区二区免费| 九九热国产在线| 成人国产精品免费网站| 日韩一级性生活片| 丝袜美腿一区二区三区动态图| 97在线看免费观看视频在线观看| 亚洲欧美丝袜中文综合| 欧美性xxxx18| 天堂在线中文视频| 精品中文字幕一区二区| 热这里只有精品| 2021年精品国产福利在线| 久久久久久久999精品视频| 欧美特级特黄aaaaaa在线看| 精品美女国产在线| 在线观看日本中文字幕| 蜜桃av一区二区三区| 永久免费在线看片视频| baoyu135国产精品免费| 日本免费久久高清视频| 1769视频在线播放免费观看| 在线成人小视频| 国产精品18p| 久久久无码精品亚洲日韩按摩| 蜜臀av免费观看| 欧美88av| 欧美精品中文字幕一区二区| 久久精品嫩草影院| 欧美激情在线观看视频| 欧美一区二区少妇| 91精品久久久久久久99蜜桃| 国产精品第56页| 国产精品久久久久影院老司| 男人添女人荫蒂国产| 玖玖精品视频| 国产亚洲精品久久久久久久| 欧美变态挠脚心| 国产精品一区二区性色av| 青草视频在线免费直播 | 久久激情婷婷| 一区二区三区四区| 日韩高清在线免费观看| 成人中文字幕在线观看| 九色porny丨入口在线| 北条麻妃99精品青青久久| 天天躁日日躁狠狠躁伊人| 欧美男人的天堂一二区| 亚洲天堂av片| 一区二区在线观看视频在线观看| 在线国产视频一区| 成人av资源在线| 亚洲午夜激情影院| 欧美专区18| 欧美大黑帍在线播放| 久久视频在线| 日韩av中文在线| 国产不卡精品视男人的天堂| 国产剧情精品在线| 色综合久久中文字幕| 亚洲成人生活片| 亚洲国产精品二十页| 国产真实乱人偷精品| 国内精品久久久久影院薰衣草| 六月激情综合网| 欧美日本国产| 亚洲综合第一| 国产一区二区三区四区大秀| 成人黄视频免费| 成人精品视频在线观看| 日韩av电影在线播放| av2020不卡| 欧美肥婆姓交大片| 韩国中文字幕在线| 正在播放欧美视频| 免费福利在线观看| 亚洲精品福利在线| 六月婷婷综合网| 日韩久久久久久| 国产色视频在线| 91精品国产综合久久福利| 在线观看一二三区| 欧美私模裸体表演在线观看| 五月婷婷色丁香| 欧美性xxxxxxxxx| 毛片在线免费视频| 欧美日韩国产精品专区| 国产 日韩 欧美 成人| 一区二区三区美女视频| 麻豆一区产品精品蜜桃的特点| 国产精品久久久久久久裸模| 日本黄色小视频在线观看| 国产日韩欧美一区二区三区综合| 亚洲一级中文字幕| 26uuu亚洲| 少妇人妻好深好紧精品无码| 欧美国产综合色视频| 中字幕一区二区三区乱码| 欧美激情在线一区二区| 特级西西人体高清大胆| 国产精品区一区二区三区| 亚洲欧美日韩第一页| 亚洲欧美怡红院| 91精品国产闺蜜国产在线闺蜜| 亚洲欧洲成人自拍| 一区二区视频免费看| 伊人婷婷欧美激情| 日韩av电影网| 日韩欧美国产中文字幕| 国产精品尤物视频| 欧美日韩精品综合在线| 一级全黄少妇性色生活片| 欧美一区二区三区的| 亚洲av少妇一区二区在线观看| 亚洲精品一区二区三区影院 | 91亚洲精品乱码久久久久久蜜桃| 手机在线看片日韩| 国产欧美精品在线观看| 顶级黑人搡bbw搡bbbb搡| 亚洲精品国产高清久久伦理二区| 久久亚洲精品大全| 日韩欧美亚洲一二三区| 中文字幕777| 日韩欧美自拍偷拍| 亚洲av激情无码专区在线播放| 国产一区二区三区丝袜| 亚洲资源一区| 97视频在线观看亚洲| jizz欧美| 国产日韩欧美综合精品| 欧美精选一区二区三区| www.在线观看av| 噜噜爱69成人精品| 欧美又黄又嫩大片a级| 波多野结衣中文字幕一区 | 国产精品99一区二区三区| 国产黄色激情视频| 玖玖国产精品视频| 女女调教被c哭捆绑喷水百合| 久久夜色精品国产噜噜av | 欧美jizzhd欧美| 国a精品视频大全| 日韩毛片一区| 国内成+人亚洲| 亚洲国产成人精品女人| 免费黄色日本网站| 国产麻豆精品久久一二三| 亚洲第一香蕉网| 亚洲一区av在线| 一级黄色片在线播放| 亚洲精品综合精品自拍| 色yeye免费人成网站在线观看| 国产精品99久久99久久久二8| 欧美视频三区| 亚洲日本精品国产第一区| 99在线热播精品免费99热| 五月天视频在线观看| 久久久久国产免费免费| 精品视频久久久久| 69久久99精品久久久久婷婷| 日韩欧美电影在线观看| 欧美理论电影在线播放| 999国产精品亚洲77777| 九9re精品视频在线观看re6 | 99爱视频在线| 粉嫩aⅴ一区二区三区四区| 色哟哟一一国产精品| 欧美在线观看一区| 青青青手机在线视频观看| 欧美高清在线观看| 亚洲伦理一区二区| 五月婷婷一区| 石原莉奈在线亚洲三区| 中文字幕在线免费看线人| 亚洲永久免费av| 国产成人三级在线播放| 久久艳片www.17c.com| 国产91精品在线| 日韩免费av一区二区三区| 国产欧美午夜| www.男人天堂| 亚洲国产精品影院| 丰满肥臀噗嗤啊x99av| 欧美俄罗斯乱妇| 超碰成人在线免费| 欧美精品在欧美一区二区| 国产伦精品一区二区三区在线观看 | 91n.com在线观看| 久久精品人人爽人人爽| 日韩精品久久久久久免费| 亚洲精品一区久久久久久| 欧美另类老肥妇| 另类欧美小说| 老司机精品久久| 国产91丝袜美女在线播放| 欧美怡红院视频| 二区三区在线播放| 国产精品中文久久久久久久| 日韩在线视频精品| 中文字幕国产高清| 亚洲啪啪综合av一区二区三区| 国产男女裸体做爰爽爽| 欧美www在线| 亚洲电影一区| www.日本在线播放| 久久精品免视看| 中文字幕黄色av| 久久精品最新地址| 日韩一区网站| 欧美综合在线播放| 久久嫩草精品久久久久| 国产裸体美女永久免费无遮挡| 日韩最新中文字幕电影免费看| 国产精品777777在线播放| 国产人妻人伦精品| 99国产欧美另类久久久精品| 激情五月婷婷网| www.xxxx精品| 久久人人爽人人爽人人片av不| 成人一级片网站| 国产精品免费视频一区| 国产成人av免费看| 51午夜精品视频| 999国产精品永久免费视频app| 男生和女生一起差差差视频| 亚洲国产精品嫩草影院| 你懂得网站在线| 91精品视频免费| 国产欧美一级| 97在线观看免费高| 亚洲福利视频网| 欧美a视频在线| 国产无限制自拍| 中文子幕无线码一区tr| 亚洲国产精品视频在线| 日韩美女在线看| 国内综合精品午夜久久资源| 香蕉视频黄色在线观看| 91精品国产综合久久国产大片| 黄色污网站在线观看| 在线天堂一区av电影| 99久久伊人精品| 6—12呦国产精品| 97超碰蝌蚪网人人做人人爽| 9999国产精品| 成人午夜福利一区二区| 日韩欧美一级二级三级久久久| 日韩成人影音| 国内精品视频一区二区三区|