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

一文帶您快速入門Kafka

原創 精選
開發 前端
Kafka 是使用 Scala 語言開發的一個多分區、多副本且基于 ZooKeeper 協調的分布式消息系統。目前,它的定位是一個分布式流式處理平臺。

作者 | 蔡柱梁

審校 | 重樓

目標

  1. 了解 Kafka 的重要概念
  2. 搭建 Kafka 服務端
  3. 使用SpringBoot 實現簡單的 Demo

1 了解 Kafka 的重要概念

Kafka 是使用 Scala 語言開發的一個多分區、多副本且基于 ZooKeeper 協調的分布式消息系統。目前,它的定位是一個分布式流式處理平臺。

Kafka 在我們工作中最常扮演的三個角色:

  • 消息系統

Kafka 和傳統的消息中間件一樣具有系統解耦、冗余存儲、流量削峰、異步通信等功能。

  • 存儲系統

Kafka 會將消息持久化到磁盤,并且有多副本機制,有效降低了數據丟失的風險。有時,我們也可以使用它來存儲數據,只需要把對應的數據保留策略設置成為“永久”即可。

  • 流式處理平臺

Kafka 不僅為很多流式處理框架(如:Storm、Spark、Flink 等)提供了可靠的數據來源,還提供了一個完整的流式處理類庫。

1.1 基本概念

上圖(圖出自于《深入理解Kafka核心設計與實踐原理》)體現了 Kafka 的整體架構,Producer 發送消息,Kafka 將元數據存儲在 ZK 中并交由ZK 管理,Consumer 通過拉模式獲取消息。

  • Producer

生產者,消息的投遞方,負責創建消息并投遞到 Kafka 中。

  • Broker

Kafka 服務實例

  • Consumer

消費者,處理消息的一方

上面的概念都是物理層面上的,但是在實際使用過程中還有很多邏輯方面的定義,這些概念也是需要了解的。如果不了解,就算勉強寫出了代碼,但是自己還是一臉懵不知道自己都定義了什么,它們都有什么意義,估計離生產故障就不遠了。

接下來我們再去了解三個重要的邏輯概念:

  • Topic(主題)

生產者創建消息是要發送給特定的主題的,而消費者拉取消息也是要指定主題的。消息就是通過主題來歸類的。

  • Partition(分區)

一個Topic 可以有多個 Patition,而一個 Partition 只屬于一個 Topic。同一個 Topic 下,不同 Partition 存儲的消息是不同的。

  • Offset(偏移量)

Kafka 的消息是可以持久化并反復消費的,這是因為在每個分區中,當有消息寫入就會像追加日志那樣順序寫入(順序IO的寫入性能是十分好的),通過Offset 來記錄對應消息所在的位置。因此,Offset 是消息在 Partition 中的唯一標識,并且能看出同一個 Partition 內的消息的先后順序,我們稱之為 “Kafka 保證消息在分區內是有序的”。

為了更好,更直觀體現上面三者的關系,我們先一起看下圖(圖出自于《深入理解Kafka核心設計與實踐原理》)

該圖展示了一個擁有4個 Partition 的 Topic,而分區里面的阿拉伯數字就是 Offset(也表示著一條消息),虛線部分代表新消息可以插入的位置。每條消息在發送到 Broker 之前,會先計算當前消息應該發送到哪個 Partition。因此,只要我們設置合理,消息可以均勻地分配在不同的 Partition 上,當發現請求數量激增時,我們也可以考慮通過適當增加 Partition(Broker 也要增加)的方式,從而降低每個 Broker 的 I/O 壓力。

另外,為了降低消息丟失的風險,Kafka 為 Partition 引進了多副本(Replica)機制,通過增加副本數量來提高容災能力。副本之間采用的是“一主多從”的設計,其中 Leader 負責讀寫請求,Follower 則僅負責同步 Leader 的消息(這種設計方式,大家應該要意識到會存在同步滯后的問題),并且副本處于不同的 Broker 中,當 Leader 出現故障(一般是因為其所在的 Broker 出現故障導致的)時,就從 Follower 中重新選舉出新的 Leader 提供服務。當選出新的 Leader 并恢復服務后,Consumer 可以通過之前自己保存的 Offset 來繼續拉取消息消費。

