Apache Kafka 是一个分布式的、高吞吐量、高可扩展性的流处理平台。它主要用于构建实时的数据管道和流式应用程序。它可以被看作是一种分布式的、基于发布/订阅模式的消息队列。
它的核心能力可以概括为以下三项:
- 发布和订阅消息流。
- 持久化存储消息流,并以容错的方式处理。
- 实时处理消息流。
核心概念详解
基本角色与架构
-
Producer:生产者
- 角色:向Kafka的Topic发送消息的客户端。
- 行为:生产者决定将消息发送到Topic的哪个Partition。可以通过轮询、指定Key等方式。
-
Consumer:消费者
- 角色:从Kafka的Topic读取消息的客户端。
- 行为:消费者通过订阅一个或多个Topic,并从一个Consumer Group中拉取消息。
-
Broker:代理/服务器
- 角色:一个独立的Kafka服务器实例。多个Broker组成一个Kafka集群。
- 行为:接收生产者的消息,为这些消息设置偏移量,并持久化存储到磁盘;同时响应消费者的拉取请求,返回消息。
-
Cluster:集群
- 角色:由多个Broker组成的集合,提供高可用和负载均衡。
- 行为:整个Kafka服务由一个集群来提供。集群会自动在Broker间分布数据和客户端请求。
-
Controller:控制器
- 角色:Kafka集群中的一个特殊Broker,由集群选举产生。
- 行为:负责管理分区和副本的状态,包括分区的分配、Leader选举、监控Broker故障等。是集群的“大脑”。
-
ZooKeeper
- 角色:Kafka的“元数据管理者”和“协调者”。(注意:新版本Kafka正在逐步移除对ZooKeeper的依赖,使用Kraft模式)
- 行为:
- 存储和管理Broker、Topic、Partition等元数据。
- 进行Controller的选举。
- 管理Consumer Group的偏移量(老版本)。
- 监听Broker上下线,通知Controller。