一、Kafka 集群 KRaft 介绍
Kafka的KRaft模式是一种新的元数据管理方式,旨在去除对ZooKeeper的依赖,使Kafka成为一个完全自包含的系统。在Kafka的传统模式下,元数据管理依赖于ZooKeeper,这增加了部署和运维的复杂性。为了解决这个问题,Kafka社区引入了KRaft模式。在KRaft模式下,所有的元数据,包括主题、分区信息、副本位置等,都被存储在Kafka集群内部的特殊日志中。这个日志使用Raft协议来保证一致性。
在左边架构中,Kafka集群包含多个Broker节点和一个ZooKeeper集群。Kafka集群的Controller在被选中后,会从ZooKeeper中加载它的状态。并且通知其他Broker发生变更,如Leaderanddisr和Updatemetdata请求。
右边新的架构中,三个Controller节点替代三个ZooKeeper节点。Controller节点和Broker节点运行在不同的进程中。Controller节点中会选举出一个Leader角色。并且Leader不会主动向Broker推送更新,而是由Broker拉取元数据信息。
注意:Controller进程与Broker进程在逻辑上是分离的,同时允许部分或所有Controller进程和Broker进程是同一个进程,即一个Broker节点即是Broker也是Controller。
下面主要实践下Kafka集群KRaft模式下的搭建。
二、Kafka 集群 KRaft 模式搭建
部署规划如下:
| host | hostname | role | node id |
|---|---|---|---|
| 11.0.1.146 | node1 | Broker,Controller | 1 |
| 11.0.1.147 | node2 | Broker,Controller | 2 |
| 11.0.1.148 | node3 | Broker,Controller | 3 |
以下操作三台机器均需要执行。
配置hosts:
vi/etc/hosts11.0.1.146 node111.0.1.147 node211.0.1.148 node3下载安装包:
wgethttps://archive.apache.org/dist/kafka/3.4.0/kafka_2.13-3.4.0.tgz解压:
tar-zxvfkafka_2.13-3.4.0.tgz创建数据存储目录:
cdkafka_2.13-3.4.0mkdirdata修改config/kraft/server.properties配置文件,注意node.id和advertised.listeners根据不同的机器编码填写,主要修改内容如下:
viconfig/kraft/server.propertiesprocess.roles=broker,controllernode.id=1controller.quorum.voters=1@node1:9093,2@node2:9093,3@node3:9093listeners=PLAINTEXT://:9092,CONTROLLER://:9093inter.broker.listener.name=PLAINTEXTadvertised.listeners=PLAINTEXT://node1:9092controller.listener.names=CONTROLLER生成集群唯一标志ID,官方提供了kafka-storage工具可以生成唯一ID,也可以自己生成一个唯一的ID:
bin/kafka-storage.sh random-uuid使用唯一标志ID初始化存储路径:
bin/kafka-storage.shformat-tcGuFZQ70Rf6OQFNMumq33g-cconfig/kraft/server.properties以KRaft模式启动服务:
bin/kafka-server-start.sh-daemonconfig/kraft/server.properties观察日志是否启动成功:
tail-flogs/server.log三、环境测试
查看Broker情况:
bin/kafka-broker-api-versions.sh --bootstrap-server node1:9092,node2:9092,node3:9092测试创建topic:
bin/kafka-topics.sh--create--topictest--partitions3--replication-factor2--bootstrap-server node1:9092,node2:9092,node3:9092查看topic的情况:
bin/kafka-topics.sh--describe--bootstrap-server node1:9092,node2:9092,node3:9092发送Topic消息测试:
bin/kafka-console-producer.sh --broker-list node1:9092,node2:9092,node3:9092--topictest消费者消费消息:
bin/kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092--topictest