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个节点会分别都存放

原文地址:https://www.cnblogs.com/goujinyang/p/13285920.html