Kafka二(集群搭建)

本篇文章介绍Kafka集群的搭建,主要包括JDK环境配置、Zookeeper集群搭建、Kafka集群搭建这三个步骤,我相信绝大部分人都对JDK环境搭建已经非常熟悉了,所以本章不再啰嗦。

1 Zookeeper简介

ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

如上,官网是这样描述Zookeeper的,Zookeeper是用于维护配置信息,命名信息,分布式同步,和提供组服务的集中式服务。虽然概念上是这样说,但是它实际上是一个什么东西呢?

其实Zookeeper本质上等于(文件系统+监听机制)

1.1 文件系统

ZooKeeper维护了一个类似文件系统的数据结构,如下图1-1所示,每个子目录项节点称为znode,和文件系统类似,我们可以自由增加、删除znode,不同的是,每个znode是可以存储数据的,比如znode->app2可以存储随意指定的数据,比如value2。
在这里插入图片描述

图1-1

Zookeeper有四种类型的znode

  1. PERSISTENT-持久化目录节点

    客户端与zookeeper断开连接后,该节点依旧存在。比如/app1/p_1是客户端C1连接上Zookeeper Server后创建的持久化目录节点,那么C1断开连接后该节点依然在Server端存在。

  2. PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

    客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号。

  3. EPHEMERAL-临时目录节点

    客户端与zookeeper断开连接后,该节点被删除。比如/app1/p_1是客户端C1连接上Zookeeper Server后创建的临时目录节点,那么C1断开连接后该节点会被删除。

  4. EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

    客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号。

1.2 监听机制

客户端可以注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

2 Zookeeper集群搭建
2.1 集群基本结构

在这里插入图片描述

图2-1

本章单机搭建一个具有三个节点的Zookeeper集群,Zookeeper集群中有一个为Leader节点,负责读写请求,其他的节点都为Follower请求,连接到Follower客户端的读写请求都会转发到Leader来处理。

2.2 搭建步骤

Tips:本篇文章环境为阿里云Ubuntu服务器,基于单机安装,base package :/usr/local/software

  1. 首先到官网下载Zookeeper包 http://www.apache.org/dyn/closer.cgi/zookeeper/

    wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.6.2/apache-zookeeper-3.6.2-bin.tar.gz
    
  2. 解压zookeeper包

    tar -zxf apache-zookeeper-3.6.2-bin.tar.gz
    
  3. 需改文件夹名称(个人喜好)

    mv apache-zookeeper-3.6.2-bin zk1
    
  4. 配置zookeeper到环境变量中

    export ZOOKEEPER_HOME=/usr/local/software/zk1
    PATH=$PATH:$ZOOKEEPER_HOME/bin
    export PATH
    
  5. 将conf目录下的zoo_sample.cfg复制并为zoo.cfg

    cd zk1/conf/
    cp zoo_sample.cfg zoo.cfg
    
  6. 修改zoo.cfg文件内容

    initLimit=10
    syncLimit=5
    dataDir=/usr/local/software/zk1/data
    clientPort=2181
    server.1=127.0.0.1:2888:3888
    server.2=127.0.0.1:4888:5888
    server.3=127.0.0.1:6888:7888
    
    tickTime
    心跳基本时间单位,毫秒级,这个时间是作为Zookeeper服务器之间或客户端与服务器之间维持心跳的时间间隔,每隔tickTime时间就会发送一个心跳,最小的session过期时间为2倍tickTime。
    initLimit
    tickTime的个数,表示在leader选举结束后,followers与leader同步需要的时间,如果followers比较多或者说leader的数据灰常多时,同步时间相应可能会增加,那么这个值也需要相应增加。当然,这个值也是follower和observer在开始同步leader的数据时的最大等待时间(setSoTimeout)
    syncLimit
    tickTime的个数,这时间容易和上面的时间混淆,它也表示follower和observer与leader交互时的最大等待时间,只不过是在与leader同步完毕之后,进入正常请求转发或ping等消息交互时的超时时间。
    dataDir
    内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上。
    clientPort
    配置ZK监听客户端连接的端口
    server.{zookeeper节点id}={服务器ip地址}:{Leader选举的端口}:{Zookeeper之间通信的端口}
    
  7. 创建data文件夹

    cd /usr/local/software/zk1
    mkdir data
    
  8. 在data文件夹下创建myid文件,并且在文件中写入当前zookeeper的id

    cd data
    touch myid
    echo 1 > myid
    
  9. 复制zk1文件夹到zk2、zk3,分别修改对应的clientPort和dataDir,myid文件内容

    zk2

    clientPort -> 2182

    dataDir -> /usr/local/software/zk2/data

    myid -> 2

    zk3

    clientPort -> 2183

    dataDir -> /usr/local/software/zk3/data

    myid -> 3

  10. 分别到对应zookeeper文件夹启动zookeeper, 全部启动成功后集群搭建完成

    cd zk1
    ./bin/zkServer.sh start
    输出如下
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /usr/local/software/zk1/bin/../conf/zoo.cfg
    Starting zookeeper ... STARTED
    
    ./bin/zkServer.sh status
    输出如下
    /usr/bin/java
    ZooKeeper JMX enabled by default
    Using config: /usr/local/software/zk1/bin/../conf/zoo.cfg
    Client port found: 2181. Client address: localhost. Client SSL: false.
    Mode: follower
    

    其余两个也类似方式启动, 解析一下什么一定要到对应目录下找到脚本启动,那是因为zookeeper的启动脚本指定了log等文件的位置在当前目录(命令执行的目录),因此为了不引起混乱,分别定位到对应的文件夹调用该文件夹下bin目录的命令启动是一个比较好的选择,启动后就可以使用环境变量中配置的zookeeper脚本来连接你期望的那台服务器。包括下文kafka的启动也是类似。

