(1)Linux搭建 zookeeper+kafka集群

因为之前公司业务都是使用mqtt接收数据,随着设备的增加,公司觉得用kafka集群来实现会更好 下面是我写一个demo 仅供参考

一、安装jdk

(1)Linux搭建 zookeeper+kafka集群_第1张图片
没有安装的可以百度去看看怎么安装的 不行的话在私聊我!!!!

二、搭建zookeeper集群

因为我只有一台Linux服务器,所以在一台机器上创建三个zk实例,通过设置不同的端口号,搭建一个zookeeper伪集群。

1、下载zookeeper安装包

地址:https://archive.apache.org/dist/zookeeper/,我这里下的是apache-zookeeper-3.6.3-bin.tar.gz版本。
(1)Linux搭建 zookeeper+kafka集群_第2张图片

2、新建一个zookeeper-cluster目录,将安装包上传到zookeeper-cluster目录下

  cd /usr/local/
  mkdir zookeeper-cluster

(1)Linux搭建 zookeeper+kafka集群_第3张图片

3、解压安装包

cd zookeeper-cluster/
tar -zxvf  apache-zookeeper-3.6.3-bin.tar.gz

你下载的是什么包名字就解压什么名字

4、配置zk1(先配一个节点,然后再复制两份修改相关配置)

改一下解压包名称(便于直观区分)

mv apache-zookeeper-3.6.3 zk1

新建data、logs目录,分别用来存放数据和日志

cd zk1/
mkdir data logs

执行完之后就会看到有 data 和logs 文件夹
(1)Linux搭建 zookeeper+kafka集群_第4张图片

进入conf,将zoo_sample.cfg 重命名为 zoo.cfg

cd conf/
cp zoo_sample.cfg /usr/local/zookeeper-cluster/zk1 #可以不执行
mv zoo_sample.cfg zoo.cfg

执行完之后就会看到有 zoo.cfg 可以先复制一份 zoo_sample.cfg zk1文件夹 修改完名称后面在复制进来文件夹里面 怕到时候配置错了 找不到原来的文件
在这里插入图片描述

修改conf下的zoo.cfg配置文件

vi zoo.cfg

① 修改:dataDir=/usr/local/zookeeper-cluster/zk1/data

② 添加:dataLogDir=/usr/local/zookeeper-cluster/zk1/logs

③ clientPort=2181【clientPort是客户端的请求端口】

④ 在zoo.cfg文件末尾追加【注意IP是内网IP,伪集群的话写127.0.0.1也可以】

server.1=172.17.80.219:2881:3881

server.2=172.17.80.219:2882:3882

server.3=172.17.80.219:2883:3883

解释:server.实例ID=实例IP:zk服务之间通信端口:zk服务之间投票选举端口;


在 zk1 的 data 目录下创建一个 myid 文件,内容为1

cd zk1/data/
echo 1 > myid

这一步一定要执行!!!

至此,zk1节点配置完成,我们复制两份zk2、zk3,再修改zk2、zk3的相关配置就可以了。

5、配置zk2

用zk1复制一份zk2

cd /usr/local/zookeeper-cluster/
cp -r zk1 zk2

修改zk2的zoo.conf文件

dataDir=/usr/local/zookeeper-cluster/zk2/data
dataLogDir=/usr/local/zookeeper-cluster/zk2/logs
clientPort=2182


修改zk2的data目录下的myid文件

cd /usr/local/zookeeper-cluster/zk2/data/
vi myid

将内容修改为2。

6、配置zk3

用zk1复制一份zk3

cd /usr/local/zookeeper-cluster/
cp -r zk1 zk3

修改zk3的zoo.conf文件

dataDir=/usr/local/zookeeper-cluster/zk3/data
dataLogDir=/usr/local/zookeeper-cluster/zk3/logs
clientPort=2183

(1)Linux搭建 zookeeper+kafka集群_第5张图片

修改zk3的data目录下的myid文件

 cd /usr/local/zookeeper-cluster/zk3/data/
 vi myid 

将内容修改为3。

7、开放防火墙端口

开放上面配置涉及到的端口:

2181/2182/2183、2881/2882/2883、3881/3882/3883

举例 开放端口

firewall-cmd --zone=public --add-port=2181/tcp --permanent

重启防火墙

firewall-cmd --reload

查看当前所有tcp端口

netstat -ntlp

8、启动集群

 cd  /usr/local/zookeeper-cluster/zk1/bin/
./zkServer.sh start
 
 cd  /usr/local/zookeeper-cluster/zk2/bin/
 ./zkServer.sh start
 
 cd  /usr/local/zookeeper-cluster/zk3/bin/
 ./zkServer.sh start

(1)Linux搭建 zookeeper+kafka集群_第6张图片

9、查看启动状态

 cd  /usr/local/zookeeper-cluster/zk1/bin/
 ./zkServer.sh status
 
 cd  /usr/local/zookeeper-cluster/zk2/bin/
 ./zkServer.sh status
 
 cd  /usr/local/zookeeper-cluster/zk3/bin/
 ./zkServer.sh status

(1)Linux搭建 zookeeper+kafka集群_第7张图片
可以看到,zk2作为leader,zk1和zk3作为follower,zookeeper集群搭建成功。

三、搭建kafka集群

1、下载安装包

kafka官网下载:http://kafka.apache.org/downloads
我下载的是 kafka_2.12-3.1.0.gz

2、新建一个kafka-cluster目录,将安装包上传到kafka-cluster目录下

cd /usr/local/
mkdir kafka-cluster

