Kafka+zookeeper安装部署2022

Linux大区 2年前 (2022) 导航君
7 0 0

环境

  • centos7

JDK安装

  • JDK8
    官网下载jdk8以上的版本, 官网地址

    cd /root
    tar zxf jdk-8u181-linux-x64.tar.gz 
    mv jdk1.8.0_181 /usr/local/ 
    echo 'export JAVA_HOME=/usr/local/jdk1.8.0_181' >> /etc/profile 
    echo 'export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile 
    echo 'export PATH=$PATH:$JAVA_HOME/bin' >> /etc/profile 

keekeeper集群安装

keekeeper集群安装

  • keekeeper-3.7.0
    zk01 192.168.31.165
    zk02 192.168.31.166
    zk03 192.168.31.167
    ZooKeeper主要有领导者(Leader)、跟随者(Follower)和观察者(Observer)三种角色。
    ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等。
    注意:三台机只能挂一台,至少有两台才可以正常工作,
  • 安装包下载
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
  • 创建ZooKeeper相关目录
  • 创建应用目录
    mkdir /usr/zookeeper -p
  • 创建数据目录
    mkdir /data/zookeeper -p
    mkdir /data/zookeeper/data -p
    mkdir /data/zookeeper/logs -p
  • 解压到指定目录
    tar -zvxf apache-zookeeper-3.7.0-bin.tar.gz -C /usr/zookeeper
  • 配置环境变量
  • 修改环境变量文件
    cat >> /etc/profile <<EOF
    export ZOOKEEPER_HOME=/usr/zookeeper/apache-zookeeper-3.7.0-bin
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    EOF
  • 使环境变量生效
    source /etc/profile
    echo $ZOOKEEPER_HOME

配置ZooKeeper

  • ZooKeeper基础配置
    #进入ZooKeeper配置目录
    cd $ZOOKEEPER_HOME/conf
    #新建配置文件
    cat > zoo.cfg << EOF
    #zk之间心跳间隔2秒
    tickTime=2000
    #LF初始通信时限
    initLimit=10
    #LF同步通信时限
    syncLimit=5
    #Zookeeper保存数据的目录
    dataDir=/data/zookeeper/data
    #Zookeeper保存日志文件的目录
    dataLogDir=/data/zookeeper/logs
    #客户端连接 Zookeeper 服务器的端口
    clientPort=2181
    server.1=192.168.31.165:2888:3888
    server.2=192.168.31.166:2888:3888
    server.3=192.168.31.167:2888:3888
    EOF
  • 配置节点标识
    zk01:
    echo "1" > /data/zookeeper/data/myid
    zk02:
    echo "2" > /data/zookeeper/data/myid
    zk03:
    echo "3" > /data/zookeeper/data/myid
  • 防火墙开放
    2181、2888、3888端口
  • 启动ZooKeeper
    sh $ZOOKEEPER_HOME/bin/zkServer.sh start

测试

  • 查看节点状态
    sh $ZOOKEEPER_HOME/bin/zkServer.sh status
  • 客户端连接测试
    这里随机选其中一个节点作为客户端连接其他节点即可

    sh $ZOOKEEPER_HOME/bin/zkCli.sh -server 192.168.31.165:2181

