kafka分布式服务的搭建

kafka分布式服务的搭建

一、测试环境安装(额外补充)

使用的测试环境是virtualbox和centos7,首先安装好virtualbox和三个centos7系统,用来模拟简单的集群。安装centos之后将网络模式设置为桥接模式,这样就能使用一个单独的ip地址,可以和外界进行交互。在设置网络的时候遇到的坑

  • 查询ip地址不是之前的ifconfig,而是使用了ip addr

  • 查询之后发现ifcfg-ens33没有ip地址,只有mac地址

  • 设置ip地址 vim /etc/sysconfig/network-script/ifcfg-ens33设置ONBOOT=yes

  • 如果是设置静态ip地址再添加:BOOTPROTO=static IPDDR=192.168.-.- GETWAY=192.168.-.- PREFIX=24,设置之后保存退出,重新使用命令systemctl restart network.service重新启动network。

二、什么是zookper?

zookper在我的理解上就是一个分布式服务框架,就是负责一个集群中各个代理之间协调服务,包括指令、数据等。能够实现数据的同步服务。

三、zookper分布式环境的安装

1、安装java环境

zk是java语言编写的,所以要运行zk必须有java的运行环境,所以先装java的环境。在使用wget下载jdk的时候,如果是直接使用wget url 这样会导致下载的数据丢失,是因为下载的时候编码是asii,改用二进制下载

  
  #下载文件
  wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz
  
  #减压压缩文件
  tar -zxvf url
  
  #安装
      不需要安装,直接配置配置文件
  #配置环境变量
  vim /etc/profile
  JAVA_HOME=/usr/java/jdk1.8.0_131
  JRE_HOME=/usr/java/jdk1.8.0_131/jre
  PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  export JAVA_HOME JRE_HOME PATH CLASSPATH
  
  #更新配置文件
  source /etc/profile

2、安装zk

zk直接下载之后不用安装,减压配置配置文件即可

  
  #下载文件
  wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.tar.gz
  
  #减压压缩文件
  tar -zxvf url
  
  #配置环境
  vim /etc/profile
  ZOOKEEPER_HOME=/soft/zookeeper/zookeeper-3.5.3-beta
  PATH=$PATH:$ZOOKEEPER_HOME/bin
  
  #配置配置文件
  vim ./conf/zoo.cnf  (本来只有一个示例的配置文件,复制一份出来修改)
  设置dataDir  #这是zk数据存放的位置
  设置dataLogDir #日志存放位置,如果不设置这个,导致和dataDir放在一起太庞大了
  
  #配置集群环境
    #在每台服务器硬件上配置网络映射
      vim /etc/hosts
      192.168.199.196 server-1  #第一台机器
      192.168.199.197 server-2  #第二台机器
      192.168.199.198 server-3  #第三台机器
    #在每台机器上的zookeeper上配置zoo.cnfg
    server.1=server-1:2888:3888    # server.n=第n台服务器配置的域名:该服务器于leader交换信息的端口:选举时服务器相互通信的端口
    server.2=server-2:2888:3888 
    server.3=server-3:2888:3888
    
    #创建myid用来记录服务器编号
    #就在配置的dataDir下创建myid文件,里面只存放该服务器的编号,zk启动的时候会读取myid文件和zoo.cfg进行对比,从而确定是那台服务器。如果是单机服务器就不用配置了。

注:zookeeper会自动选举一台服务器作为leader,其他的做为flower

注:如果在配置完zk之后提示权限问题,是因为zkServer.sh没有执行权限,需要给他执行权限

​ chmod +x zkServe.sh

重新启动:zkServer.sh start 停止:zkServer.sh stop 查看状态:zkServer.sh status

  • zk是由角色组成的:

    • Leader 负责投票的发起和决议以及系统状态的更新

    • learner/flower 负责接收客户端发来的请求和给客户端响应结果

    • observer 负责接收客户端发来的请求和给客户端响应结果,但是不参与投票,她的出现是为了提高读的能力

四、安装kafka

1、下载kafka

使用wget下载kafka

2、配置环境变量

3、配置kafka配置文件

  
  vim /soft/kafka/config/server.properties
  
  #设置代理id,在集群下这个代理id必须是唯一的。 
  broker.id=1
  #指定kafka的日子存放路径
  log.dir=/data/kafka/log

启动kafka服务器

  
  kafka-server-start.sh -daemon /soft/kafka/config/server.properiters

注意:kafka启动需要的默认的内存需要1G,这就有点尴尬了,我自己买的服务器,内存总共才1G,操作系统一定启动了,一定剩余的不够1G了,解决办法就是减少kafka的启动内存

  
  vim /soft/kafka/bin/server.properties
  
  export KAFKA_HEAP_OPTS="-Xmx512M -Xms256M" 

注意:启动kafka之前一定要先启动zookeeper

在启动之后检查是否真的 将kafka启动了

  
  jps
  
  #结果
  Jps
  QuorumpeerMain  #zk进程
  Kafka           # kafka进程

可以进入kafka/log中查看server.log查看启动日志

  • 通过Zookeeper客户端登录zk查看目录结构,执行一下命令

      
      zkCli.sh -server server-1:2181 #如果是单机的不需要后面的
      ls /  #查看zk的目录结构

      
      ls /brokers/ids  #查看当前已经启动的kafka代理节点

    1、伪分布式kafka环境

    其实开启不同的kafka,就是开启了不同配置下的kafka,可以使用多个kafka的配置文件来搭建伪分布式的kafka环境。

      
      port=9093 #默认的是9092,端口号不能一致了
      log.dir=/data/kafka/log-2
      broker.id=2  #broker.id一定不能重复