結合到目前為止我們所知道的知識點,一起看下 4 個 Broker 的 Kafka 集群中,某一個 Topic 有三個 Partition,其副本因子為 3(副本因子為3就是每個 Partition 有 3 個副本,一個 Leader,兩個 Follower)的架構圖(圖出自于《深入理解Kafka核心設計與實踐原理》)。

1.2 Message 與 Partition

在 1.1 小節中,我們已經知道一條消息只會存在一個 Partition中(只管 Leader,不管 Follower),而 Offset 則是消息在 Partition 中的唯一標識。而在本章節,我們將一起更深入地了解消息與 Partition 的關系,還有副本間同步數據所衍生的一些概念。

上面有提到 Kafka 的多副本機制是 Leader 提供讀寫,而 Flower 是需要同步 Leader 的數據的,那么具體是怎樣的呢?請看下圖(單主題單分區3副本):

當Producer 不斷往 Leader 寫入消息時,Flower 會不斷去 Leader 拉取消息,但是每臺機器的性能會有出入,所以同步也有差異,正如上圖這般。對于 Consumer 而言,只有 HW 之前的消息是可見可拉取消費的,這樣做有個好處就是當發生故障轉移時,Consumer 的 Offset 也不會發生數組越界的問題。這種做法是 Kafka 權衡利弊后給出的數據可靠性性能平衡的方案,即不采取同步復制(性能差,對于高并發場景是災難般的設計),也不采取異步復制(完全異步,數據丟失問題突出)。

當然,對于Producer 而言就是消息丟失了,有時我們需要確保消息百分百投遞,這樣不就有問題了嗎?不急,Kafka 可以在 Producer 的配置上配置 acks=-1 + min.insync.replicas=n(n 大于 1),這樣配置后,只有消息被寫入所有副本后,Kafka 服務端才會返回 ack 給 Producer。

下面來梳理下上面提及的幾個概念:

  • HW(Heigh Watermark)

它標識了Consumer 可以拉取消息的最高水位,客戶端拉取的 Offset 必須小于 HW。

  • LEO(Log End Offset)

這個標記位標識下一條寫入的消息應該存放的位置。

  • AR(Assigned Rplicas)

所有副本的統稱

  • ISR(In-Syns Rplicas)

與Leader 保持一定程度同步的 Flower 集合。這個一定程度指的是在可容忍滯后范圍內,這個可容忍范圍可以通過配置修改。

  • OSR(Out-of-Sync Rplicas)

同步滯后超過了容忍范圍的Flower 集合。

2 搭建 Kafka 服務端

這里僅以單節點為例,不配置集群。

2.1 安裝 ZooKeeper

在第一章節,我們知道 Kafka 會將元數據交由 ZK 管理,所以我們要先安裝好 ZK。

1.首先檢查自己的Linux 是否安裝好了 yum 工具

rpm -qa|grep yum

使用 yum 安裝好 wget

2.下載 ZK

wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

3.解壓

tar -zxvf zookeeper-3.4.6.tar.gz

4.為ZK 創建存放數據和日志的文件夾


mkdir data 
mkdir logs

5.修改ZK 配置文件

cd conf
cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

修改配置內容具體如下:

# ZooKeeper 服務器心跳時間,單位:毫秒
tickTime=2000
# 投票選舉新 Leader 的初始化時間
initLimit=10
# Leader 與 Flower 心跳檢測最大容忍時間,響應超過 syncLimit*tickTime,就剔除 Flower
syncLimit=5
# 存放數據的文件夾
dataDir=/root/zookeeper-3.4.6/data
# 存放日志的文件夾
dataLogDir=/root/zookeeper-3.4.6/logs
# ZooKeeper提供給接入客戶端的連接端口
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature

接著,到 /root/zookeeper-3.4.6/data 創建文件 myid(如果部署的是集群,那么這個 myid 必需唯一,不能重復)。