Kafka安装部署

  • Kafka介绍
    Kafka是一个开源的分布式消息引擎/消息中间件
    在Kafka集群(Cluster)中,一个Kafka节点就是一个Broker,消息由Topic来承载,
    可以存储在1个或多个Partition中,Partition用于主题分片存储。
    发布消息的应用为Producer、消费消息的应用为Consumer,多个Consumer可以促
    成Consumer Group共同消费一个Topic中的消息。
    kafka01 192.168.31.165
    kafka02 192.168.31.166
    kafka03 192.168.31.167
  • 应用&数据目录
    #创建应用目录
    mkdir /usr/kafka
    #创建Kafka数据目录
    mkdir /data/kafka -p 
    mkdir /data/kafka/logs-p 
    chmod 777 -R /data/kafka
  • 下载安装包
    wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.8.0/kafka_2.12-2.8.0.tgz
  • 解压到应用目录
    tar -zvxf kafka_2.12-2.8.0.tgz -C /usr/kafka
  • Kafka节点配置
    cp  /usr/kafka/kafka_2.12-2.8.0/config/server.properties{,.bak}
  • 总体配置设置
    cat >  /usr/kafka/kafka_2.12-2.8.0/config/server.properties << EOF 
    broker.id=0
    num.network.threads=3
    num.io.threads=8
    socket.send.buffer.bytes=102400
    socket.receive.buffer.bytes=102400
    socket.request.max.bytes=104857600
    ##修改
    log.dirs=/data/kafka/logs
    num.partitions=1
    num.recovery.threads.per.data.dir=1
    offsets.topic.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    log.retention.hours=168
    log.segment.bytes=1073741824
    log.retention.check.interval.ms=300000
    ##修改
    zookeeper.connect=192.168.31.165:2181,192.168.31.166:2181,192.168.31.167:2181
    zookeeper.connection.timeout.ms=18000
    group.initial.rebalance.delay.ms=0
    listeners=PLAINTEXT://192.168.31.165:9092
    EOF
  • 分节点配置
    cat /usr/kafka/kafka_2.12-2.8.0/config/server.properties
    #Kafka01
    broker.id=0
    listeners=PLAINTEXT://192.168.31.165:9092
    #Kafka02
    broker.id=1
    listeners=PLAINTEXT://192.168.31.166:9092
    #Kafka03
    broker.id=2
    listeners=PLAINTEXT://192.168.31.167:9092
  • 防火墙开放
    9092端口
  • 启动Kafka
    cd /usr/kafka/kafka_2.12-2.8.0
    nohup bin/kafka-server-start.sh config/server.properties >> /var/log/kafka-server.log 2>&1 &
  • 关闭Kafka
    bin/kafka-server-stop.sh
  • kafka测试
  • 创建Topic
    在kafka01(Broker)上创建测试Tpoic:test-ken-io,这里我们指定了3个副本Broker、test-ken-io有2个分区

    cd /usr/kafka/kafka_2.12-2.8.0
    bin/kafka-topics.sh --create --bootstrap-server 192.168.31.165:9092 --replication-factor 3 --partitions 2 --topic test-ken-io
  • Topic在kafka01上创建后也会同步到集群中另外两个副本Broker:kafka02、kafka03
  • 查看Topic
    我们可以通过命令列出指定Broker的topic信息

    cd /usr/kafka/kafka_2.12-2.8.0
    bin/kafka-topics.sh --list --bootstrap-server 192.168.31.165:9092
    bin/kafka-topics.sh --list --bootstrap-server 192.168.31.166:9092
    bin/kafka-topics.sh --list --bootstrap-server 192.168.31.167:9092
  • 发送消息
    这里我们向Broker(id=0)的Topic=test-ken-io发送消息

    cd /usr/kafka/kafka_2.12-2.8.0
    bin/kafka-console-producer.sh --broker-list  192.168.31.165:9092  --topic test-ken-io
    #消息内容
    > hei body
    > hei girl
  • 消费者
    从开始位置消费

    cd /usr/kafka/kafka_2.12-2.8.0
    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --from-beginning
    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.166:9092 --topic test-ken-io --from-beginning
    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.165:9092 --topic test-ken-io --from-beginning

    然后均能收到消息
    hei body
    hei girl
    从最新位置消费

    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.165:9092 --topic test-ken-io 
  • 消费者组
    一个Consumer group,多个consumer进程,数量小于等于partition分区的数量
    test-ken-io只有2个分区,只能有两个消费者consumer进程去轮询消费消息

    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --group testgroup_ken
    bin/kafka-console-consumer.sh --bootstrap-server 192.168.31.167:9092 --topic test-ken-io --group testgroup_ken

zk作用

  • broker在zk中注册
    kafka的每个broker(相当于一个节点,相当于一个机器)在启动时,都会在zk中注册,告诉zk其brokerid,在整个的集群中,broker.id/brokers/ids,当节点失效时,zk就会删除该节点,就很方便的监控整个集群broker的变化,及时调整负载均衡。

    [zk: 192.168.31.165:2181(CONNECTED) 73] ls /brokers/ids
    [0, 1, 2]
  • topic在zk中注册
    在kafka中可以定义很多个topic,每个topic又被分为很多个分区。一般情况下,每个分区独立在存在一个broker上,所有的这些topic和broker的对应关系都有zk进行维护

    [zk: 192.168.31.165:2181(CONNECTED) 73] ls /brokers/topics/test-ken-io/partitions
    [0]
  • consumer(消费者)在zk中注册
    注意:从kafka-0.9版本及以后,kafka的消费者组和offset信息就不存zookeeper了,而是存到broker服务器上。
    所以,如果你为某个消费者指定了一个消费者组名称(group.id),那么,一旦这个消费者启动,这个消费者组名和它要消费的那个topic的offset信息就会被记录在broker服务器上。,但是zookeeper其实并不适合进行大批量的读写操作,尤其是写操作。因此kafka提供了另一种解决方案:增加__consumeroffsets topic,将offset信息写入这个topic

    [zk: 192.168.31.165:2181(CONNECTED) 83] ls /brokers/topics/__consumer_offsets/partitions
    [0, 1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 4, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 5, 6, 7, 8, 9]
版权声明:导航君 发表于 2022年6月2日 下午6:12。
转载请注明:Kafka+zookeeper安装部署2022 | 第八网址导航

相关文章

暂无评论

暂无评论...