•   安装java环境
  •   搭建zookeeper集群
  •   搭建kafka集群

1.1 安装包

jdk-8u111-linux-x64.tar.gz
zookeeper-3.5.2-alpha.zip
kafka_2.11-2.4.1 .tgz

1.2 准备至少3台主机

如果没有物理机,也可以弄3台虚拟机。本列用的是虚拟机,下面是3台电脑的配置

主机名

IP地址

硬件配置

server-1

192.168.187.130

4CPU、4G内存、20G存储

server-2

192.168.187.132

4CPU、4G内存、20G存储

server-3

192.168.187.137

4CPU、4G内存、20G存储

 

 

 

 

 

 

 

 

2. 安装JAVA环境

准备安装包jdk-8u111-linux-x64.tar.gz

在每台主机下执行下面步骤:

将安装包移到/home/roya/platform/java目录下

mv jdk-8u111-linux-x64.tar.gz /home/roya/platform/java

解压文件

tar -zxvf jdk-8u111-linux-x64.tar.gz

重命名文件夹为jdk

mv jdk-8u111-linux-x64 jdk

 

配置环境变量

用vim打开/etc/profile文件(Linux下配置系统环境变量的文件)

vim /etc/profile

按i进入编辑模式,在文件末尾添加如下JAVA环境变量

export JAVA_HOME=/home/roya/platform/java/jdk

export JRE_HOME=/home/roya/platform/java/jdk/jre

export CLASSPATH=$JAVA_HOME/lib

export PATH=$PATH:$JAVA_HOME/bin

添加环境变量后,结果如下图所示,按 esc 退出编辑模式,然后输入:wq ,按回车保存。

最后,需要让该环境变量生效,执行如下代码:

source /etc/profile

检验JAVA是否安装成功

echo $JAVA_HOME     # 检验变量值

java -version

java

javac

如果设置正确的话,java -version 会输出 java 的版本信息,java 和 javac 会输出命令的使用指导。

3. 搭建zookeeper集群

准备安装包zookeeper-3.5.2-alpha.zip

在每台主机上执行下面步骤:

将安装包移到/home/roya/platform/java目录下

mv zookeeper-3.5.2-alpha.zip /home/roya/platform/java

解压文件

unzip zookeeper-3.5.2-alpha.zip

重命名文件夹为zookeeper

mv zookeeper-3.5.2-alpha zookeeper

配置zookeeper环境变量,首先打开profile文件

vim /etc/profile

按i进入编辑模式,在文件末尾添加zookeeper环境变量

#set zookeeper environment

export ZK_HOME=//home/roya/platform/java/zookeeper

export PATH=$PATH:$ZK_HOME/bin

保存文件后,让该环境变量生效

source /etc/profile

打开zookeeper配置文件

cp /home/roya/platform/java /zookeeper/conf/zoo_sample.cfg /home/roya/platform/java/zookeeper/conf/zoo.cfg

vim /home/roya/platform/java /zookeeper/conf/zoo.cfg

修改zookeeper配置文件

#修改数据文件夹路径

dataDir=/home/roya/platform/java/zookeeper/ zkdata

#在文件末尾添加

server.1=server-1:2888:3888

server.2=server-2:2888:3888

server.3=server-3:2888:3888

#其它不变

 

server对应的IP解析,必须设置否则服务器间无法正常通讯,

[roya@server-1 etc]$ 在etc ,hosts下添加对应值

192.168.187.130 server-1

192.168.187.132 server-2

192.168.187.137 server-3

 

创建数据文件夹,zoo.cfg中的dataDir指向该路径

mkdir /home/roya/platform/java/zookeeper/zkdata

在zkdata文件夹下创建myid文件,在myid文件中添加本机的 server ID,在本例中对应关系如下

主机名

IP地址

zookeeper

myid

server-1

192.168.187.130

server.1

1

server-2

192.168.187.132

server.2

2

server-3

192.168.187.137

server.3

3

 

 

 

 

 

 

 

 

所以,在server-1中执行下面命令

echo "1" > /home/roya/platform/java/zookeeper/zkdata/myid  #server-1主机myid

在server -2中执行下面命令

echo "2" > /home/roya/platform/java/zookeeper/ zkdata/myid  #server-2主机myid

在kafka-3中执行下面命令

echo "3" > /home/roya/platform/java/zookeeper/ zkdata /myid  #server-3主机myid

在每台电脑上启动zookeeper

 /home/roya/platform/java/zookeeper/bin/zkServer.sh start

