当前位置: 代码网 > it编程>编程语言>Java > 【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

【运维】Kafka高可用: KRaft(不依赖zookeeper)集群搭建

2024年07月28日 Java 我要评论
>本文主要介绍了>- kafka raft集群架构:>与旧架构的不同点,有哪些优势,哪些问题> 架构成员有哪些,怎么规划。> - 三节点集群安装、启动与测试

一. kafka kraft 集群介绍

1. kraft架构

在这里插入图片描述

在旧的架构中

 

在新的架构中

尽管 controller 进程在逻辑上与 broker 进程是分离的,但它们不需要在物理上分离。即在某些情况下,部分或所有 controller 进程和 broker 进程是可以是同一个进程,即一个broker节点即是broker也是controller。

 

2. controller 服务器

在kraft模式下,通过指定某些服务器作为控制器,在server.properties的process.roles 参数里面配置。

被(手动配置)选中的 controller 节点将参与元数据集群的选举。对于当前的 controller 节点,每个控制器服务器要么是active的,要么是standby的。

用户通常会选择3或5台(奇数台)服务器成为 controller 节点,3和5的个数问题和raft的原理一样,少数服从多数。

 

3. process roles

在kraft模式下,每个kafka服务器都有一个新的配置项,叫做process.roles, 这个参数可以有以下值:

注意:如果process.roles 没有设置。那么集群就假定是运行在zookeeper模式下。

 

4. quorum voters

系统中的所有节点都必须设置 controller.quorum.voters 配置。用于配置所有想成为controller的节点。

 

如果你有10个broker和 3个controller1,分别命名为controller1、controller2、controller3,你可能在 controller1上有以下配置:

process.roles=controller
node.id=1
listeners=controller://controller1.example.com:9093
controller.quorum.voters=1@controller1.com:9093,2@controller2.com:9093,3@controller3.com:9093

controller.quorum.voters配置格式说明:nodeid1@controller-node1:9093,nodeid2@controller-node2:9093,nodeid3@controller-node3:9093

 
如果你只有三个节点,每个节点都是controller,broker角色,那么每个节点都这样配置

process.roles=broker,controller
listeners=controller://controller1.example.com:9093
controller.quorum.voters=1@controller1.com:9093,2@controller2.com:9093,3@controller3.com:9093

 

5. kraft的工作原理 ing

kraft: apache kafka without zookeeper

 

二. 集群安装

进行三个节点的安装,如下规划:

节点node.id角色
node11controller,broker
node22controller,broker
node33controller,broker

1. 安装

kafka下载: https://kafka.apache.org/downloads
解压

tar -zxvf kafka_2.13-3.0.0.tgz

1.1. 配置

在node1中配置:server.properties

在{kafka_home}/config/kraft/server.properties

############################# server basics #############################

java.home=/opt/jvm/java

# the role of this server. setting this puts us in kraft mode
process.roles=broker,controller

# the node id associated with this instance's roles
node.id={{broker_id}}

# the connect string for the controller quorum
# 每个节点配置都一样:格式:{{broker_id_1}}@{{hostname1}}:9093,{{broker_id_2}}@{{hostname2}}:9093,{{broker_id_3}}@{{hostname3}}:9093
controller.quorum.voters={{voters}}


############################# log basics #############################

# a comma separated list of directories under which to store log files
# 数据存储目录
log.dirs=/opt/kafka3.5.0/logs

配置node2、node3,其余两个节点配置除了node.id不同,其他配置都相同。node.id配置如上节点规划。

 

1.2. 格式化

生成集群 id

整个集群唯一的id标志

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

 

格式化存储目录

使用上面生成集群 uuid, 在三个节点上都执行格式化存储目录命令:

$ ./bin/kafka-storage.sh format \
-t xtzwwn4btjitpl3kfd9s5g \
-c ./config/kraft/server.properties

 

2. 启动测试

2.1. 启功节点服务

在每个节点上执行

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

 

2.2. 测试

# 创建topic
$ bin/kafka-topics.sh --create \
--topic quickstart-events \
--bootstrap-server localhost:9092


# 查看topic信息
$ bin/kafka-topics.sh --describe \
--topic quickstart-events \
--bootstrap-server localhost:9092

topic: quickstart-events        topicid: npmzhyhbr9y00wmglmh2sg partitioncount: 1       replicationfactor: 1	configs:
    topic: quickstart-events partition: 0    leader: 0   replicas: 0 isr: 0


# 生产消息
$ bin/kafka-console-producer.sh \
--topic quickstart-events  \
--bootstrap-server localhost:9092

this is my first event
this is my second event


#消费数据
$ bin/kafka-console-consumer.sh \
--topic quickstart-events \
--from-beginning --bootstrap-server localhost:9092

this is my first event
this is my second event

 

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com