# Kafka KRaft模式介绍
**Kafka 2.8**版本引入一个重大改进:KRaft模式。这个功能一直处于实验阶段。
2022年10月3日,**Kafka 3.3.1**发布,正式宣告**KRaft**模式可以用于生产环境。
在KRaft模式下,所有集群元数据都存储在Kafka内部主题中,由kafka自行管理,不再依赖zookeeper。
---
KRaft 模式有很多优点:
- **简化集群部署和管理** – 不在需要zookeeper,简化了kafka集群的部署和管理工作。资源占用更小。
- **提高可扩展性和弹性** – 单个集群中的分区数量可以扩展到数百万个。集群重启和故障恢复时间更短。
- **更高效的元数据传播** – 基于日志、事件驱动的元数据传播提高了 Kafka 许多核心功能的性能。
---
目前**KRaft**只适用于新建集群,将现有的集群从**zookeeper**模式迁移到**KRaft**模式,需要等**3.5**版本。
**3.5** 是一个桥接版本,将正式弃用**zookeeper**模式。
**Kafka 4.0** (预计2023年8月发布)将完全删除**zookeeper**模式,仅支持 **KRaft** 模式。
> 注意:**Kafka 3.3.0** 版本中存在重大bug,建议不要使用。
## KRaft部署
### 单节点部署
- 生成集群uuid
使用kafka提供的工具
```bash
./bin/kafka-storage.sh random-uuid
# 输入结果如下
# xtzWWN4bTjitpL3kfd9s5g
```
也可以自己生成,kafka集群的uuid应为16个字节的base64编码,长度为22
```bash
#集群的uuid应为16个字节的base64编码,长度为22
echo -n "1234567890abcdef" | base64 | cut -b 1-22
# MTIzNDU2Nzg5MGFiY2RlZg
```
- 格式化存储目录
```bash
./bin/kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g \
-c ./config/kraft/server.properties
# Formatting /tmp/kraft-combined-logs
```
> 注意:如果安装多个节点,每个节点都需要格式化。
- 启动kafka
```bash
./bin/kafka-server-start.sh ./config/kraft/server.properties
```
- 配置文件
```properties
# 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=1
# The connect string for the controller quorum
controller.quorum.voters=1@localhost:9093
# Combined nodes (i.e. those with `process.roles=broker,controller`) must list the controller listener here at a minimum.
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT
# 如果要从别的主机访问,将localhost修改为你的主机IP
advertised.listeners=PLAINTEXT://localhost:9092
# This is required if running in KRaft mode.
controller.listener.names=CONTROLLER
# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
# A comma separated list of directories under which to store log files
log.dirs=/tmp/kraft-combined-logs
```
### docker compose部署
![image.png](image/1-kafka-cluster.png)
在Kraft模式下,可以将集群的节点设置为controller或borker,也可以同时扮演两种角色。
broker负责处理消息请求和存储主题分区日志,controller负责管理元数据,并根据元数据的变化指挥broker做出响应。
控制器在集群中只占一小部分,一般为奇数个(1,3,5,7),可以容忍不超过半数的节点失效。
```yaml
# kraft通用配置
x-kraft: &common-config
ALLOW_PLAINTEXT_LISTENER: yes
KAFKA_ENABLE_KRAFT: yes
KAFKA_KRAFT_CLUSTER_ID: MTIzNDU2Nzg5MGFiY2RlZg
KAFKA_CFG_PROCESS_ROLES: broker,controller
KAFKA_CFG_CONTROLLER_LISTENER_NAMES: CONTROLLER
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT,CONTROLLER:PLAINTEXT
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:9091,2@kafka-2:9091,3@kafka-3:9091
KAFKA_CFG_INTER_BROKER_LISTENER_NAME: BROKER
# 镜像通用配置
x-kafka: &kafka
image: 'bitnami/kafka:3.3.1'
networks:
net:
# 自定义网络
networks:
net:
# project名称
name: kraft
services:
# combined server
kafka-1:
<<: *kafka
container_name: kafka-1
ports:
- '9092:9092'
environment:
<<: *common-config
KAFKA_CFG_BROKER_ID: 1
KAFKA_CFG_LISTENERS: CONTROLLER://:9091,BROKER://:9092
KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://10.150.36.72:9092 #宿主机IP
kafka-2:
<<: *kafka
container_name: kafka-2
ports:
- '9093:9093'
environment:
<<: *common-config
KAFKA_CFG_BROKER_ID: 2
KAFKA_CFG_LISTENERS: CONTROLLER://:9091,BROKER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://10.150.36.72:9093 #宿主机IP
kafka-3:
<<: *kafka
container_name: kafka-3
ports:
- '9094:9094'
environment:
<<: *common-config
KAFKA_CFG_BROKER_ID: 3
KAFKA_CFG_LISTENERS: CONTROLLER://:9091,BROKER://:9094
KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://10.150.36.72:9094 #宿主机IP
#broker only
kafka-4:
<<: *kafka
container_name: kafka-4
ports:
- '9095:9095'
environment:
<<: *common-config
KAFKA_CFG_BROKER_ID: 4
KAFKA_CFG_PROCESS_ROLES: broker
KAFKA_CFG_LISTENERS: BROKER://:9095
KAFKA_CFG_ADVERTISED_LISTENERS: BROKER://10.150.36.72:9095
```
> 注意:1.如果部署在服务器或公有云上,请作如下修改:
```yaml
KAFKA_CFG_LISTENERS: CONTROLLER://:9091,BROKER://0.0.0.0:9092
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://服务器IP或公务IP:9092
```
### 查看元数据
```bash
# 创建主题
docker run -it --rm --network=kraft_net \
bitnami/kafka:3.3.1 \
/opt/bitnami/kafka/bin/kafka-topics.sh \
--bootstrap-server kafka-1:9092,kafka-2:9093 \
--create --topic my-topic \
--partitions 3 --replication-factor 2
# 生产者
docker run -it --rm --network=kraft_net \
bitnami/kafka:3.3.1 \
/opt/bitnami/kafka/bin/kafka-console-producer.sh \
--bootstrap-server kafka-1:9092,kafka-2:9093 \
--topic my-topic
# 消费者
docker run -it --rm --network=kraft_net \
bitnami/kafka:3.3.1 \
/opt/bitnami/kafka/bin/kafka-console-consumer.sh \
--bootstrap-server kafka-1:9092,kafka-2:9093 \
--topic my-topic
# 查看元数据分区
docker run -it --rm --network=kraft_net \
bitnami/kafka:3.3.1 \
/opt/bitnami/kafka/bin/kafka-metadata-quorum.sh \
--bootstrap-server kafka-1:9092,kafka-2:9093 \
describe --status
#查看元数据副本
docker run -it --rm --network=kraft_net \
bitnami/kafka:3.3.1 \
/opt/bitnami/kafka/bin/kafka-metadata-quorum.sh \
--bootstrap-server kafka-1:9092,kafka-2:9093 \
describe --replication
# 查看元数据
# 元数据存储在每个节点上,可以在任意节点上查看
docker exec -it kafka-1 \
/opt/bitnami/kafka/bin/kafka-metadata-shell.sh \
--snapshot /bitnami/kafka/data/__cluster_metadata-0/00000000000000000000.log
```
## 去zookeeper之路
从kafka诞生之初,就离不开zookeeper,随着kafka的发展,zookeeper的弊端逐渐显现出来。
最开始的时候,kafka将元数据和消费者的消费位置(**offset**偏移量)都保存在zookeeper中。
### 偏移量管理
消费位置是一个频繁更新的数据,对zookeeper而言,写操作代价比较昂贵,频繁的写入可能会带来性能问题。写操作全部交给leader执行,无法水平扩展。
从**0.8.2**版本开始,消费者的消费位置不再写入zookeeper,而是记录到kafka的内部主题 **`__comsumer_offsets`** 中,默认创建50个分区,以<消费者group.id、主题、分区号>作为消息的key,可以同时由多个broker处理请求,因此具有更高的写入性能和扩展性。kafka同时将最新消费位置的视图缓存到内存�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
kafka一小时入门精讲笔记.zip (27个子文件)
kafka-1hour-master
pom.xml 2KB
src
main
avro
User.v1.avsc 303B
product_order.avsc 238B
User.avsc 259B
resources
log4j.properties 452B
java
onehour
kafka
example
serialization
AvroDeserializer.java 2KB
AvroSerializer.java 2KB
AvroProducer.java 2KB
avro
ProductOrder.java 13KB
v1
User.java 16KB
User.java 14KB
AvroConsumer.java 2KB
kraft
Kafka KRaft模式介绍.pdf 1.81MB
image
4-kafka-checkpoint.png 318KB
1-kafka-cluster.png 106KB
3-kafka-metadata.png 227KB
7-metadata-replication.png 54KB
5-zookeeper-metadata.png 43KB
6-zookeeper-controller.png 269KB
2-kafka-controller.png 148KB
docker-compose.yaml 2KB
README.md 13KB
presentation
kafka一小时精讲.pptx 5.23MB
mindmap
kafka思维导图.xmind 155KB
docker-compose
docker-compose.yml 2KB
readme.txt 503B
README.md 2KB
共 27 条
- 1
资源评论
YOLO数据集工作室
- 粉丝: 443
- 资源: 1569
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功