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

生產者的實現邏輯-kafka知識體系(二)

開發 架構 Kafka
Kafka是最初由Linkedin公司開發,是一個分布式、支持分區的(partition)、多副本的(replica),基于zookeeper協調的分布式消息系統,它的最大的特性就是可以實時的處理大量數據以滿足各種需求場景。

[[409180]]

kafka 是單條發送還是批量發送消息?

kafka 怎么做到單條發送?

kafka 發送消息是順序的嗎?

生產者什么情況下可能會頻繁FullGC?

消息發送的邏輯

上帝視角來看消息發送的流程。

生產者的設計

消費發送機制:

1)序列化器:序列化消息對象轉成字節數組,然后通過網絡傳輸。

2)分區器:計算消息發往的具體分區;如果顯示指定了partition,便不會走分區器。

3)消息緩沖池:客戶端的消息緩沖池,默認大小32M,見參數buffer.memory。

4)批量發送:緩沖池中消息會按batch分批次發送,默認批次大小16KB,見參數batch.size。

負載均衡設計:

由于消息topic 由多個partition 組成,且partition 會均衡分布到不同broker 上。因此,為了有效利用broker 集群的性能,提高消息的吞吐量,producer 可以通過隨機或者hash 等方式,將消息平均發送到多個partition 上,以實現負載均衡。

分區策略:

  1. 輪詢策略,默認策略
  2. 隨機策略,實際表現來看,它要遜于輪詢策略
  3. 按消息鍵保序策略,一旦消息被定義了 Key,那么你就可以保證同一個 Key 的所有消息都進入到相同的分區里面,由于每個分區下的消息處理都是有順序的。

KafkaProducer

源碼

  1. //客戶端ID。在創建 KafkaProducer 時可通過 client.id 定義 clientId,如果未指定,則默認 producer- seq,seq 在進程內遞增,強烈建議客戶端顯示指定 clientId。 
  2.  private final String clientId; 
  3.    //度量的相關存儲容器,例如消息體大小、發送耗時等與監控相關的指標。 
  4.     final Metrics metrics; 
  5.     //分區負載均衡算法,通過參數 partitioner.class 指定。 
  6.     private final Partitioner partitioner; 
  7.     //調用 send 方法發送的最大請求大小,包括 key、消息體序列化后的消息總大小不能超過該值。通過參數 max.request.size 來設置。 
  8.     private final int maxRequestSize; 
  9.     //生產者緩存所占內存的總大小,通過參數 buffer.memory 設置。 
  10.     private final long totalMemorySize; 
  11.     //元數據信息,例如 topic 的路由信息,由 KafkaProducer 自動更新。 
  12.     private final Metadata metadata; 
  13.     //消息記錄累積器 
  14.     private final RecordAccumulator accumulator; 
  15.     //用于封裝消息發送的邏輯,即向 broker 發送消息的處理邏輯。 
  16.     private final Sender sender; 
  17.     //用于消息發送的后臺線程,一個獨立的線程,內部使用 Sender 來向 broker 發送消息。 
  18.     private final Thread ioThread; 
  19.     //壓縮類型,默認不啟用壓縮,可通過參數 compression.type 配置??蛇x值:none、gzip、snappy、lz4、zstd。 
  20.     private final CompressionType compressionType; 
  21.     //錯誤信息收集器,當成一個 metrics,用來做監控的。 
  22.     private final Sensor errors; 
  23.     //用于獲取系統時間或線程睡眠等。 
  24.     private final Time time
  25.     //用于對消息的 key 進行序列化。 
  26.     private final ExtendedSerializer<K> keySerializer; 
  27.     //Serializer< V> valueSerializer 
  28.     private final ExtendedSerializer<V> valueSerializer; 
  29.     //生產者的配置信息。 
  30.     private final ProducerConfig producerConfig; 
  31.     //最大阻塞時間,當生產者使用的緩存已經達到規定值后,此時消息發送會阻塞,通過參數 max.block.ms 來設置最多等待多久。 
  32.     private final long maxBlockTimeMs; 
  33.    //配置控制客戶機等待請求響應的最長時間。如果在超時超時之前沒有收到響應,客戶端將在需要時重新發送請求,或者在重試耗盡時失敗請求。 
  34.     private final int requestTimeoutMs; 
  35.     //生產者端的攔截器,在消息發送之前進行一些定制化處理。 
  36.     private final ProducerInterceptors<K, V> interceptors; 
  37.     //維護 api 版本的相關元信息,該類只能在 kafka 內部使用。 
  38.     private final ApiVersions apiVersions; 
  39.     //kafka 消息事務管理器。 
  40.     private final TransactionManager transactionManager; 
  41.     //kafka 生產者事務上下文環境初始結果。 
  42.     private TransactionalRequestResult initTransactionsResult; 