2.3 基本命令

zkCli.sh -server localhost:2181 连接zookeeper服务器

接下来分享几个常用基本命令

  1. create : 创建一个节点(默认创建持久化节点)

    创建持久化节点
    [zk: localhost:2181(CONNECTED) 20] create /app1
    Created /app
    [zk: localhost:2181(CONNECTED) 21] ls /app1
    []
    
    创建临时节点
    [zk: localhost:2181(CONNECTED) 22] create -e /app2
    Created /app2
    [zk: localhost:2181(CONNECTED) 23] ls /app2
    []
    
    创建持久化有序节点
    [zk: localhost:2181(CONNECTED) 33] create /s
    Created /s
    [zk: localhost:2181(CONNECTED) 34] create -s /s/permanent
    Created /s/permanent0000000000
    [zk: localhost:2181(CONNECTED) 35] create -s /s/permanent
    Created /s/permanent0000000001
    [zk: localhost:2181(CONNECTED) 36] create -s /s/permanent
    Created /s/permanent0000000002
    [zk: localhost:2181(CONNECTED) 36] ls /s/permanent
    Node does not exist: /s/permanent
    [zk: localhost:2181(CONNECTED) 37] ls /s
    [permanent0000000000, permanent0000000001, permanent0000000002]
    
    创建临时有序节点
    [zk: localhost:2181(CONNECTED) 39] create /t
    Created /t
    [zk: localhost:2181(CONNECTED) 40] create -es /t/tmp
    Created /t/tmp0000000000
    [zk: localhost:2181(CONNECTED) 41] create -es /t/tmp
    Created /t/tmp0000000001
    [zk: localhost:2181(CONNECTED) 42] create -es /t/tmp
    Created /t/tmp0000000002
    [zk: localhost:2181(CONNECTED) 43] ls /t
    [tmp0000000000, tmp0000000001, tmp0000000002]
    
  2. delete : 删除一个节点

    [zk: localhost:2181(CONNECTED) 46] delete /app2
    
  3. get data : 获取一个节点的内容

    [zk: localhost:2181(CONNECTED) 51] get /s
    null
    
  4. set data : 往一个节点写入内容

    [zk: localhost:2181(CONNECTED) 52] set /s "value"
    [zk: localhost:2181(CONNECTED) 53] get /s
    value
    
  5. ls: 列出节点的所有子节点

3 Kafka集群搭建
  1. 下载Kafka (http://kafka.apache.org/downloads)

    wget https://mirrors.bfsu.edu.cn/apache/kafka/2.7.0/kafka_2.12-2.7.0.tgz
    
  2. 解压

    tar -xvf kafka_2.12-2.7.0.tgz
    
  3. 改名(个人喜好)

    mv kafka_2.12-2.7.0 kafka1
    
  4. 修改conf目录下server.properties配置文件,主要要修改的配置项如下

    broker.id=0
    port=9092
    listeners=PLAINTEXT://{服务器ip地址}:9092
    log.dirs=/usr/local/software/kafka1/
    zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
    

    broker.id: Kafka 服务器id

    listeners: 监听的地址和端口

    log.dirs: log.dirs的地址

    zookeeper.connect:zookeeper集群地址

  5. 把kafka1配置到环境变量中

    export ZOOKEEPER_HOME=/usr/local/software/zk1
    export KAFKA_HOME=/usr/local/software/kafka1
    PATH=$PATH:$ZOOKEEPER1_HOME/bin:$KAFKA_HOME/bin:
    export PATH
    
  6. 复制kafka1文件夹到kafka2、kafka3,分别修改对应的broker.id和log.dirs

    kafka2

    broker.id-> 1

    port:9093

    log.dirs-> /usr/local/software/kafka2/data

    kafka3

    broker.id-> 1

    port:9094

    log.dirs-> /usr/local/software/kafka3/data

  7. 修改kafka启动内存,由于kafka启动的时候申请的内存最少为1GB,因此,如果基于单机安装的话,需要修改相应目录下bin文件夹下的kafka-server-start.sh 脚本, 把下列的jvm参数修改成你期望的内存值

    if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
        export KAFKA_HEAP_OPTS="-Xmx500M -Xms200M"
    fi
    
  8. 启动kafka

    cd kafka1
    ./bin/kafka-server-start.sh -daemon config/server.properties
    

    其他两个kafka的启动方式类似。日志位于当前文件夹下的logs文件夹下,查看server.out可以查看日志

  9. 查看zookeeper /brokers/ids 节点下三个kafka已经成功注册

    [zk: localhost:2181(CONNECTED) 2] ls /brokers/ids
    [0, 1, 2]
    

至此,Kafka单机集群环境已经安装完成,但是要注意的是,生产环境一般会将zookeeper和kafka集群中的各个server分别部署到不同机器,这里只是为了演示整个安装过程,下一篇将介绍一些kafka的基本命令,还有对应zookeeper存储的配置信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值