cat > myid
vi myid

具體如下:

6.配置環境變量

vi /etc/profile
 export ZOOKEEPER_HOME=/root/zookeeper-3.4.6
export PATH=$PATH:$ZOOKEEPER_HOME/bin

再執行 source /etc/profile

至此,ZooKeeper 已經配置好了,我們可以啟動看下是否有問題。

2.2 安裝 Kafka

1.官網下載安裝包

2.使用 psftp 上傳到服務器

# put dir remoteDir
put D:\downloads\kafka_2.13-3.5.0.tgz /root/kafka_2.13-3.5.0.tgz

3.解壓


tar -zxvf kafka_2.13-3.5.0.tgz

4.修改配置


cd kafka_2.13-3.5.0cd config/

 由于 server.properties 比較大,就不全部貼上來了,只貼我修改的部分:

# 是Broker的標識,因此在集群中必需唯一
broker.id=0
# Broker 對外服務地址(我這里vmware的ip是192.168.226.140)
listeners=PLAINTEXT://192.168.226.140:9092
# 實際工作中,會分內網外網,當有需要提供給外部客戶端使用時,我們一般 listeners 配置內網供 Broker 之間通信使用,而 advertised.listeners 配置走外網給接入的客戶端使用
#advertised.listeners=PLAINTEXT://your.host.name:9092
# 存放消息日志文件地址
log.dirs=/root/kafka_2.13-3.5.0/logs
# ZK 的訪問路徑,我這里因為 ZK 和 Kafka 放在了同一個服務器上,所以就使用了 localhost
zookeeper.connect=localhost:2181

5.修改環境變量

vi /etc/profile
 export KAFKA_HOME=/root/kafka_2.13-3.5.0
export PATH=$PATH:$KAFKA_HOME/bin

再執行 source /etc/profile

6.進入bin目錄,啟動 Broker

kafka-server-start.sh ../config/server.properties &

ps -ef|grep kafka 看下進程,但是是否已經可以使用,要通過發送消息和消費消息來驗證。

3 使用 Spring Boot 實現簡單的 Demo

下面是示例代碼:

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <!-- spring boot3.0+ 只支持jdk17,如果使用1.8出現包沖突需要自己處理 -->
        <version>2.7.12</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example.czl</groupId>
    <artifactId>kafka</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-kafka</name>
    <description>spring boot集成kafka demo</description>
    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
        <velocity-engine-core.version>2.3</velocity-engine-core.version>
        <lombok.version>1.18.26</lombok.version>
        <guava.version>31.1-jre</guava.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>scala-library</artifactId>
                    <groupId>org.scala-lang</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>scala-reflect</artifactId>
                    <groupId>org.scala-lang</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>${velocity-engine-core.version}</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
    </dependencies>

    <!-- 對于一些特殊的依賴指定特定版本 -->
    <!--<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.yaml</groupId>
                <artifactId>snakeyaml</artifactId>
                <version>2.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>-->

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


application.yml

spring:
  application:
    name: spring-boot-kafka
  profiles:
    active: dev

server:
  port: 8080

application-dev.yml

spring:
  datasource:
    url: "jdbc:mysql://***:***/***?useSSL=false&useUnicode=true&characterEncoding=utf8&ApplicationName=spring-boot-demo&serverTimezone=UTC&allowMultiQueries=true"
    username: "***"
    password: "***"
  kafka:
    bootstrap-servers: "192.168.226.140:9092" # 訪問Kafka服務端的地址
    consumer:
      group-id: ${spring.application.name}-${spring.profiles.active} # 一條消息只會被訂閱了該主題的同一個分組內的一個消費者消費

