• kafka高可用集群环境搭建


    kafka是分布式发布订阅消息系统

    Kafka作为一个集群,运行在一台或者多台服务器上.

    Kafka 通过 topic 对存储的流数据进行分类。

    每条记录中包含一个key,一个value和一个timestamp(时间戳)。

    中文官方网站:http://kafka.apachecn.org/quickstart.html

    优点:

    a、高吞吐量、低延迟:kafka每秒可以处理几十万条消息,延迟最低只有几毫秒,每个topic可以分多个partition、consumer group 对partition进行consumer操作

    b、可扩展性:集群支持可扩展性

    c、持久性:消息被持久化到本地磁盘,支持数据备份

    d、高并发:支持数千个客户端同时进行读写操作

    kafka存储

    kafka是以topic来进行消息管理,每个topic包含多个partition,每个partition对应一个逻辑log

    topic相当于消息存放目录,partition是topic物理上的分组,一个topic可分为多个partition,每个partition是一个有序的队列

    环境搭建:

    1)关闭各节点防火墙、selinux

    2)各节点安装jdk

    3)搭建zookeeper集群环境

    4)搭建kafka集群

    zookeeper安装包地址:http://archive.apache.org/dist/zookeeper/

    节点jdk安装  略

    [root@lb ~]# ansible all -a "java -version"
    192.168.53.7 | CHANGED | rc=0 >>
    openjdk version "1.8.0_161"
    OpenJDK Runtime Environment (build 1.8.0_161-b14)
    OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
    192.168.53.8 | CHANGED | rc=0 >>
    openjdk version "1.8.0_161"
    OpenJDK Runtime Environment (build 1.8.0_161-b14)
    OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)
    192.168.53.6 | CHANGED | rc=0 >>
    openjdk version "1.8.0_161"
    OpenJDK Runtime Environment (build 1.8.0_161-b14)
    OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

    zookeeper集群搭建

    下载zookeeper安装包并解压

    [root@lb ~]# wget http://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
    [root@lb ~]# tar xf zookeeper-3.4.10.tar.gz -C /usr/local/
    [root@lb local]# ln -s /usr/local/zookeeper-3.4.10/ /usr/local/zookeeper

    修改zoo_sample.cfg配置文件

    主要修改两个地方

      1、dataDir=/usr/local/zookeeper/data  指定完之后data目录要手动创建

      2、server.0=192.168.53.6:2888:3888

         server.1=192.168.53.7:2888:3888

         server.2=192.168.53.8:2888:3888

    [root@lb ~]# cd /usr/local/zookeeper/conf
    [root@lb conf]# ls
    configuration.xsl  log4j.properties  zoo_sample.cfg
    [root@lb conf]# mv zoo_sample.cfg zoo.cfg        //原有的名字并不规范
    [root@lb conf]# grep -Ev "#|^$" zoo.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper/data        ##目录是用来存放myid信息跟一些版本,日志,跟服务器唯一的ID信息等
    clientPort=2181
    server.0=192.168.53.6:2888:3888
    server.1=192.168.53.7:2888:3888
    server.2=192.168.53.8:2888:3888
    

    说明:

      clientPort=2181  客户端连接的接口,客户端连接zookeeper服务器的端口,zookeeper会监听这个端口,接收客户端的请求访问!这个端口默认是2181

      在zoo.cfg这个文件中,配置集群信息是存在一定的格式 

        server.服务器编号(myid里面的值):服务器地址:服务端内部通信的端口(默认2888):选举端口(默认是3888)

    创建服务器标识

    [root@lb zookeeper]# pwd
    /usr/local/zookeeper
    [root@lb zookeeper]# mkdir data
    [root@lb zookeeper]# echo "0" >data/myid
    [root@lb zookeeper]# cat data/myid
    0

    将zookeeper目录分发各节点,还有环境变量的配置文件

    [root@lb zookeeper]# ansible node -a "ln -s /usr/local/zookeeper-3.4.10 /usr/local/zookeeper"

    修改节点myid文件

    [root@web1 zookeeper]# echo "1" >data/myid
    [root@web2 zookeeper]# echo "2" >data/myid

    启动zookeeper

    用bin下面的脚本zkServer.sh来启停

    /usr/local/zookeeper/bin/zkServer.sh start

    查看状态

    /usr/local/zookeeper/bin/zkServer.sh status

    kafka集群搭建

    安装包下载地址:http://mirror.bit.edu.cn/apache/kafka/

    下载安装包并解压

    [root@lb ~]# wget http://mirror.bit.edu.cn/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
    [root@lb ~]# tar xf kafka_2.12-2.4.1.tgz -C /usr/local/
    [root@lb ~]# ln -s /usr/local/kafka_2.12-2.4.1/ /usr/local/kafka

    修改配置文件server.properties

    192.168.53.6需修改的地方如下:(其他节点服务器也需做相应的修改)

      broker.id=0

      listeners=PLAINTEXT://192.168.53.6:9092

      zookeeper.connect=192.168.53.6:2181,192.168.53.7:2181,192.168.53.8:2181

      log.dirs=/usr/local/kafka/logs  #日志路径 方便查看日志

    创建日志的存放路径

      mkdir -p /usr/local/kafka/logs

    将kafka目录发送各节点

    [root@lb local]# scp -rp /usr/local/kafka_2.12-2.4.1/ 192.168.53.7:/usr/local/
    [root@lb local]# scp -rp /usr/local/kafka_2.12-2.4.1/ 192.168.53.8:/usr/local/
    [root@lb local]# ansible node -a "ln -s /usr/local/kafka_2.12-2.4.1 /usr/local/kafka"

    分别对分发过去的配置文件进行修改

      如:53.7  server.properties

      broker.id=1

      listeners=PLAINTEXT://192.168.53.7:9092

    启动kafka(kafka/bin/ 目录下有服务启动和停止的脚本)

    [root@lb bin]# ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties  
    
    [root@web1 kafka]# /usr/local/kafka/bin/kafka-server-start.sh -daemon config/server.properties
    
    [root@web2 local]# /usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties

    创建一个topic

    创建一个名为test的topic,一个分区一个副本  (一个节点创建topic之后会自动同步到另外的两个broker上,可在另外两个broker上用--list进行查看)

    [root@lb bin]# /usr/local/kafka/bin/kafka-topics.sh --create --zookeeper 192.168.53.6:2181 --replication-factor 1 --partitions 1 --topic test
    --partitions 1  指定分区,一个分区表示只会在一个borker进行存放  如果是3就是3个broker进行均摊存放

    运行--list查看这个topic

    [root@lb bin]# /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.53.6:2181
    test
    
    [root@web1 kafka]# /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.53.7:2181
    OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
    test
    
    [root@web2 local]# /usr/local/kafka/bin/kafka-topics.sh --list --zookeeper 192.168.53.8:2181
    OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
    test

    发送消息

    kafka自带命令行客户端,它从文件或者标准输入中读取输入,并将其作为message(消息)发送到集群

    [root@lb ~]# /usr/local/kafka/bin/kafka-console-producer.sh --broker-list 192.168.53.6:9092 --topic test
    >111
    >

    启动一个consumer 

    kafka还有一个命令行consumer(消费者),将消息转储到标准输出

    [root@web1 kafka]# /usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.53.6:9092 --topic test --from-beginning
    111

     

     可以看到数据只存放在了主节点,如果分区指定为3个得话,3个节点会分别都存放

  • 相关阅读:
    python的is和==
    pycharm设置
    springboot 配置中心 nacos 简易部署+ 手把手教 涂涂
    解决: springboot 有了eurake怎么再添加 nacos? 【springboot配置多注册中心,同时生效~,不是切换】 涂涂
    .NET Core/.NET5/.NET6 开源项目汇总5:(权限)管理系统项目
    解决ueditor报错:ZeroClipboard undefined
    如何评价 Qt 的发展前景?
    WPF HandyControl开源UI库学习笔记
    C#中的深度学习(一):使用OpenCV识别硬币
    使用SVN进行文档管理和部门知识库建设的建议
  • 原文地址:https://www.cnblogs.com/goujinyang/p/13285920.html
Copyright © 2020-2023  润新知