KafkaProducer 具有如下特征:

  1. KafkaProducer 是線程安全的,可以被多個線程交叉使用。
  2. KafkaProducer 內部包含一個緩存池,存放待發送消息,即 ProducerRecord 隊列,與此同時會開啟一個IO線程將 ProducerRecord 對象發送到 Kafka 集群。
  3. KafkaProducer 的消息發送 API send 方法是異步,只負責將待發送消息 ProducerRecord 發送到緩存區中,立即返回,并返回一個結果憑證 Future。

acks 參數的作用

KafkaProducer 提供了一個核心參數 acks 用來定義消息“已提交”的條件(標準),就是 Broker 端向客戶端承偌已提交的條件,可選值如下:

  1. 0:只要調用 KafkaProducer 的 send 方法返回后即認為成功
  2. all 或 -1:表示消息不僅需要 Leader 節點已存儲該消息,并且要求其副本(準確的來說是 ISR 中的節點)全部存儲才認為已提交,才向客戶端返回提交成功。這是最嚴格的持久化保障,當然性能也最低。
  3. 1:表示消息只需要寫入 Leader 節點后就可以向客戶端返回提交成功。

retries 參數的作用

kafka 在生產端提供的另外一個核心屬性,用來控制消息在發送失敗后的重試次數,設置為 0 表示不重試,重試就有可能造成消息在發送端的重復。從消息發送接口來看:

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

從上面的 API 可以得知,用戶在使用 KafkaProducer 發送消息時,首先需要將待發送的消息封裝成 ProducerRecord,返回的是一個 Future 對象,典型的 Future 設計模式。

Kafka 消息追加流程

KafkaProducer 的 send 方法,并不會直接向 broker 發送消息,kafka 將消息發送異步化,即分解成兩個步驟,send 方法的職責是將消息追加到內存中(分區的緩存隊列中),然后會由專門的 Send 線程異步將緩存中的消息批量發送到 Kafka Broker 中。

主要的方法在KafkaProducer#doSend

將消息追加到生產者的發送緩存區,其實現類為:RecordAccumulator。我們先來看一下 Kafka 一條消息寫到內存的流程圖:

Sender線程

到此為止,我們看到,當我們調用send 方法的時候,其實只是發送到了 生產者客戶端的服務內存中。還沒有到Broker。Kafka producer 客戶端后臺會啟動一個線程不停的輪詢消息批次存放的區域,把消息發送給Broker。

消息批次的內存結構和分配

根據上面的源碼我們可以了解到,每一個ProducerBatch 是一塊 大小為batch.size 字節大小的內存。而且用到了池化技術。

