kafka环境搭建

1,013 阅读3分钟

kafka在个人工作中用的较少,故记录kafka环境搭建过程,方便以后忘记了可以有个简单的教程能查阅,避免官网出现问题无法访问。本文基于kafka_2.13-3.1.0,相关说明请以官网文档为主。

搭建Java环境

kafka基于scala开发,故首先需要搭建java运行环境。根据官网说明,kafka3.1.0支持java8与java11,这里采用java8进行环境搭建。但是官网是推荐使用java11进行环境搭建的,一方面是开启TLS性能将会更好,另一方面则是出于安全方面的考量,因为旧版本的java存在一些已披露的安全漏洞。

搭建java运行环境步骤如下:

  • 首先下载JDK:点击下载
  • 解压到对应的目录:usr/local/jdk1.8.0_291/
  • 配置环境变量:在/etc/profile末尾添加文本
export JAVA_HOME=/usr/local/jdk1.8.0_291
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

执行source /etc/profile使其生效。

搭建kafka环境

下载安装

首先去Apache Kafka官网下载安装包:点击下载
tmp.png
下载完成后,解压即可。

tar -xvf kafka_2.13-3.1.0.tgz

单台服务器环境搭建

启动zookeeper server

因为当前版本的kafka集群依赖于zookeeper,因此kafka在启动之前需要先启动zookeeper server。

cd /usr/local/kafka_2.13-3.1.0
bin/zookeeper-server-start.sh config/zookeeper.properties

tmp.png

启动kafka broker

如果kafka与kafka客户端不在一台机器上,则kafka broker还需要配置server.properties。需要注意的是,当这里配置了listeners之后,后续客户端就不可以使用localhost进行连接,需要通过ip或者hostname进行,否则会提示Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.

listeners=PLAINTEXT://[broker服务器的hostname或ip]:9092

tmp.png
启动kafka broker

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

tmp.png
这样单台服务器的kafka环境就已经搭建完成。下面创建topic并使用producer和consumer进行测试。

创建topic

bin/kafka-topics.sh --create --topic mytopic --bootstrap-server 192.168.1.251:9092

tmp.png

查看topic

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

tmp.png

启动console producer

bin/kafka-console-producer.sh --topic mytopic --bootstrap-server 192.168.1.251:9092

tmp.png

启动console consumer

bin/kafka-console-consumer.sh --topic mytopic --bootstrap-server 192.168.1.251:9092

捕获.PNG
在producer输入消息,可在consumer页面看到传输过来的消息。
producer
捕获.PNG
consumer
捕获.PNG

kafka集群搭建

kafka集群目前的版本依赖于zookeeper,故kafka集群至少需要3台服务器。

配置zookeeper

cd /usr/local/kafka_2.13-3.1.0
mkdir data

修改zookeeper配置文件zookeeper.properties

dataDir=/usr/local/kafka_2.13-3.1.0/data
tickTime=2000
initLimit=10
syncLimit=5
server.1=192.168.1.252:2888:3888
server.2=192.168.1.253:2888:3888
server.3=192.168.1.254:2888:3888

根据broker的编号,为其生成相应的myid文件。
broker1

cd /usr/local/kafka_2.13-3.1.0/data
echo 1 > myid

broker2

cd /usr/local/kafka_2.13-3.1.0/data
echo 2 > myid

broker3

cd /usr/local/kafka_2.13-3.1.0/data
echo 3 > myid

设置防火墙以允许2181、2888、3888的访问。

firewall-cmd --permanent --add-port=2181/tcp
firewall-cmd --permanent --add-port=2888/tcp
firewall-cmd --permanent --add-port=3888/tcp
systemctl restart firewalld

启动zookeepr服务器

cd /usr/local/kafka_2.13-3.1.0/
bin/zookeeper-server-start.sh config/zookeeper.properties

配置kafka

根据broker的编号,修改server.properties。
broker1

broker.id=1
listeners=PLAINTEXT://192.168.1.252:9092
zookeeper.connect=192.168.1.252:2181,192.168.1.253:2181,192.168.1.254:2181

broker2

broker.id=2
listeners=PLAINTEXT://192.168.1.253:9092
zookeeper.connect=192.168.1.252:2181,192.168.1.253:2181,192.168.1.254:2181

broker3

broker.id=3
listeners=PLAINTEXT://192.168.1.254:9092
zookeeper.connect=192.168.1.252:2181,192.168.1.253:2181,192.168.1.254:2181

防火墙开放9092端口。

firewall-cmd --permanent --add-port=9092/tcp
systemctl restart firewalld

启动kafka server

cd /usr/local/kafka_2.13-3.1.0/
bin/kafka-server-start.sh config/server.properties

集群测试

首先尝试在一台服务器上创建topic,然后在其他的服务器上看看是否可以查看该topic的相关信息。
broker1

cd /usr/local/kafka_2.13-3.1.0/
bin/kafka-topics.sh --create --topic mytopic --bootstrap-server 192.168.1.252:9092

捕获.PNG
broker2

cd /usr/local/kafka_2.13-3.1.0/
bin/kafka-topics.sh --describe --topic mytopic --bootstrap-server 192.168.1.253:9092

捕获.PNG
broker3

cd /usr/local/kafka_2.13-3.1.0/
bin/kafka-topics.sh --describe --topic mytopic --bootstrap-server 192.168.1.254:9092

捕获.PNG
接着进行producer+consumer测试,分别在3台服务器上启动2个producer和1个consumer,看看两台服务器上生产的消息是否可以被另一台消费。
broker1

bin/kafka-console-producer.sh --topic mytopic --bootstrap-server 192.168.1.252:9092

捕获.PNG
broker2

bin/kafka-console-producer.sh --topic mytopic --bootstrap-server 192.168.1.253:9092

捕获.PNG
broker3

bin/kafka-console-consumer.sh --topic mytopic --from-beginning --bootstrap-server 192.168.1.254:9092

捕获.PNG
到此,一个简略版本的kafka集群就已经搭建完成。kafka还有很多配置的细节,有许多需要根据业务需求进行个人化的调整,后续再进行深入了解。