`简介`
Kafka3.0之前的架构:元数据在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。
kraft模式架构:不再依赖zookeeper集群,而是用三台controller节点代替zookeeper,元数据保存在 controller中,
由controller直接进行Kafka集群管理。
`kraft架构的优势`
1、Kafka不再依赖外部框架,而是能够独立运行。
2、controller管理集群时,不再需要从zookeeper中先读取数据,集群性能上升。
3、由于不依赖zookeeper,集群扩展时不再受到zookeeper读写能力限制controller 不再动态选举,而是由配置文件规定。
这样我们可以有针对性的加强controller 节点的配置。
4、后续版本升级方便,不用和zookeeper一起维护。
1、环境描述
kafka1 172.18.62.11 jdk8、Kafka
kafka2 172.18.62.12 jdk8、Kafka
kafka3 172.18.62.13 jdk8、Kafka
2、启动容器
dvr start kafka-1
dvr start kafka-2
dvr start kafka-3
docker ps
3、下载安装包(截至目前最新kafka_2.13-3.2.1)
wget https://dlcdn.apache.org/kafka/3.2.1/kafka_2.13-3.2.1.tgz
4、解压安装包
tar xvf kafka_2.13-3.2.1.tgz
5、配置集群
vim /config/kraft/server.properties
kafka-1:
process.roles=broker, controller
#节点 ID
node.id=1
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.11:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
kafka-2:
process.roles=broker, controller
#节点 ID
node.id=2
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.12:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
kafka-3:
process.roles=broker, controller
#节点 ID
node.id=3
#controller 服务协议别名
controller.listener.names=CONTROLLER
#全 Controller 列表
controller.quorum.voters=controller.quorum.voters=1@172.18.62.11:9093,2@172.18.62.12:9093,3@172.18.62.13:9093
#不同服务器绑定的端口
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
#broker 服务协议别名
inter.broker.listener.name=PLAINTEXT
#broker 对外暴露的地址
advertised.Listeners=PLAINTEXT://172.18.62.13:9092
#协议别名到安全协议的映射
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
#kafka 数据存储目录
log.dirs=/tmp/kraft-combined-logs
注:根据具体需求修改相应的IP和node.id即可
6、安装jdk8
#安装
apt-get install openjdk-8-jdk
#查看版本
jave -version
7、启动kafka服务
#分别启动三台服务,日志目录自定义即可
bin/kafka-server-start.sh config/kraft/server.properties >>/var/log/kafka.log &
8、测试
#创建topic
bin/kafka-topics.sh --create --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --replication-factor 3 --partitions 3 --topic test
#查看topic
bin/kafka-topics.sh --list --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092
#生产
bin/kafka-console-producer.sh --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --topic test
#消费
bin/kafka-console-consumer.sh --bootstrap-server 172.18.62.11:9092,172.18.62.12:9092,172.18.62.13:9092 --topic test