概念
约 849 字大约 3 分钟
2025-05-09
Kafka 是一个分布式流式处理平台
关键功能
- 消息队列:发布和订阅消息流
- 容错的持久方式存储记录消息流:Kafka 会吧消息持久化至磁盘
- 流式处理平台:能够在消息发布时进行处理
应用场景
- 消息队列:
- 消息处理:
优势
高性能:设计中大量使用批处理与异步,顺序写磁盘+零拷贝=高TPS 强大的生态与兼容性
核心概念
^712ff1
Producer
生产者:产生消息的一方
Consumer
消费者:消费消息的一方
Broker
代理:可以看作一个独立的Kafka实例,多个Broker组成一个集群
Topic
主题:生产者产生消息,发送至指定的Topic,而消费则是订阅指定的Topic并从中获取消息消费
Partition
分区:一个Topic中可以有多个分区,同一Topic下的不同Partition可以分布在不同的Broker上,这就实现了Topic的跨BrokerPartition能够使同一个消费组的多个消费者并发消费消息
- 分区数量 < 消费者数量:一个分区对应一个消费者,其余消费者空闲
- 分区数量 = 消费者数量:一个分区对应一个消费者
- 分区数量 > 消费者数量:一或多个消费者负责多个分区
从[[#^712ff1|架构图]]中可以看到,
Partition实际上可以对应消息队列中的队列
好处
同一Topic能够能够分布在不同的Broker上,能够提供较好的并发能力
多副本机制
每一个Partition存在多个副本,分为leader和follower两种身份,可以看作follower是leader的备份,消费者和生产者始终与leader交互;当leader更新后其他的follower才会从leader中拉取更新,而当leader故障时会从follower中选举出新leader
好处
提高的消息存储的安全性与容灾能力
zookeeper 对 Kafka 的作用
Kafka2.8 前,依靠 zookeeper 进行集群的管理,包括
Broker的注册Topic注册至不同的Broker中- 根据代理负载降消息存放在不同的
Broker上,实现负载均衡
注册中心
生产者与消费者需要知道应该与集群中的哪个 Broker 交互,因此需要一个「注册中心」复制管理节点
ZooKeeper
Kafka2.8 以前使用 zookeeper 作为注册中心
注册
各个服务实例在启动时会向注册中心注册自己,代表该实例加入该集群
发现
当客户端(生产者或消费者)需要调用服务时,会向注册中心查询自己需要的服务的服务提供者的位置(例如消费者需要消费某个主题,需要知道自己需要访问具体 Broker 的位置)
其他功能
- 负载均衡
- 健康检查
- 故障转移
Kraft
Kafka2.8 后引用 Kraft 共识协议替代 zookeeper
如何替代注册中心?
通过 Raft 协议选举 Controller 客户端连接集群中任意 Broker,即可获得集群的 Broker、Topic 信息,实现了发现 新 Broker 通过配置指定的初始节点,通过向 Controller 发送加入请求加入集群
优点
- 不再依赖 zookeeper,简化部署与维护
- 元数据操作更快