五、安装mysql8

在mysql到了8 的版本之后,即使是windows系统的也不提供编译好的exe文件了,怎么办呢?那只能是按照linux的方式进行自己编译安装了。下载和安装的步骤如下:

(1)下载mysql8,网址:https://dev.mysql.com/downloads/mysql/

(2)放到自己想要放的位置,配置环境变量

(3)新建my.ini配置文件并粘贴修改如下内容

  
  [mysql]
  # 设置mysql客户端默认字符集
  default-character-set=utf8 
  [mysqld]
  #设置3306端口
  port = 3306 
  # 设置mysql的安装目录
  
  
  basedir=D:\\soft\\mysql-8.0.11-winx64
  # 设置mysql数据库的数据的存放目录
  datadir=D:\\soft\\mysql-8.0.11-winx64\\data
  
  
  # 允许最大连接数
  max_connections=200
  # 服务端使用的字符集默认为UTF8
  character-set-server=utf8
  # 创建新表时将使用的默认存储引擎
  default-storage-engine=INNODB

(4)cmd命令以管理员身份进入到控制台指定的mysql bin目录下 运行mysqld install命令。注意:这里需要以管理员身份运行!如果成功会提示Service successfully installed.

(5)使用命令net start mysql启动mysql服务。

(6)在安装的时候这里报错了,因为需要先初始化。先使用mysqld -remove命令删除之前安装的,然后使用mysqld --initalize --user=mysql --console

(7)接着再次使用mysqld install 命令安装mysql和使用命令net start mysql和启动mysql服务

(8)修改root的密码

这里遇到个特别大的坑,就是我要进去修改原始密码,但是怎么进去了?找了好长时间,才发现刚刚进行初始化的时候会随机生成一个密码,我的生成的是su/>X2uf-mGr

使用命令alter user 'root'@'localhost' identified mysql_native_password by 'root'修改原始密码

六、centos7安装nginx

1、下载nginx

wget http://nginx.org/download/nginx-1.8.1.tar.gz

七、centos7安装php7.0

1、下载减压

2、~

  
  ./configure \
  --prefix=/soft/php \                             
  --exec-prefix=/soft/php \
  --bindir=/soft/php/bin \
  --sbindir=/soft/php/sbin \
  --includedir=/soft/php/include \
  --libdir=/soft/php/lib/php \
  --mandir=/soft/php/man \
  --with-config-file-path=/soft/php/etc \           
  --with-mysql-sock=/var/run/mysql/mysql.sock \           
  --with-mcrypt=/usr/include \
  --with-mhash \
  --with-openssl \
  --with-mysql=shared,mysqlnd \                                  
  --with-mysqli=shared,mysqlnd \                         
  --with-pdo-mysql=shared,mysqlnd \                     
  --with-gd \
  --with-iconv \
  --with-zlib \
  --enable-zip \
  --enable-inline-optimization \
  --disable-debug \
  --disable-rpath \
  --enable-shared \
  --enable-xml \
  --enable-bcmath \
  --enable-shmop \
  --enable-sysvsem \
  --enable-mbregex \
  --enable-mbstring \
  --enable-ftp \
  --enable-gd-native-ttf \
  --enable-pcntl \
  --enable-sockets \
  --with-xmlrpc \
  --enable-soap \
  --without-pear \
  --with-gettext \
  --enable-session \                                     
  --with-curl \                                          
  --with-jpeg-dir \
  --with-freetype-dir \
  --enable-opcache \                                   
  --enable-fpm \
  --enable-fastcgi \
  --with-fpm-user=nginx \                                
  --with-fpm-group=nginx \                               
  --without-gdbm \
  --with-mcrypt=/usr/local/related/libmcrypt \           
  --disable-fileinfo  

七、kafka的介绍

kafka是apache旗下的一款分布式的消息系统,和kafka类似的还有rabbitmq之类的消息系统。

1、什么是消息系统呢?

消息系统就是能在分布式环境中进行信息的共享和同步,不会因为分布式而导致数据不一致。

2、消息系统在什么地方中使用?

  • 如果存在一些比较耗时的功能,不用直接去操作数据库和文件,可以将这个消息告诉消息系统,让消息系统去帮我买找时间执行

  • 如果同时操作多个数据表的时候我们要保持多个表的数据一致性,我们绝大多数使用的解决方法就是使用数据库的事务,在mysql中,事务是具有隔离性质的,即使操作的是同一个表事务直接也不会影响。事务是不能并发执行的,同一时刻只能有一个事务在执行。但是这样存在的一个问题就是如果每次操作修改的表的个数比较多,会影响效率,我们就是采用消息系统将一些不是特别关键的信息发送到消息中,等服务器不是很繁忙的时候去执行。还会存在一种情况就是多个表并不是存在一个数据库中,而是分布在不同的节点上,这时候数据库事务就不能使用了(事务是对数据库而言的,不是对表)。也会用到消息队列,用消费者去修改你另一个库中的数据

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LYLGZK/article/details/80316001
文章标签: 环境配置 kafka
个人分类: php
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