緩沖池的內存持有類是 BufferPool,我們先來看下 BufferPool 都有哪些成員:

  1. public class BufferPool { 
  2.   // 總的內存大小 
  3.   private final long totalMemory; 
  4.   // 每個內存塊大小,即 batch.size 
  5.   private final int poolableSize; 
  6.   // 申請、歸還內存的方法的同步鎖 
  7.   private final ReentrantLock lock; 
  8.   // 空閑的內存塊 
  9.   private final Deque<ByteBuffer> free
  10.   // 需要等待空閑內存塊的事件 
  11.   private final Deque<Condition> waiters; 
  12.   /** Total available memory is the sum of nonPooledAvailableMemory and the number of byte buffers in free * poolableSize.  */ 
  13.   // 緩沖池還未分配的空閑內存,新申請的內存塊就是從這里獲取內存值 
  14.   private long nonPooledAvailableMemory; 
  15.   // ... 

從 BufferPool 的成員可看出,緩沖池實際上由一個個 ByteBuffer 組成的,BufferPool 持有這些內存塊,并保存在成員 free 中,free 的總大小由 totalMemory 作限制,而 nonPooledAvailableMemory 則表示還剩下緩沖池還剩下多少內存還未被分配。

當 Batch 的消息發送完畢后,就會將它持有的內存塊歸還到 free 中,以便后面的 Batch 申請內存塊時不再創建新的 ByteBuffer,從 free 中取就可以了,從而避免了內存塊被 JVM 回收的問題。

創建內存塊的流程如下:

歸還內存塊的邏輯流程

如果歸還的內存塊大小等于 batchSize,則將其清空后添加到緩沖池的 free 中,即將其歸還給緩沖池,避免了 JVM GC 回收該內存塊。如果不等于就直接將內存大小累加到未分配并且空閑的內存大小值中即可,內存就無需歸還了,等待 JVM GC 回收掉,最后喚醒正在等待空閑內存的線程。

Java生產者是如何管理TCP連接的

為何采用 TCP?

Apache Kafka 的所有通信都是基于 TCP 的,而不是基于 HTTP 或其他協議。無論是生產者、消費者,還是 Broker 之間的通信都是如此。

從社區的角度來看,在開發客戶端時,人們能夠利用 TCP 本身提供的一些高級功能,比如多路復用請求以及同時輪詢多個連接的能力。

TCP 的多路復用請求會在一條物理連接上創建若干個虛擬連接,每個虛擬連接負責流轉各自對應的數據流。其實嚴格來說,TCP 并不能多路復用,它只是提供可靠的消息交付語義保證,比如自動重傳丟失的報文。

而且目前已知的 HTTP 庫在很多編程語言中都略顯簡陋。

何時創建 TCP 連接?

TCP 連接是在創建 KafkaProducer 實例時建立的 ,在創建 KafkaProducer 實例時,生產者應用會在后臺創建并啟動一個名為 Sender 的線程,該 Sender 線程開始運行時首先會創建與 Broker 的連接。

  1. Properties properties = new Properties(); 
  2. properties.put("bootstrap.servers""localhost:9092"); 
  3. properties.put("key.serializer", StringSerializer.class.getName()); 
  4. properties.put("value.serializer", StringSerializer.class.getName()); 
  5. // try-with-resources 
  6. // 創建KafkaProducer實例時,會在后臺創建并啟動Sender線程,Sender線程開始運行時首先會創建與Broker的TCP連接 
  7. try (Producer<String, String> producer = new KafkaProducer<>(properties)) { 
  8.     ProducerRecord<String, String> record = new ProducerRecord<>(TOPIC, KEY, VALUE); 
  9.     Callback callback = (metadata, exception) -> { 
  10.     }; 
  11.     producer.send(record, callback); 
  1. bootstrap.servers是Producer的核心參數之一,指定了Producer啟動時要連接的Broker地址
  2. 如果bootstrap.servers指定了1000個Broker,那么Producer啟動時會首先創建與這1000個Broker的TCP連接
  3. 因此不建議把集群中所有的Broker信息都配置到bootstrap.servers中,通常配置3~4臺足夠
  4. Producer一旦連接到集群中的任意一臺Broker,就能拿到整個集群的Broker信息(metadata request)

TCP 連接還可能在兩個地方被創建:一個是在更新元數據后,另一個是在消息發送時。

  • 當Producer更新了集群的元數據后,如果發現與某些Broker當前沒有連接,那么Producer會創建一個TCP連接

【場景1】

當Producer嘗試向不存在的主題發送消息時,Broker會告訴Producer這個主題不存在,此時Producer會發送metadata request到Kafka集群,去嘗試獲取最新的元數據信息,與集群中所有的Broker建立TCP連接。

【場景2】

Producer通過metadata.max.age.ms參數定期地去更新元數據信息,默認值300000,即5分鐘。

  • 當Producer要發送消息時,Producer發現與目標Broker(依賴負載均衡算法)還沒有連接,也會創建一個TCP連接。

何時關閉 TCP 連接?

Producer端關閉TCP連接有兩種方式:用戶主動關閉、Kafka自動關閉。

【用戶主動關閉】

廣義的主動關閉,包括用戶調用kill -9來殺掉Producer,最推薦的方式:producer.close()

【Kafka自動關閉】

Producer端參數connections.max.idle.ms,默認值540000,即9分鐘

如果9分鐘內沒有任何請求經過某個TCP連接,Kafka會主動把TCP連接關閉

connections.max.idle.ms=-1會禁用這種機制,TCP連接將成為永久長連接

Kafka創建的Socket連接都開啟了keepalive。

【注意】

關閉TCP連接的發起方是Kafka客戶端,屬于被動關閉的場景

被動關閉的后果就是會產生大量的CLOSE_WAIT連接

Producer端或Client端沒有機會顯式地觀測到此TCP連接已被中斷

總結

現在我們可以回答開頭的3個問題了。

1、kafka 是單條發送還是批量發送消息?

正常情況下都是批量發送的。封裝成一個ProducerBatch 發送。

2.kafka 怎么做到單條發送?

只能設置單生產者單線程同步調用send 方法。

3.kafka 發送消息是順序的嗎?

不是的,如果需求順序必須設置key,并且是生產者是單線程的。

4.生產者什么情況下可能會頻繁FullGC?

如果你的消息大小比 batchSize 還要大,則不會從 free 中循環獲取已分配好的內存塊,而是重新創建一個新的 ByteBuffer,并且該 ByteBuffer 不會被歸還到緩沖池中(JVM GC 回收),如果此時 nonPooledAvailableMemory 比消息體還要小,還會將 free 中空閑的內存塊銷毀(JVM GC 回收),以便緩沖池中有足夠的內存空間提供給用戶申請,這些動作都會導致頻繁 GC 的問題出現。

因此,需要根據業務消息的大小,適當調整 batch.size 的大小,避免頻繁 GC。

責任編輯:姜華 來源: 今日頭條
相關推薦

2021-07-08 05:52:34

Kafka架構主從架構

2021-07-07 07:06:31

Brokerkafka架構

2021-07-08 07:16:24

RocketMQ數據結構Message

2021-07-14 17:18:14

RocketMQ消息分布式

2021-07-13 11:52:47

順序消息RocketMQkafka

2015-07-28 17:52:36

IOS知識體系

2021-09-09 06:55:43

kafka冪等生產者

2020-08-04 10:45:05

運維架構技術

2021-07-12 10:25:03

RocketMQ數據結構kafka

2021-07-02 06:27:00

Kafka架構主從架構

2022-05-10 10:06:03

Kafka

2021-12-22 11:00:05

模型Golang語言

2017-06-22 13:07:21

2012-03-08 11:13:23

企業架構

2017-02-27 16:42:23

Spark識體系

2017-04-03 15:35:13

知識體系架構

2015-08-26 09:39:30

java消費者

2020-04-17 14:49:34

Kafka分區數據

2021-12-28 12:01:59

Kafka 消費者機制

2022-05-23 08:20:29

Kafka生產者元數據管理
點贊
收藏

51CTO技術棧公眾號

99久久综合狠狠综合久久| 98精品视频| 欧美这里有精品| 在线综合视频网站| 免费看日韩av| 免费人成黄页网站在线一区二区| 久久成年人视频| 亚洲中文字幕无码一区| 福利视频亚洲| 午夜国产精品一区| 国产一区一区三区| 精品福利视频导航大全| 国产精品 欧美精品| 日本欧美在线视频| 欧美极品视频在线观看| 精品国产一级毛片| 亚洲国产成人av在线| 亚洲最大综合网| 麻豆蜜桃在线观看| 亚洲欧洲综合另类在线| 日本欧洲国产一区二区| 全部免费毛片在线播放一个| 久久se精品一区精品二区| 亚州国产精品久久久| 91人妻一区二区三区蜜臀| 亚洲综合福利| 亚洲精品www久久久| 免费人成视频在线播放| 国产一区影院| 色综合视频在线观看| 男人天堂av片| av激情在线| 国产精品久久久久久久久搜平片| 蜜桃av色综合| 深夜福利视频网站| 丰满放荡岳乱妇91ww| 成人欧美一区二区三区黑人孕妇| 国产亚洲欧美日韩高清| 中日韩男男gay无套| 久久久久久久一区二区三区| 久久久久久久久久久久久女过产乱| 国产真实有声精品录音| 亚洲免费一级电影| 国产乱了高清露脸对白| 欧美男人操女人视频| 精品对白一区国产伦| 韩国三级在线播放| 视频在线观看免费影院欧美meiju| 欧美男男青年gay1069videost| 任你操这里只有精品| 91久久国产综合久久91猫猫| 欧美性69xxxx肥| 日韩avxxx| 欧美大片高清| 欧美在线观看视频一区二区三区| 无码无遮挡又大又爽又黄的视频| 粉嫩一区二区三区| 在线视频欧美精品| 波多结衣在线观看| 欧美天堂一区| 欧美一区二区三区在线视频| 杨幂一区二区国产精品| 午夜久久av| 亚洲成人在线网| 亚洲精品视频大全| 九九亚洲精品| 久久九九全国免费精品观看| 久久精品黄色片| 激情欧美日韩| 国产91成人video| 成人a v视频| 久久精品二区亚洲w码| 91麻豆桃色免费看| 囯产精品久久久久久| 99久久国产免费看| 日日噜噜噜噜夜夜爽亚洲精品| 电影av在线| 亚洲欧美日韩人成在线播放| 福利视频免费在线观看| 亚洲成a人片| 欧美精品在线视频| 无码人妻一区二区三区在线| 亚洲精品国产动漫| www国产精品com| jizz国产免费| 日韩中文字幕亚洲一区二区va在线| 国产日韩视频在线观看| 国产91久久久| 日本一区二区视频在线观看| 神马午夜伦理影院| 成人直播视频| 欧美一区二区私人影院日本| 中文字幕丰满孑伦无码专区| 色综合咪咪久久网| 国内精品一区二区三区| 国产情侣小视频| 国产精品99久久久久久似苏梦涵| 久久精品ww人人做人人爽| 男人在线资源站| 婷婷亚洲久悠悠色悠在线播放| 天天爽人人爽夜夜爽| 第四色在线一区二区| 夜夜躁日日躁狠狠久久88av| 真实国产乱子伦对白在线| 久久久国产精品一区二区中文| 国产欧美日韩精品在线观看| 婷婷视频在线观看| 亚洲欧美日韩在线| 亚洲视频在线观看一区二区三区| 国产精品sss在线观看av| 中文字幕精品视频| 亚洲综合一二三| 国产剧情一区二区| 日韩三级电影免费观看| 极品美鲍一区| 日韩精品一区在线观看| 国产一二三四视频| 噜噜噜91成人网| 好吊妞www.84com只有这里才有精品| 午夜激情视频在线| 91久久国产最好的精华液| 亚洲精品激情视频| 婷婷精品进入| 国产欧美精品日韩| 国产永久av在线| 欧美丝袜一区二区三区| 国产精品亚洲一区二区无码| 一区二区日韩欧美| 91深夜福利视频| 亚洲1卡2卡3卡4卡乱码精品| 在线观看视频欧美| 成人免费av片| 亚洲男女自偷自拍| 精品乱色一区二区中文字幕| 国产区美女在线| 日韩午夜电影在线观看| 欧美爱爱免费视频| 久久精品国产久精国产| 日韩精品欧美专区| 色8久久影院午夜场| 亚洲免费视频在线观看| 精品国产一区二区三区四| 92国产精品观看| 国产免费一区二区三区视频| 欧美久久香蕉| 欧美一区亚洲一区| 欧美女子与性| 91久久精品日日躁夜夜躁欧美| 亚洲av无码一区二区三区人| 久久婷婷久久| 神马欧美一区二区| 国产69精品久久| 色吧影院999| 国产精品怡红院| 亚洲男人的天堂网| 性生活在线视频| 韩日精品视频| 久久综合九色综合久99| 亚洲精品国产精品国产| 夜夜嗨av色一区二区不卡| 国产精品无码一区| 国产精品福利影院| 国产亚洲色婷婷久久| 精品动漫av| 久久综合中文色婷婷| 免费亚洲电影| 久久久999精品| 国产黄色片免费| 天天综合日日夜夜精品| 熟女俱乐部一区二区| 免费在线观看视频一区| 男同互操gay射视频在线看| 欧美日本三级| 538国产精品视频一区二区| 六十路在线观看| 欧美精品久久99| 久久网免费视频| 久久久亚洲精品一区二区三区 | 色8久久人人97超碰香蕉987| 人妻精品久久久久中文| 国产一区二区三区免费看| 欧美精品久久久久久久自慰| 国产探花在线精品| 亚洲xxxx在线| 成人片免费看| 久久久999精品免费| 天堂√在线中文官网在线| 欧美日韩一区在线观看| 久久久一二三区| 国产日韩av一区二区| 又黄又爽又色的视频| 久久尤物视频| 在线观看17c| 国产精品欧美在线观看| 97超级碰碰| 日韩欧美少妇| 国外成人性视频| 美女羞羞视频在线观看| 精品爽片免费看久久| 国产女人爽到高潮a毛片| 日韩欧美国产一区二区| 国产激情无码一区二区三区| 久久久影视传媒| 18禁一区二区三区| 裸体在线国模精品偷拍| 久久精品免费一区二区| 欧美在线高清| 色女人综合av| 日韩影视高清在线观看| 春色成人在线视频| 日本久久一区| 国产成人精品视频| 僵尸再翻生在线观看免费国语| 久久成人精品电影| 99视频在线观看地址| 亚洲男人天天操| 秋霞网一区二区| 欧美videos大乳护士334| 中文字幕永久在线视频| 一本色道**综合亚洲精品蜜桃冫| 国产精品23p| 一区二区三区自拍| 黄色精品视频在线观看| 国产精品三级电影| 韩国三级hd中文字幕| 91玉足脚交白嫩脚丫在线播放| 国产精品偷伦视频免费观看了| 免费高清在线一区| 99久久国产宗和精品1上映| 亚洲国产黄色| 男人天堂av片| 亚洲成人直播| 91免费国产精品| 综合亚洲视频| 午夜探花在线观看| 午夜片欧美伦| 二级片在线观看| 久久久久亚洲| 欧美一二三不卡| 午夜日韩av| 99er在线视频| 在线日韩欧美| 日本www在线播放| 久久精品免费| 国产91色在线观看| 美女看a上一区| 日韩在线一区视频| 国产一区二区福利视频| 亚洲国产日韩在线一区| 粉嫩久久99精品久久久久久夜| 人妻av一区二区三区| 成人精品国产一区二区4080| 国产一级伦理片| 91香蕉视频黄| 少妇无套高潮一二三区| 国产精品福利在线播放| 黄页网站免费观看| 午夜精品福利久久久| 亚洲s码欧洲m码国产av| 在线观看日韩电影| 国产精品久久无码一三区| 日韩三级中文字幕| 天天爱天天干天天操| 亚洲欧美色婷婷| 91青青在线视频| 欧美成人高清视频| 91色在线看| 国产精品69精品一区二区三区| 国产亚洲人成a在线v网站| 亚洲一区二区在线| 欧美人体视频| 亚洲精品一区二区三区四区五区| 欧美一区网站| 欧美精品99久久| 蜜臀91精品一区二区三区 | 给我免费播放片在线观看| 久久电影一区| 亚洲欧美天堂在线| 波多野结衣中文字幕一区二区三区| 人妻精品久久久久中文| 亚洲蜜臀av乱码久久精品| 日韩欧美亚洲视频| 欧美私模裸体表演在线观看| www.天天干.com| 国产亚洲欧美视频| 色a资源在线| 国产精品久久中文| 久久婷婷国产| 伊人av成人| 亚洲综合精品四区| 亚洲精品久久久久久| 久久久久久毛片| 91porn在线视频| 色又黄又爽网站www久久| 亚洲第一成人av| 最近日韩中文字幕中文| 理论不卡电影大全神| 5566中文字幕一区二区| 国产精品欧美日韩一区| 欧洲精品在线播放| 久久精品久久综合| 可以直接看的无码av| 亚洲一区二区综合| 在线视频欧美亚洲| 亚洲美女av网站| 欧美激情成人动漫| 成人xxxx视频| 国产日韩欧美一区二区三区| 亚洲色欲久久久综合网东京热| 美女视频免费一区| 在线小视频你懂的| 欧美午夜美女看片| 熟妇高潮一区二区三区| 九九精品视频在线| 4438五月综合| 四虎影院一区二区三区 | 成人精品一区二区三区免费| 97视频色精品| www.爱久久| 麻豆传媒网站在线观看| 精品一区二区三区在线播放视频 | 国产不卡av一区二区| 六月婷婷在线视频| 国产成a人亚洲精| 欧美一级特黄高清视频| 欧美中文字幕一区二区三区亚洲| 桃花色综合影院| 7777kkkk成人观看| 果冻天美麻豆一区二区国产| 成年丰满熟妇午夜免费视频| 国产综合色产在线精品| 视频国产一区二区| 欧美精品免费视频| 午夜视频在线观看网站| 国产欧美一区二区三区久久| 欧美精品一区二区三区中文字幕| 精品中文字幕av| 91在线视频18| 五月婷婷中文字幕| 亚洲精选中文字幕| 一区二区三区短视频| 久久伊人资源站| 日精品一区二区| 国产精品成人在线视频| 欧美四级电影在线观看| 蜜桃视频网站在线| 91亚洲精品一区| 欧美日韩国产高清| 国产综合内射日韩久| 亚洲成人激情自拍| 亚洲av片一区二区三区| 日韩av理论片| 日本一区二区三区视频| 中文字幕 91| 亚洲欧洲制服丝袜| 成人久久精品人妻一区二区三区| 欧美激情一区二区三级高清视频 | 国产一区二区网址| 少妇影院在线观看| 精品国精品自拍自在线| 日韩激情电影免费看| 日韩电影在线播放| 精品一区二区在线播放| 免费看一级一片| 日韩精品在线看| 日本免费成人| 国产精品久久久久久久久电影网| 99久久伊人网影院| 一级一级黄色片| 色综合久久久久久中文网| 私拍精品福利视频在线一区| 日日碰狠狠丁香久燥| 亚洲三级理论片| 日韩一级片免费| 国产精品久久色| 欧美福利电影在线观看| 黄色污在线观看| 欧美日韩精品一二三区| 日本在线视频网址| 日本中文不卡| 国产精品羞羞答答xxdd| 91玉足脚交嫩脚丫在线播放| 日韩在线一区二区三区免费视频| 2021年精品国产福利在线| 精品免费国产一区二区| 亚洲精品视频自拍| 狠狠色伊人亚洲综合网站l| 91精品天堂| 视频一区二区中文字幕| 99热精品免费| 亚洲一区二区精品| 国产乱论精品| 亚洲综合婷婷久久| 日韩欧美精品网站| 午夜av在线播放| 少妇特黄a一区二区三区| gogogo免费视频观看亚洲一| 亚洲一卡二卡在线观看| 97超碰色婷婷| 女人香蕉久久**毛片精品|