zoukankan      html  css  js  c++  java
  • Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十七):kafka manager安装

    一、kafka-manager简介

           为了简化开发者和服务工程师维护Kafka集群的工作,yahoo构建了一个叫做Kafka管理器的基于Web工具,叫做 Kafka Manager。这个管理工具可以很容易地发现分布在集群中的哪些topic分布不均匀,或者是分区在整个集群分布不均匀的的情况。它支持管理多个集群、选择副本、副本重新分配以及创建Topic。同时,这个管理工具也是一个非常好的可以快速浏览这个集群的工具,有如下功能:

    • 管理多个集群
    • 轻松检查群集状态(主题,消费者,偏移,代理,副本分发,分区分发)
    • 运行首选副本选举
    • 使用选项生成分区分配以选择要使用的代理
    • 运行分区重新分配(基于生成的分配)
    • 使用可选主题配置创建主题(0.8.1.1具有与0.8.2+不同的配置)
    • 删除主题(仅支持0.8.2+并记住在代理配​​置中设置delete.topic.enable = true)
    • 主题列表现在指示标记为删除的主题(仅支持0.8.2+)
    • 批量生成多个主题的分区分配,并可选择要使用的代理
    • 批量运行重新分配多个主题的分区
    • 将分区添加到现有主题
    • 更新现有主题的配置
    • kafka-manager 项目地址:https://github.com/yahoo/kafka-manager/

    二、kafka-manager安装

    1.下载安装包

    使用Git或者直接从Releases中下载,这里下载 1.3.3.18 版本:https://github.com/yahoo/kafka-manager/releases

     wget https://github.com/yahoo/kafka-manager/archive/1.3.3.18.zip

    2.解压安装包

    Last login: Thu Sep  6 20:51:48 2018 from 192.168.0.103
    [spark@master ~]$ cd /opt/
    [spark@master opt]$ wget https://github.com/yahoo/kafka-manager/archive/1.3.3.18.zip
    [spark@master opt]$ ll
    total 1076
    drwxr-xr-x.  6 root   root        99 Jul  5 07:00 apache-maven-3.5.4
    drwxr-xr-x.  9 spark  spark      155 Jul 18 04:31 elasticsearch-6.2.2
    drwxr-xr-x.  7 spark  spark     4096 Jul 20 22:13 elasticsearch-head-master
    drwxr-xr-x. 11 spark  spark      172 Jul 17 06:28 hadoop-2.9.0
    drwxr-xr-x.  4 root   root       153 Jul  9 05:35 hdfs-over-ftp-master
    drwxr-xr-x.  8     10    143     255 Mar 29 08:18 jdk1.8.0_171
    drwxrwxrwx.  7 root   root       101 Jul 17 07:01 kafka_2.11-1.1.0
    -rw-r--r--.  1 root   root   1075857 Sep 11 21:32 kafka-manager-1.3.3.18.zip
    drwxrwxr-x. 12 spark  spark      232 Feb 17  2018 kibana-6.2.2-linux-x86_64
    -rw-r--r--.  1 root   root      9116 Apr 11  2016 mysql57-community-release-el7-8.noarch.rpm
    drwxrwxr-x. 14 spark  spark      252 Aug  6 20:23 nifi-1.7.1
    drwxr-xr-x.  7 spark  spark       67 Jul 17 22:54 node-8.9.1
    drwxr-xr-x. 10 spark  spark     4096 Jul 17 22:33 node-v8.9.1
    drwxrwxr-x.  6   2000   2000      50 Apr 17  2014 scala-2.11.0
    drwxrwxrwx. 13 hadoop hadoop     236 Sep  6 22:34 spark-2.2.1-bin-hadoop2.7
    drwxrwxrwx. 12 spark  spark     4096 Aug  8 00:23 zookeeper-3.4.12
    [spark@master opt]$ su root
    Password: 
    [root@master opt]# unzip kafka-manager-1.3.3.18.zip 
    Archive:  kafka-manager-1.3.3.18.zip
    8dcdbf8fabb0001691c9b52b447b656f498b4d7b
       creating: kafka-manager-1.3.3.18/
       。。。。
      inflating: kafka-manager-1.3.3.18/test/kafka/test/SeededBroker.scala  
    [root@master opt]# ls
    apache-maven-3.5.4         jdk1.8.0_171                mysql57-community-release-el7-8.noarch.rpm  spark-2.2.1-bin-hadoop2.7
    elasticsearch-6.2.2        kafka_2.11-1.1.0            nifi-1.7.1                                  zookeeper-3.4.12
    elasticsearch-head-master  kafka-manager-1.3.3.18      node-8.9.1
    hadoop-2.9.0               kafka-manager-1.3.3.18.zip  node-v8.9.1
    hdfs-over-ftp-master       kibana-6.2.2-linux-x86_64   scala-2.11.0

    3.sbt编译

    1)yum安装sbt(因为kafka-manager需要sbt编译)

    [root@master opt]# cd kafka-manager-1.3.3.18
    [root@master kafka-manager-1.3.3.18]# ls
    app  build.sbt  conf  img  LICENCE  project  public  README.md  sbt  src  test
    [root@master kafka-manager-1.3.3.18]# sbt
    bash: sbt: command not found
    [root@master kafka-manager-1.3.3.18]# cd ..
    [root@master opt]#  curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100   160    0   160    0     0     21      0 --:--:--  0:00:07 --:--:--    40
    [root@master opt]# ll
    total 1080
    drwxr-xr-x.  6 root   root        99 Jul  5 07:00 apache-maven-3.5.4
    -rw-r--r--.  1 root   root       160 Sep 11 21:38 bintray-sbt-rpm.repo
    drwxr-xr-x.  9 spark  spark      155 Jul 18 04:31 elasticsearch-6.2.2
    drwxr-xr-x.  7 spark  spark     4096 Jul 20 22:13 elasticsearch-head-master
    drwxr-xr-x. 11 spark  spark      172 Jul 17 06:28 hadoop-2.9.0
    drwxr-xr-x.  4 root   root       153 Jul  9 05:35 hdfs-over-ftp-master
    drwxr-xr-x.  8     10    143     255 Mar 29 08:18 jdk1.8.0_171
    drwxrwxrwx.  7 root   root       101 Jul 17 07:01 kafka_2.11-1.1.0
    drwxr-xr-x.  9 root   root       189 Jul  7 04:44 kafka-manager-1.3.3.18
    -rw-r--r--.  1 root   root   1075857 Sep 11 21:32 kafka-manager-1.3.3.18.zip
    drwxrwxr-x. 12 spark  spark      232 Feb 17  2018 kibana-6.2.2-linux-x86_64
    -rw-r--r--.  1 root   root      9116 Apr 11  2016 mysql57-community-release-el7-8.noarch.rpm
    drwxrwxr-x. 14 spark  spark      252 Aug  6 20:23 nifi-1.7.1
    drwxr-xr-x.  7 spark  spark       67 Jul 17 22:54 node-8.9.1
    drwxr-xr-x. 10 spark  spark     4096 Jul 17 22:33 node-v8.9.1
    drwxrwxr-x.  6   2000   2000      50 Apr 17  2014 scala-2.11.0
    drwxrwxrwx. 13 hadoop hadoop     236 Sep  6 22:34 spark-2.2.1-bin-hadoop2.7
    drwxrwxrwx. 12 spark  spark     4096 Aug  8 00:23 zookeeper-3.4.12
    [root@master opt]# mv bintray-sbt-rpm.repo /etc/yum.repos.d/
    [root@master opt]#  yum install sbt
    Loaded plugins: fastestmirror
    Determining fastest mirrors
     * base: mirrors.zju.edu.cn
     * extras: mirrors.shu.edu.cn
     * updates: mirrors.zju.edu.cn
    base                                                                                                         | 3.6 kB  00:00:00     
    bintray--sbt-rpm                                                                                             | 1.3 kB  00:00:00     
    extras                                                                                                       | 3.4 kB  00:00:00     
    mysql-connectors-community                                                                                   | 2.5 kB  00:00:00     
    mysql-tools-community                                                                                        | 2.5 kB  00:00:00     
    mysql57-community                                                                                            | 2.5 kB  00:00:00     
    updates                                                                                                      | 3.4 kB  00:00:00     
    (1/4): extras/7/x86_64/primary_db                                                                            | 187 kB  00:00:00     
    (2/4): mysql-connectors-community/x86_64/primary_db                                                          |  26 kB  00:00:00     
    (3/4): bintray--sbt-rpm/primary                                                                              | 3.8 kB  00:00:02     
    (4/4): updates/7/x86_64/primary_db                                                                           | 5.2 MB  00:00:02     
    bintray--sbt-rpm                                                                                                              32/32
    Resolving Dependencies
    --> Running transaction check
    ---> Package sbt.noarch 0:1.2.1-0 will be installed
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ====================================================================================================================================
     Package                   Arch                         Version                        Repository                              Size
    ====================================================================================================================================
    Installing:
     sbt                       noarch                       1.2.1-0                        bintray--sbt-rpm                       1.1 M
    
    Transaction Summary
    ====================================================================================================================================
    Install  1 Package
    
    Total download size: 1.1 M
    Installed size: 1.2 M
    Is this ok [y/d/N]: y
    Downloading packages:
    sbt-1.2.1.rpm                                                                                                | 1.1 MB  00:00:19     
    Running transaction check
    Running transaction test
    Transaction test succeeded
    Running transaction
      Installing : sbt-1.2.1-0.noarch                                                                                               1/1 
      Verifying  : sbt-1.2.1-0.noarch                                                                                               1/1 
    
    Installed:
      sbt.noarch 0:1.2.1-0                                                                                                              
    
    Complete!

    改仓库地址:(sbt 默认下载库文件很慢, 还时不时被打断),我们可以在用户目录下创建 touch ~/.sbt/repositories, 填上阿里云的镜像   # vi ~/.sbt/repositories  

    [root@master opt]# ls
    apache-maven-3.5.4         jdk1.8.0_171                mysql57-community-release-el7-8.noarch.rpm  spark-2.2.1-bin-hadoop2.7
    elasticsearch-6.2.2        kafka_2.11-1.1.0            nifi-1.7.1                                  zookeeper-3.4.12
    elasticsearch-head-master  kafka-manager-1.3.3.18      node-8.9.1
    hadoop-2.9.0               kafka-manager-1.3.3.18.zip  node-v8.9.1
    hdfs-over-ftp-master       kibana-6.2.2-linux-x86_64   scala-2.11.0
    [root@master opt]# sbt
    Getting org.scala-sbt sbt 1.2.1  (this may take some time)...
    ^C[root@master opt]# sbt -version
    Getting org.scala-sbt sbt 1.2.1  (this may take some time)...
    ^C[root@master opt]# cd kafka-manager-1.3.3.18
    [root@master kafka-manager-1.3.3.18]# ./sbt clean dist
    Downloading sbt launcher for 0.13.9:
      From  http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.9/sbt-launch.jar
        To  /root/.sbt/launchers/0.13.9/sbt-launch.jar
    Download failed. Obtain the jar manually and place it at /root/.sbt/launchers/0.13.9/sbt-launch.jar
    [root@master kafka-manager-1.3.3.18]# vi ~/.sbt/repositories
    [repositories] local aliyun
    -nexus: http://maven.aliyun.com/nexus/content/groups/public/ jcenter: https://jcenter.bintray.com/ typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[c lassifier]).[ext], bootOnly maven-central ~ ~ ~ ~ ~ ~

    2)编译kafka-manager

    [root@master kafka-manager-1.3.3.18]# ./sbt clean dist
    Downloading sbt launcher for 0.13.9:
      From  http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.9/sbt-launch.jar
        To  /root/.sbt/launchers/0.13.9/sbt-launch.jar
    [info] Loading project definition from /opt/kafka-manager-1.3.3.18/project
    Missing bintray credentials /root/.bintray/.credentials. Some bintray features depend on this.
    [info] Set current project to kafka-manager (in build file:/opt/kafka-manager-1.3.3.18/)
    Missing bintray credentials /root/.bintray/.credentials. Some bintray features depend on this.
    [warn] Credentials file /root/.bintray/.credentials does not exist
    [success] Total time: 0 s, completed Sep 11, 2018 10:54:50 PM
    。。。。。
    [info]  [SUCCESSFUL ] jline#jline;2.12.1!jline.jar (340ms)
    [info] Done updating.
    [warn] Scala version was updated by one of library dependencies:
    [warn]  * org.scala-lang:scala-library:(2.11.6, 2.11.8, 2.11.11, 2.11.7, 2.11.5, 2.11.0) -> 2.11.12
    [warn] To force scalaVersion, add the following:
    [warn]  ivyScala := ivyScala.value map { _.copy(overrideScalaVersion = true) }
    [warn] There may be incompatibilities among your library dependencies.
    [warn] Here are some of the libraries that were evicted:
    [warn]  * org.webjars:jquery:1.11.1 -> 2.1.4
    [warn] Run 'evicted' to see detailed eviction warnings
    [info] Wrote /opt/kafka-manager-1.3.3.18/target/scala-2.11/kafka-manager_2.11-1.3.3.18.pom
    [info] Compiling 127 Scala sources and 2 Java sources to /opt/kafka-manager-1.3.3.18/target/scala-2.11/classes...
    [info] 'compiler-interface' not yet compiled for Scala 2.11.8. Compiling...
    [info] Main Scala API documentation to /opt/kafka-manager-1.3.3.18/target/scala-2.11/api...
    [info]   Compilation completed in 8.323 s
    model contains 701 documentable templates
    [info] Main Scala API documentation successful.
    [info] Packaging /opt/kafka-manager-1.3.3.18/target/scala-2.11/kafka-manager_2.11-1.3.3.18-javadoc.jar ...
    [info] Done packaging.
    [info] LESS compiling on 1 source(s)
    [info] Packaging /opt/kafka-manager-1.3.3.18/target/scala-2.11/kafka-manager_2.11-1.3.3.18-web-assets.jar ...
    [info] Done packaging.
    [info] Packaging /opt/kafka-manager-1.3.3.18/target/scala-2.11/kafka-manager_2.11-1.3.3.18.jar ...
    [info] Done packaging.
    [info] Packaging /opt/kafka-manager-1.3.3.18/target/scala-2.11/kafka-manager_2.11-1.3.3.18-sans-externalized.jar ...
    [info] Done packaging.
    [info] 
    [info] Your package is ready in /opt/kafka-manager-1.3.3.18/target/universal/kafka-manager-1.3.3.18.zip
    [info] 
    [success] Total time: 376 s, completed Sep 11, 2018 11:01:06 PM
    [root@master kafka-manager-1.3.3.18]# ls
    app  build.sbt  conf  img  LICENCE  project  public  README.md  sbt  src  target  test
    [root@master kafka-manager-1.3.3.18]# cd target/universal
    [root@master universal]# ls
    kafka-manager-1.3.3.18.zip  scripts
    [root@master universal]# scp kafka-manager-1.3.3.18.zip /opt/kafka-manager-1.3.3.18.zip

    4.安装

    重新解压编译好的kafka-manager-1.3.3.18.zip&修改配置文件

    [root@master universal]# cd /opt/
    [root@master opt]# ls
    apache-maven-3.5.4         hadoop-2.9.0          kafka_2.11-1.1.0            kibana-6.2.2-linux-x86_64                   node-8.9.1    spark-2.2.1-bin-hadoop2.7
    elasticsearch-6.2.2        hdfs-over-ftp-master  kafka-manager-1.3.3.18      mysql57-community-release-el7-8.noarch.rpm  node-v8.9.1   zookeeper-3.4.12
    elasticsearch-head-master  jdk1.8.0_171          kafka-manager-1.3.3.18.zip  nifi-1.7.1                                  scala-2.11.0
    [root@master opt]# mv kafka-manager-1.3.3.18 kafka-manager-1.3.3.18-source
    [root@master opt]# ll
    total 77696
    drwxr-xr-x.  6 root   root         99 Jul  5 07:00 apache-maven-3.5.4
    drwxr-xr-x.  9 spark  spark       155 Jul 18 04:31 elasticsearch-6.2.2
    drwxr-xr-x.  7 spark  spark      4096 Jul 20 22:13 elasticsearch-head-master
    drwxr-xr-x. 11 spark  spark       172 Jul 17 06:28 hadoop-2.9.0
    drwxr-xr-x.  4 root   root        153 Jul  9 05:35 hdfs-over-ftp-master
    drwxr-xr-x.  8     10    143      255 Mar 29 08:18 jdk1.8.0_171
    drwxrwxrwx.  7 root   root        101 Jul 17 07:01 kafka_2.11-1.1.0
    drwxr-xr-x. 10 root   root        203 Sep 11 22:54 kafka-manager-1.3.3.18-source
    -rw-r--r--.  1 root   root   79534088 Sep 11 23:01 kafka-manager-1.3.3.18.zip
    drwxrwxr-x. 12 spark  spark       232 Feb 17  2018 kibana-6.2.2-linux-x86_64
    -rw-r--r--.  1 root   root       9116 Apr 11  2016 mysql57-community-release-el7-8.noarch.rpm
    drwxrwxr-x. 14 spark  spark       252 Aug  6 20:23 nifi-1.7.1
    drwxr-xr-x.  7 spark  spark        67 Jul 17 22:54 node-8.9.1
    drwxr-xr-x. 10 spark  spark      4096 Jul 17 22:33 node-v8.9.1
    drwxrwxr-x.  6   2000   2000       50 Apr 17  2014 scala-2.11.0
    drwxrwxrwx. 13 hadoop hadoop      236 Sep  6 22:34 spark-2.2.1-bin-hadoop2.7
    drwxrwxrwx. 12 spark  spark      4096 Aug  8 00:23 zookeeper-3.4.12
    [root@master opt]# unzip kafka-manager-1.3.3.18.zip 
    Archive:  kafka-manager-1.3.3.18.zip
      inflating: kafka-manager-1.3.3.18/lib/kafka-manager.kafka-manager-1.3.3.18-sans-externalized.jar  
      。。。。
      inflating: kafka-manager-1.3.3.18/share/doc/api/index/index-d.html  
      inflating: kafka-manager-1.3.3.18/README.md  
    [root@master opt]# ll
    total 77696
    drwxr-xr-x.  6 root   root         99 Jul  5 07:00 apache-maven-3.5.4
    drwxr-xr-x.  9 spark  spark       155 Jul 18 04:31 elasticsearch-6.2.2
    drwxr-xr-x.  7 spark  spark      4096 Jul 20 22:13 elasticsearch-head-master
    drwxr-xr-x. 11 spark  spark       172 Jul 17 06:28 hadoop-2.9.0
    drwxr-xr-x.  4 root   root        153 Jul  9 05:35 hdfs-over-ftp-master
    drwxr-xr-x.  8     10    143      255 Mar 29 08:18 jdk1.8.0_171
    drwxrwxrwx.  7 root   root        101 Jul 17 07:01 kafka_2.11-1.1.0
    drwxr-xr-x.  6 root   root         70 Sep 11 23:02 kafka-manager-1.3.3.18
    drwxr-xr-x. 10 root   root        203 Sep 11 22:54 kafka-manager-1.3.3.18-source
    -rw-r--r--.  1 root   root   79534088 Sep 11 23:01 kafka-manager-1.3.3.18.zip
    drwxrwxr-x. 12 spark  spark       232 Feb 17  2018 kibana-6.2.2-linux-x86_64
    -rw-r--r--.  1 root   root       9116 Apr 11  2016 mysql57-community-release-el7-8.noarch.rpm
    drwxrwxr-x. 14 spark  spark       252 Aug  6 20:23 nifi-1.7.1
    drwxr-xr-x.  7 spark  spark        67 Jul 17 22:54 node-8.9.1
    drwxr-xr-x. 10 spark  spark      4096 Jul 17 22:33 node-v8.9.1
    drwxrwxr-x.  6   2000   2000       50 Apr 17  2014 scala-2.11.0
    drwxrwxrwx. 13 hadoop hadoop      236 Sep  6 22:34 spark-2.2.1-bin-hadoop2.7
    drwxrwxrwx. 12 spark  spark      4096 Aug  8 00:23 zookeeper-3.4.12
    [root@master opt]# cd kafka-manager-1.3.3.18
    [root@master kafka-manager-1.3.3.18]# ls
    bin  conf  lib  README.md  share
    [root@master kafka-manager-1.3.3.18]# cd conf/
    [root@master conf]# ls
    application.conf  consumer.properties  logback.xml  logger.xml  routes
    [root@master conf]# vim application.conf 
    
    # Secret key
    # ~~~~~
    # The secret key is used to secure cryptographics functions.
    # If you deploy your application to several instances be sure to use the same key!
    play.crypto.secret="^<csmm5Fx4d=r2HEX8pelM3iBkFVv?k[mc;IZE<_Qoq8EkX_/7@Zt6dP05Pzea3U"
    play.crypto.secret=${?APPLICATION_SECRET}
    
    # The application languages
    # ~~~~~
    play.i18n.langs=["en"]
    
    play.http.requestHandler = "play.http.DefaultHttpRequestHandler"
    play.http.context = "/"
    play.application.loader=loader.KafkaManagerLoader
    
    #kafka-manager.zkhosts="kafka-manager-zookeeper:2181"
    kafka-manager.zkhosts="192.168.0.120:2181,192.168.0.121:2181,192.168.0.122:2181"
    kafka-manager.zkhosts=${?ZK_HOSTS}
    pinned-dispatcher.type="PinnedDispatcher"
    pinned-dispatcher.executor="thread-pool-executor"
    application.features=["KMClusterManagerFeature","KMTopicManagerFeature","KMPreferredReplicaElectionFeature","KMReassignPartitionsFea
    ture"]
    
    akka {
      loggers = ["akka.event.slf4j.Slf4jLogger"]
      loglevel = "INFO"
    }
    
    akka.logger-startup-timeout = 60s
    
    basicAuthentication.enabled=false
    basicAuthentication.enabled=${?KAFKA_MANAGER_AUTH_ENABLED}
    basicAuthentication.username="admin"
    basicAuthentication.username=${?KAFKA_MANAGER_USERNAME}
    basicAuthentication.password="password"
    basicAuthentication.password=${?KAFKA_MANAGER_PASSWORD}
    basicAuthentication.realm="Kafka-Manager"
    basicAuthentication.excluded=["/api/health"] # ping the health of your instance without authentification
    
    kafka-manager.consumer.properties.file=${?CONSUMER_PROPERTIES_FILE}
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                                                                                                                                   
    "application.conf" 46L, 1682C written                 

    5.启动服务

    启动zk集群,kafka集群,再启动kafka-manager服务。

    bin/kafka-manager 默认的端口是9000,可通过 -Dhttp.port,指定端口; -Dconfig.file=conf/application.conf指定配置文件:

    [root@master conf]# cd ..
    [root@master kafka-manager-1.3.3.18]# ls
    bin  conf  lib  README.md  share
    [root@master kafka-manager-1.3.3.18]# 
    [root@master kafka-manager-1.3.3.18]# nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=19093 &

    jps查看:

    [root@master spark]# jps
    4596 QuorumPeerMain
    4956 Kafka
    4476 ProdServerStart
    5116 Jps
    [root@master spark]# 

    WebUI查看:http://192.168.0.120:19093/ 出现如下界面则启动成功。

    其他就是在ui上新建cluster,新建topic,查看topic等操作。

    参考:

    http://www.cnblogs.com/frankdeng/p/9584870.html

    https://www.cnblogs.com/dadonggg/p/8205302.html

  • 相关阅读:
    再见,我的二零一七
    Tomcat 源码分析(二)——Request处理全过程
    帅案之上——作为开发者的远见与卓识
    Tomcat 源码分析(一)——启动与生命周期组件
    从代码质量谈起
    Java设计模式(四)——再谈观察者模式
    你所不了解的五条面试忠告
    见微知著——从自定义类型的operator==说起
    编码、散列与加解密
    数据结构与算法(c++)——双缓存队列
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/9626312.html
Copyright © 2011-2022 走看看