mybatis-plus:
  configuration:
    # 打印sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_PATH_HOME" value="./logs/spring-boot-kafka"/>
    <property name="LOG_LEVEL" value="INFO"/>

    <!-- 日志文件布局 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}\(%L\) - [%X{traceId}] %msg%n</pattern>
        </encoder>
        <!-- 按時間大小歸檔日志 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <FileNamePattern>${LOG_PATH_HOME}/log.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <maxFileSize>200MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!-- 控制臺日志布局 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}\(%L\) - [%X{traceId}] %msg%n</Pattern>
        </encoder>
    </appender>

    <logger name="org.springframework.web.filter.CommonsRequestLoggingFilter" level="INFO"/>
    <logger name="org.springframework" level="INFO"/>
    <logger name="com.czl.demo" level="${LOG_LEVEL}"/>
    <root level="${LOG_LEVEL}">
        <appender-ref ref="FILE"/>
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

ProducerDemo

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Component;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;

/**
 * @author CaiZhuliang
 * @date 2023/6/18
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class ProducerDemo {
    private final KafkaTemplate<String, String> kafkaTemplate;

    /**
     * 發送消息
     * @param topic 主題
     * @param msg 消息
     * @param callback 鉤子
     */
    public void send(String topic, String msg, ListenableFutureCallback<SendResult<String, String>> callback) {
        log.info("發送Kafka消息 - topic : {}, msg : {}", topic, msg);
        ListenableFuture<SendResult<String, String>> future = kafkaTemplate.send(topic, msg);
        if (null != callback) {
            future.addCallback(callback);
        }
    }
}

ConsumerDemo

package com.example.czl.kafka.kafka.producer.consumer;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

/**
 * @author CaiZhuliang
 * @date 2023/6/18
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class ConsumerDemo {
    @KafkaListener(topics = "test-topic-1")
    public void receivingMsg(String msg) {
        log.info("接收到Kafka消息 - msg : {}", msg);
    }
}

TestController

package com.example.czl.kafka.controller;

import com.example.czl.kafka.kafka.producer.ProducerDemo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author CaiZhuliang
 * @date 2023/6/18
 */
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping("/test")
public class TestController {
    private final ProducerDemo producerDemo;

    @GetMapping("/send/kafka_msg")
    public Long sendMsg(String msg) {
        log.info("測試發送kafka消息 - msg : {}", msg);
        producerDemo.send("test-topic-1", msg, null);
        return System.currentTimeMillis();
    }
}

postman請求測試如下:

控制臺信息如下:

作者介紹

蔡柱梁,51CTO社區編輯,從事Java后端開發8年,做過傳統項目廣電BOSS系統,后投身互聯網電商,負責過訂單,TMS,中間件等。

責任編輯:華軒 來源: 51CTO
相關推薦

2021-05-29 10:11:00

Kafa數據業務

2020-09-27 08:00:49

分庫分表

2020-11-27 09:40:53

Rollup前端代碼

2022-05-16 10:49:28

網絡協議數據

2024-05-11 08:18:49

2024-10-08 08:52:59

2023-05-11 08:16:13

可視化監控工具Kafka

2023-02-26 00:00:04

項目標簽體系

2024-08-19 13:46:00

2020-01-03 10:40:36

網絡遙測丟包率

2025-04-30 10:36:17

2022-05-11 11:54:55

Http傳送協議

2020-07-27 08:17:29

DNSGitHub工具

2024-05-31 08:05:29

2019-11-13 15:44:17

Kafka架構數據

2022-08-30 22:12:19

Nacos組件服務注冊

2024-11-08 08:37:25

2024-03-12 17:54:55

容器類型Init

2024-07-11 12:14:20

Pythonmapfilter

2024-03-01 08:13:45

Shell編程解釋器
點贊
收藏

51CTO技術棧公眾號

