计算机系统应用教程网站

网站首页 > 技术文章 正文

不用 zookeeper 照样部署kafka集群

btikc 2024-10-25 11:02:05 技术文章 11 ℃ 0 评论

目前,网上所有部署kafka集群的教程都要求必须部署zookeeper,集群架构如下图:

为什么kafka依赖zookeeper?

zookeeper是一个开源的分布式应用协调系统,用于管理分布式应用程序。kafka使用zookeeper存储kafka集群元数据信息,包括主题配置、主题分区位置等。可以说,kafka没有zookeeper就无法工作。

如何让kafka摆脱zookeeper依赖?

使用zookeeper充当kafka的外部元数据管理系统存在一些问题,例如数据重复、增加部署复杂度,需要额外的java进程等。

为了在没有zookeeper的情况下运行kafka,可以使用kafka Raft元数据模式(KRaft)运行它。当 Kafka 集群处于 KRaft 模式时,它将元数据存储在控制器节点的 KRaft 仲裁中。元数据将存储在内部kafka topic @metadata中。

注意,KRaft目前还处于早期实验阶段,不应在生产中使用,但可在 kafka 2.8 版本中进行测试。

实战

在下面的步骤中,我们将部署一个3节点kafka集群并创建一个测试主题,并使用kafka生产者将数据生成到测试主题中,还将使用kafka消费者使用kafka主题中的数据。

我们将用一台服务器的不同端口来模拟3个节点,服务器操作系统使用centos8。

1.下载kafka

从https://kafka.apache.org/downloads下载kafka 2.8.0,并解压到目录中:

wget https://apachemirror.wuchna.com/kafka/2.8.0/kafka_2.12-2.8.0.tgz

tar xzf  kafka_2.12-2.8.0.tgz

cd kafka_2.12-2.8.0

2.创建kafka集群配置

kafka主目录中的config/kraft/server.properties文件,是由kafka提供的示例文件,展示了如何在没有zookeeper的情况下启动kafka。

我们需要从server.properties复制成3个新文件,因为我们将创建一个3节点集群。

cd config/kraft
cp server.properties server1.properties
cp server.properties server2.properties
cp server.properties server3.properties

修改server1.properties以下属性,其他不要改动:

#节点Id,server2设为2,server3设为3
node.id=1 

#所有可用的kafka控制器。我们将有3个kraft控制器节点分别在端口19091、19092和19091上运行
controller.quorum.voters=1@localhost:19091,2@localhost:19092,3@localhost:19093

#broker将使用端口9091,而kraft控制器将使用端口19091。其他2个节点分别用9092、19092和9093、19093端口
listeners=PLAINTEXT://:9091,CONTROLLER://:19091

#server2设为9092,server3设为9093
advertised.listeners=PLAINTEXT://localhost:9091

#日志目录,其他节点将server1改成对应节点名称
log.dirs=/tmp/server1/kraft-combined-logs

同样修改server2.propertiesserver3.properties上述属性。

3.创建kafka群集id和日志目录

首先,我们需要在启动服务器之前创建kafka集群id。执行下列命令,并记下运行生成的uuid:

./bin/kafka-storage.sh random-uuid

#我的输出
jzjo-mGLQyyfXLJuj7nKUw

接下来我们格式化所有存储目录:

#server1
./bin/kafka-storage.sh format -t jzjo-mGLQyyfXLJuj7nKUw -c ./config/kraft/server1.properties
#server2
./bin/kafka-storage.sh format -t jzjo-mGLQyyfXLJuj7nKUw -c ./config/kraft/server2.properties
#server3
./bin/kafka-storage.sh format -t jzjo-mGLQyyfXLJuj7nKUw -c ./config/kraft/server3.properties

4.启动kafka服务器

可以使用以下命令在守护程序模式下启动kafka服务器:

#server1
./bin/kafka-server-start.sh -daemon ./config/kraft/server1.properties
#server2
./bin/kafka-server-start.sh -daemon ./config/kraft/server2.properties
#server3
./bin/kafka-server-start.sh -daemon ./config/kraft/server3.properties

5.创建kafka topic

使用以下命令创建hello-kraft topic:

./bin/kafka-topics.sh --create --topic hello-kraft --partitions 3 --replication-factor 3 --bootstrap-server localhost:9091

6.生产和消费kafka数据

使用以下命令开启一个生产者:

bin/kafka-console-producer.sh --broker-list localhost:9091 --topic hello-kraft

在另一个终端中,使用以下命令启动消费者,注意,监听的集群另一个节点

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello-kraft

可以看到,能够正常地执行!!!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表