(1)Linux搭建 zookeeper+kafka集群_第8张图片

3、解压安装包,重命名

tar -zxvf kafka_2.12-3.1.0.gz
mv kafka_2.12-2.4.0 kafka1

4、修改配置文件

cd /usr/local/kafka-cluster/kafka1/config/
vi server.properties

※修改如下配置项

# 集群内不同实例的broker.id必须为不重复的数字
broker.id=0
# listeners配置kafka的host和port【同样使用内网IP】
listeners=PLAINTEXT://192.168.10.222:9092
# kafka数据和log的存放目录
log.dirs=/usr/local/kafka-cluster/kafka1/logs
# zookeeper集群的ip和端口,用英文逗号分隔
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
# 在配置文件中添加如下配置,表示允许删除topic
delete.topic.enable=true



5、配置kafka2(将kafka1拷一份,修改相关配置)

cp -r kafka1 kafka2
cd kafka2/config/
vi server.properties

配置跟1一样 我就不截图了 你自己对比1的截图修改

broker.id=1
listeners=PLAINTEXT://127.0.0.1:9093
log.dirs=/usr/local/kafka-cluster/kafka2/logs
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
delete.topic.enable=true 

6、配置kafka3(将kafka1拷一份,修改相关配置)

 cp -r kafka1 kafka3
 cd kafka3/config/
 vi server.properties
broker.id=2
listeners=PLAINTEXT://127.0.0.1:9094
log.dirs=/usr/local/kafka-cluster/kafka3/logs
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183
delete.topic.enable=true

7、启动kafka集群(分别启动各实例)

 cd /usr/local/kafka-cluster/kafka1/bin/                     
 ./kafka-server-start.sh ../config/server.properties 
 
 cd /usr/local/kafka-cluster/kafka2/bin/                     
 ./kafka-server-start.sh ../config/server.properties 
 
 cd /usr/local/kafka-cluster/kafka3/bin/                     
 ./kafka-server-start.sh ../config/server.properties 

(1)Linux搭建 zookeeper+kafka集群_第9张图片
开三个窗口 ,每个窗口执行一个kafka实例
可以发现在窗口启动之后是一个阻塞进程,会阻塞当前窗口,我们可以重新打开一个窗口进行接下来的操作,或者在启动kafka的时候使用 -daemon 参数将它声明为守护进程后台运行。

 ./kafka-server-start.sh  -daemon ../config/server.properties

※ 启动的时候可能会报错"Cannot allocate memory"

./kafka-server-start.sh  ../config/server.properties 
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/kafka-cluster/kafka2/bin/hs_err_pid28697.log

这是因为单机上搭建伪集群内存不够导致的,我们可以修改启动脚本,将heap内存改小些,默认为1G,可以改为512M,如果还是不够再修改为256M。

 vi bin/kafka-server-start.sh

(1)Linux搭建 zookeeper+kafka集群_第10张图片
我没有报错过 所以你们报错了可以试试修改一下启动的shell脚本 按以上操作

8、开放防火墙端口

9092/9093/9094

怎么开放端口 上面有命令可以翻上去看看

9、通过命令简单体验一下kafka

创建一个topic,我们实现生产者向topic写数据,消费者从topic拿数据。

首先进入到bin目录下,
在打开一个新窗口

# cd /usr/local/kafka-cluster/kafka1/bin 

① 创建一个topic

 ./kafka-topics.sh --bootstrap-server 192.168.10.222:9092  --topic mytopic --create  --partitions 1 --replication-factor 2
 参数解释

192.168.10.222:9092 ZK的服务IP:端口号

 --partitions 1 分区数为1

 --topic mytopic  topic的名字是mytopic 

 --replication-factor 副本,注意,副本的个数应小于服务器总数,例如三台服务器做的kafka集群,那么副本数量最多只能为2,也就是 3 - 1 

(1)Linux搭建 zookeeper+kafka集群_第11张图片

这样就成功了

查询topics列表

./kafka-topics.sh --bootstrap-server 192.168.10.222:9092 --list
./kafka-topics.sh --bootstrap-serve 192.168.10.222:9092,192.168.10.222:9092 --list  

(1)Linux搭建 zookeeper+kafka集群_第12张图片
查看topic详情

./kafka-topics.sh --bootstrap-server 192.168.10.222:9092 --topic mytopic --describe

修改topic,将topic的分区数修改为3,注意“分区数只能增加不能减少。”

./kafka-topics.sh --bootstrap-server 192.168.10.222:9092 --topic mytopic --alter --partitions 3

删除topic

./kafka-topics.sh --bootstrap-server 192.168.10.222:9092 --topic mytopic --delete

(1)Linux搭建 zookeeper+kafka集群_第13张图片
生产消息

./kafka-console-producer.sh --topic quickstart-events --bootstrap-server 192.168.10.222:9092

第一次发送
在这里插入图片描述
第二次发送
在这里插入图片描述
消费消息

./kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server 192.168.10.222:9092

第一次接收
在这里插入图片描述
第二次接收
在这里插入图片描述

在创建topic时指定的副本数不能大于可用的集群结点数。创建完成后,我们看一下logs目录,

# cd /usr/local/kafka-cluster/kafka2/logs/

可以看到,logs下有两个目录:mytopic-0、mytopic-1、mytopic-2,这就是我们创建的topic的三个分区(我们定义的分区副本是3,这是分区0和1,2的其中一个副本)

(1)Linux搭建 zookeeper+kafka集群_第14张图片

你可能感兴趣的:(kafka,linux,zookeeper,kafka)