老牛嫩草一区二区三区日本| 麻豆精品少妇| 亚洲制服丝袜一区| 国产综合欧美在线看| 7799精品视频天天看| 日韩精品影视| 亚洲福利视频在线| 久久国产这里只有精品| 国产第一页在线| 久久亚洲综合色一区二区三区| 国产日韩在线观看av| 精品97人妻无码中文永久在线| 亚洲精品白浆高清| 日韩一区二区三区四区| 成人黄色一区二区| 国产在线xxx| 国产精品视频线看| 精品国产乱码久久久久久丨区2区| 羞羞色院91蜜桃| 亚洲三级国产| 久久的精品视频| 亚洲精品午夜视频| jizzjizzjizz欧美| 欧美日本国产一区| 男人的天堂99| 国产后进白嫩翘臀在线观看视频| 国产精品成人免费在线| 蜜桃传媒视频麻豆一区 | 亚洲无中文字幕| 亚洲欧美激情四射在线日| 四虎国产精品免费| 国产精品诱惑| 欧美中文字幕一区| 日韩欧美一区三区| 牛牛电影国产一区二区| 一区在线中文字幕| 视频一区不卡| 国产最新视频在线| 91视视频在线观看入口直接观看www | 亚洲品质自拍| 亚洲国产精品久久久久秋霞蜜臀 | 瑟瑟视频在线免费观看| 国产亚洲一区在线| 97精品一区二区三区| 青青草手机在线观看| 久久精品亚洲人成影院| 日韩在线一区二区三区免费视频| 能直接看的av| jlzzjlzz亚洲女人| 一本色道久久88综合日韩精品| 国产精品亚洲无码| 亚洲最好看的视频| 亚洲男人天堂视频| 久久成人激情视频| 奇米色欧美一区二区三区| 日韩成人av在线播放| 第四色在线视频| 欧美挤奶吃奶水xxxxx| 亚洲国产又黄又爽女人高潮的| www.啪啪.com| 色婷婷狠狠五月综合天色拍| 精品亚洲国产视频| 成人午夜剧场视频网站| 国产中文字幕一区二区三区| 亚洲午夜精品久久久久久久久久久久| 在线不卡av电影| 日韩高清欧美| 美女性感视频久久久| 九九视频在线观看| 亚洲美洲欧洲综合国产一区| 日本一区二区三区四区视频| 免费观看日批视频| 奇米色777欧美一区二区| 国产三级精品网站| 国产夫妻在线观看| 成年人国产精品| 久久久久成人精品免费播放动漫| 川上优的av在线一区二区| 国产精品国产三级国产| 超级碰在线观看| 成人免费图片免费观看| 欧美性色aⅴ视频一区日韩精品| 999这里有精品| 北条麻妃在线一区二区免费播放 | 欧美日韩一区二区三区在线看| 亚洲黄色av片| 久久动漫网址| 中文字幕av一区中文字幕天堂 | 日韩欧美视频免费观看| 亚洲欧美日韩高清在线| 午夜免费在线观看精品视频| 国产成人av免费| 国产激情一区二区三区| 免费99视频| h片在线免费| 色婷婷一区二区三区四区| 在线免费看v片| 要久久爱电视剧全集完整观看| 日韩亚洲一区二区| 日本少妇性高潮| 精品一区中文字幕| 久久这里精品国产99丫e6| 免费人成在线观看播放视频| 精品成人av一区| 天天操天天干天天做| 欧美色图婷婷| 欧美乱大交xxxxx另类电影| av黄色在线播放| 国产精品亚洲午夜一区二区三区| 蜜桃久久影院| 国产高清在线a视频大全| 欧美日韩在线播| 野外性满足hd| 欧美午夜a级限制福利片| 国产精品中文字幕在线观看| 四虎电影院在线观看| 亚洲自拍欧美精品| 国产一区二区在线观看免费视频| 国产欧美日韩影院| 国内精品久久影院| 91精品中文字幕| 国产午夜精品理论片a级大结局| 久久av高潮av| 大胆国模一区二区三区| 中文字幕日韩在线播放| 国产毛片aaa| 9人人澡人人爽人人精品| 国产女主播av| 国产精品亚洲综合在线观看| 在线国产精品视频| 中文字幕在线观看视频网站| 国产激情91久久精品导航| 一区二区三区四区久久| 国产精品xxx| 中文字幕亚洲激情| 天天干天天插天天射| 91在线观看下载| 免费视频爱爱太爽了| 试看120秒一区二区三区| 麻豆国产精品va在线观看不卡| 中文字幕乱伦视频| 国产欧美日韩综合| 国产又大又黄又粗的视频| 国产精品嫩模av在线| 国产不卡视频在线| 国产在线高清| 欧美丝袜丝nylons| 欧美日韩国产一二三区| 蜜桃视频一区二区三区在线观看| 色999日韩自偷自拍美女| 亚洲第一会所| 在线色欧美三级视频| 中文字幕制服诱惑| 国产精品久久久久久久久久久免费看 | 91麻豆swag| 亚洲中文字幕无码不卡电影| 日韩有码av| 国产成人短视频| 888av在线| 日韩一区二区三区av| 中文字幕影音先锋| www.欧美日韩| 日韩视频免费在线播放| 日韩精品免费一区二区三区| 国产日产欧美a一级在线| 精品视频在线一区二区| 日韩精品一区二区三区在线播放| www.av视频在线观看| av高清不卡在线| 黄色av免费在线播放| 欧美激情偷拍自拍| 99视频日韩| 亚洲欧洲高清| 色偷偷综合社区| 国产日本精品视频| 性久久久久久久| 天天躁日日躁aaaa视频| 久久成人免费日本黄色| 人妻av无码专区| 国产一区二区三区四区二区| 成人午夜在线观看| 98色花堂精品视频在线观看| 国产亚洲激情视频在线| 国产乱码精品一区二区三区精东| 亚洲永久免费av| 永久免费看mv网站入口78| 狠狠久久亚洲欧美| 国产精品无码人妻一区二区在线| 欧美日韩中文一区二区| 91文字幕巨乱亚洲香蕉| 免费电影日韩网站| 精品中文字幕乱| 国产在线网站| 精品国免费一区二区三区| 一级黄色在线视频| 亚洲激情图片小说视频| 熟女俱乐部一区二区| 国产精品一区二区在线播放| 国产91对白刺激露脸在线观看| 香蕉国产精品| 免费成人av网站| 亚洲一二三区视频| 国产精品久久久久久久午夜| 美洲精品一卡2卡三卡4卡四卡| 国产亚洲美女精品久久久| 国产 欧美 自拍| 欧美精品三级在线观看| 无码人妻丰满熟妇精品 | 羞羞色院91蜜桃| 午夜精品一区二区三区三上悠亚| 永久免费观看片现看| 91欧美一区二区| 久久久久亚洲av无码网站| 免费成人在线观看视频| 97国产在线播放| 国产在线欧美| 日韩视频一二三| 99久久国产综合精品成人影院| 欧美日韩国产一二| 国产一区丝袜| 成人激情av| 国产日韩欧美中文在线| 国产精品在线看| 91福利精品在线观看| 欧亚精品中文字幕| 1区2区在线| 欧美极品在线播放| www.久久久久.com| 久久精品男人天堂| 日本成人网址| 最近2019中文免费高清视频观看www99 | 欧州一区二区三区| 国产精品入口免费视| 88xx成人免费观看视频库| 欧美最近摘花xxxx摘花| 激情国产在线| 欧美亚洲在线播放| 中文av在线全新| 欧美亚洲国产精品| 国产剧情av在线播放| 97视频在线免费观看| 182在线播放| 91高清视频在线免费观看| 538视频在线| 欧美富婆性猛交| 国产精品国精产品一二| 亚洲 日韩 国产第一| а√在线中文网新版地址在线| 久久久久久91| 久草在线资源福利站| 欧美最顶级丰满的aⅴ艳星| 超碰超碰人人人人精品| 国产97免费视| 亚洲综合av一区二区三区| 国产精品偷伦免费视频观看的| 国产成人精选| 成人欧美一区二区三区在线| 国产精品一区二区精品| 成人欧美一区二区三区在线观看 | 国产乱码精品1区2区3区| 无码国产精品一区二区高潮| 成人午夜精品在线| avtt香蕉久久| 久久久精品黄色| 网站永久看片免费| 亚洲综合一区二区精品导航| 国产成年人免费视频| 日韩欧美有码在线| 亚洲天堂网在线观看视频| 日韩午夜激情av| 日韩精品系列| 色先锋资源久久综合5566| 午夜羞羞小视频在线观看| 午夜精品一区二区三区av| 日本免费一区二区三区四区| 国产美女被下药99| 亚洲精品不卡在线观看| 久久久久久久久久久久久久久久av| 国产欧美日韩精品一区二区免费 | 精品国产伦一区二区三区免费 | 伊人影院中文字幕| 欧美一区二区日韩| 四虎国产精品永远| 精品久久久999| а√在线天堂官网| 国产精品69av| 2020最新国产精品| 欧美一进一出视频| 欧美久久影院| 日韩一级理论片| 国产99久久久国产精品免费看| 国产三级视频网站| 亚洲免费电影在线| 无码人妻丰满熟妇区bbbbxxxx| 5858s免费视频成人| 免费a视频在线观看| 在线国产精品视频| 九色porny丨入口在线| 91美女高潮出水| 亚洲人成亚洲精品| 欧美大片免费播放| 日韩中文字幕亚洲一区二区va在线| 中文 日韩 欧美| 久久色成人在线| 久久综合久久鬼| 欧美精品日韩一本| 青青青草原在线| 色在人av网站天堂精品| 国产麻豆一区| 日本一区二区三区四区高清视频| 欧美 日韩 国产一区二区在线视频 | 国产人与禽zoz0性伦| 懂色av影视一区二区三区| 精品国产乱码久久久久久蜜臀网站| 亚洲色图欧美制服丝袜另类第一页| 久草在线视频网站| 亚洲一区久久久| 99久久精品网| 国产小视频精品| 久久久久国产精品厨房| 日本亚洲欧美在线| 精品久久国产字幕高潮| 超碰免费在线播放| 国产精品午夜视频| 精品视频97| 久久久久久久少妇| 久久综合九色欧美综合狠狠| 精品少妇theporn| 日韩一级大片在线观看| 国产秀色在线www免费观看| 国产精品欧美日韩久久| 国产欧美日韩免费观看| 欧美黄色一级片视频| 久久丝袜美腿综合| 综合网在线观看| 亚洲精品在线看| 欧美大片1688| 色噜噜一区二区| 日韩成人一级大片| 91在线无精精品白丝| 91官网在线观看| 黄色小视频在线免费观看| 97香蕉超级碰碰久久免费软件| 超碰97久久| 日本久久久网站| www.欧美日韩| 日韩熟女一区二区| 国产一区二区av| 久久久国产精品网站| 在线国产伦理一区| 国产一区二区三区在线观看精品| 四虎精品免费视频| 欧美日韩视频不卡| 成人在线app| 国产精品永久入口久久久| 亚洲免费大片| 一区二区黄色片| 欧美日韩一区在线观看| av片哪里在线观看| 国产精品二区三区| 在线视频观看日韩| 特大黑人巨人吊xxxx| 欧美性猛交xxxx乱大交| 二人午夜免费观看在线视频| 国产欧美日韩中文字幕在线| 91精品观看| 人妻 日韩 欧美 综合 制服| 精品久久在线播放| 成人免费高清在线播放| 91人成网站www| 影音先锋日韩资源| 亚洲精品国产精品国自产网站| 欧美精品久久99久久在免费线| 性直播体位视频在线观看| 久久99精品国产99久久| 日韩专区欧美专区| 欧美日韩在线视频免费播放| 日韩成人黄色av| 九七电影院97理论片久久tvb| 特级黄色录像片| 91一区一区三区| 91国产精品一区| 欧美激情国产高清| 精品国产乱码久久久久久果冻传媒| 午夜精品免费看| 精品国产电影一区| 久做在线视频免费观看| 九九九九九九精品| 精品一区二区三区影院在线午夜 | 欧美变态tickle挠乳网站| 超碰一区二区| 国内外成人激情免费视频| 91性感美女视频| 国产色视频在线| 国产成人黄色av| 亚洲精华国产欧美| 乱老熟女一区二区三区| 日韩国产激情在线| 日韩成人18| www.日本一区|