全部启动后,查看启动结果

 /home/roya/platform/java/zookeeper/bin/zkServer.sh status

 

4. 搭建kafka集群

准备安装包kafka_2.11-2.4.1.tgz

在每台主机上执行下面步骤:

将安装包移到/home/roya/platform/java目录下

mv  kafka_2.11-2.4.1.tgz /home/roya/platform/java

解压文件

tar -zxvf kafka_2.11-2.4.1 .tgz

重命名文件夹为kafka

mv kafka_2.11-2.4.1 kafka

 

打开配置文件,分别在三台服务器中操作修改配置

[roya@server-1 config]$ vim server.properties

修改配置如下(IP地址应该根据实际情况填写)

server-1:

broker.id=1

listeners=PLAINTEXT://server-1:9092是kafka真正bind的地址,一般设置外网地址

advertised.listeners=PLAINTEXT://server-1:9092 参数的作用就是将BrokerListener信息发布到Zookeeper中一般设置内网地址

zookeeper.connect=server-1:2181, server-2:2181, server-3:2181

 

server-2:

broker.id=2

listeners=PLAINTEXT://server-2:9092

advertised.listeners=PLAINTEXT://server-2:9092

zookeeper.connect=server-1:2181, server-2:2181, server-3:2181

 

server-3:

broker.id=3

listeners=PLAINTEXT://server-3:9092

advertised.listeners=PLAINTEXT://server-3:9092

zookeeper.connect=server-1:2181, server-2:2181, server-3:2181

 

启动kafka(要确保zookeeper已启动)

在每台主机上分别启动kafka

[roya@server-1bin]$ ./kafka/bin/kafka-server-start.sh ../config/server.properties&

在其中一台虚拟机(server-1)创建topic

[roya@server-1 bin]$./kafka/bin/kafka-topics.sh --create --zookeeper server-1:2181 --replication-factor 3 --partitions 3 --topic hotelproduct

查看创建的topic信息

/usr/local/kafka/bin/kafka-topics.sh --describe --zookeeper server-1:2181 --topic hotelproduct

如图:

 

 

查看topic列表:

[roya@server-1 bin]$ ./kafka-topics.sh --zookeeper server-1:2181 –list

对应的server集群访问,表示搭建成功

结果如下图所示:

 

生产者修改:

vim  producer.properties

修改:

bootstrap.servers=server-1:9092,server-2:9092,server-3:9092

 消费者修改:

vim consumer.properties

修改:

bootstrap.servers=server-1:9092,server-2:9092,server-3:9092

发送消息:

./kafka-console-producer.sh --broker-list server-1:9092 --topic hotelproduct --producer.config ../config/producer.properties

 接收消息:

./kafka-console-consumer.sh --bootstrap-server server-1:9092 --topic hotelproduct --from-beginning --consumer.config ../config/consumer.properties

Producer数据的写入流程:

1)producer 先从 zookeeper 的 "/brokers/…/state"节点找到该 partition 的leader

2)producer 将消息发送给该 leader

3)leader 将消息写入本地 log

4)followers 从 leader pull 消息,写入本地 log 后向 leader 发送 ACK

5)leader 收到所有 ISR 中的 replication 的 ACK 后,增加 HW(high watermark,最后commit 的 offset)并向 producer 发送 ACK

 

常见问题:

1:

【Kafka问题解决】Connection to xxx could not be established. Broker may not be available.

请检查Kafka的config/server.properties 看看是否有填写

listeners=PLAINTEXT://server-1:9092

advertised.listeners=PLAINTEXT:// server-1:9092

2:Configured broker.id 1 doesn't match stored broker.id 3 in meta.properties

log.dirs目录下的meta.properties中配置的broker.id和配置目录下的server.properties中的broker.id不一致了,解决问题的方法是将两者修改一致后再重启。

而当时为何会产生这个问题?

1Kafka配置目录下文件server.properties中一个broker.id

# The id of the broker. This must be set to a unique integer for each broker.

broker.id=2

# A comma seperated list of directories under which to store log files

log.dirs=/tmp/kafka-logs

 另外还有一个属性log.dirs,这是kafka产生log目录,log目录 下有meta.properties文件,而meta.properties文件中也写有broker.id,这是在运行时产生的。

#Wed Nov 08 15:59:53 PST 2017

version=0

broker.id=2

posted on 2020-06-05 11:00  W晴空  阅读(393)  评论(0编辑  收藏  举报