
# Kafka集群部署
1. 服务信息如下：
   表1服务信息3 
   | 服务名       | 服务器                                                                                  | 安装目录           | 端口             |
   |:---|:---|:---|:---|
   | zookeeper | 10.190.x.x 10.190.x.x 10.190.x.x | /app/zookeeper | 2181、2888、3888 |
   | kafka     | 10.190.x.x 10.190.x.x 10.190.x.x | /app/kafka     | 9092           |
      
   
2. 安装JDK8
   1. 准备安装包 可默认使用操作系统自带的openjdk
      ```
      [root@vm001 ~]# rpm -qa|grep java
      [root@vm001 ~]# rpm -qa|grep jdk
      yum list java-1.8.0-openjdk*
      （可选安装java-1.8.0-openjdk-devel）
      yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
      tar xf  jdk-8u341-linux-aarch64.tar.gz -C /usr/local/
      ```
      
   
   2. 配置环境变量快捷命令
      ```
      sed -i '$a export JAVA_HOME=/usr/local/jdk1.8.0_341\nexport JRE_HOME=$JAVA_HOME/jre\nexport PATH=$JAVA_HOME/bin:JRE_HOME/bin:$PATH\nexport CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ' /etc/profile && source /etc/profile && java -version
      ```
      
    
3. 安装zookeeper
   1. 准备安装包 三节点部署zookeeper，使用zookeeper-3.4.14.tar.gz，解压到/app目录，下载地址：https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
      ```
      tar xf zookeeper-3.4.14.tar.gz  -C /app
      mv zookeeper-3.4.14  zookeeper
      ```
      
   
   2. 添加zookeeper到环境变量
      ```
      vim + /etc/profile
      export ZOOKEEPER_HOME=/app/zookeeper
      export PATH=$ZOOKEEPER_HOME/bin:$PATH
      #集成安装上面的jdk之后，环境变量PATH合并配置示例：
      export ZOOKEEPER_HOME=/app/zookeeper
      export JAVA_HOME=/usr/local/jdk1.8.0_241
      export JRE_HOME=$JAVA_HOME/jre
      export PATH=$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:JRE_HOME/bin:$PATH
      export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
      #使环境变量生效
      source /etc/profile
      ```
      
   
   3. 修改配置文件
      ```
      #进入ZooKeeper所在目录
      cd /app/zookeeper/conf
      #复制配置文件
      cp zoo_sample.cfg zoo.cfg
      #修改配置文件
      vim zoo.cfg
      #修改数据目录
      dataDir=/app/zookeeper/data
      #在最后添加如下代码，其中server.1-3是部署ZooKeeper的节点对应sfmap345
      server.1=sfmap3:2888:3888
      server.2=sfmap4:2888:3888
      server.3=sfmap5:2888:3888
      #创建data目录作数据目录
      mkdir /app/zookeeper/data
      #在data目录中创建一个空文件，并向该文件写入ID
      touch /app/zookeeper/data/myid
      echo 1 > /app/zookeeper/data/myid
      ```
      
   
   4. 同步配置到其它节点
      ```
      #将配置好的ZooKeeper复制到其它节点
      scp -rp /app/zookeeper-3.4.6 root@sfmap4:/app/
      scp -rp /app/zookeeper-3.4.6 root@sfmap5:/app/
      #登录sfmap4、sfmap5，修改myid内容
      echo 2 > /app/zookeeper/data/myid
      echo 3 > /app/zookeeper/data/myid
      ```
      
   
   5. 启动服务 分别在sfmap3，sfmap4、sfmap5上启动ZooKeeper
      ```
      cd /app/zookeeper/bin
      ./zkServer.sh start
      #查看服务状态
      ./zkServer.sh status
      Mode: leader   #或者   Mode: follower
      ```
      
    
4. 安装kafka
   1. 准备安装包 下载地址：https://www.apache.org/dyn/closer.cgi?path=/kafka/2.6.0/kafka_2.13-2.6.0.tgz
      ```
      tar xf kafka_2.13-2.6.0.tgz -C /app
      mv kafka_2.13-2.6.0 kafka
      ```
      
   
   2. 修改配置文件server.properties
      ```
      broker.id=1
      listeners=PLAINTEXT://0.0.0.0:9092   ##0.0.0.0或本机IP
      #advertised.listeners=PLAINTEXT://192.168.56.101:9092
      advertised.listeners=PLAINTEXT://192.168.0.100:9092  ##本机或公网IP
      ……
      ##log.dirs=/tmp/kafka-logs ##或者使用默认配置
      log.dirs=/app/kafka/kafka-logs
      ……
      ##zookeeper.connect=localhost:2181  ##加注释默认的自带的zoo
      zookeeper.connect=192.168.56.101:2181,192.168.56.102:2181,192.168.56.103:2181
      zookeeper.connection.timeout.ms=18000
      group.initial.rebalance.delay.ms=0
      ```
      
   
   3. 修改启动脚本 修改bin/kafka-run-class.sh 找到约257行：
      ```
      KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 ...
      ```
      直接删掉这个的参数 -XX:+UseG1GC，保存退出。
      
   
   4. 参考a、b、c完成节点2和节点3的安装和配置
   
   5. 三节点分别创建数据存储目录
      ```
      mkdir  -p /app/kafka/kafka-logs
      ```
      
   
   6. 三节点分别启动服务
      ```
      cd  bin/
      ./kafka-server-start.sh -daemon  ../config/server.properties
      ```
      
    
 
