Kafka 的核心组件包括以下部分:
- Producer(生产者):负责将消息发布到 Kafka 集群的特定主题(Topic)中。
- Consumer(消费者):订阅一个或多个主题,并从 Kafka 集群中拉取和消费消息。
- Topic(主题):消息的逻辑分类单位。生产者将消息发布到特定的主题中,而消费者则订阅感兴趣的主题。
- Partition(分区):每个主题可以被分为多个分区,分区是 Kafka 实现高吞吐量和横向扩展的关键。每个分区内的消息保留有序,而不同分区之间的消息顺序可能不同。
- Broker(代理服务器):Kafka 集群中的一个节点,负责存储和处理消息。每个代理可以管理多个分区和副本,并提供生产者和消费者的网络接口。
- ZooKeeper(动物管理员):Kafka 使用 ZooKeeper 进行集群的协调和元数据管理,包括分区分配、Leader 选举等操作。
Kafka 的工作流程如下:
- Producer 将消息发送到指定的主题(Topic)。Producer 可以将消息批量发送到 Kafka 集群,并指定消息的键(Key)和值(Value)。
- Kafka 集群接收并存储生产者发送的消息,根据主题和分区将消息分配到不同的 Broker 上。每个分区可以有多个副本,其中一个副本作为 Leader,负责处理读写请求,其他副本作为 Follower,用于备份和数据复制。
- Consumer 订阅感兴趣的主题,并从 Kafka 集群中拉取消息。消费者可以以消费者组的形式组织,每个消费者组内的消费者共同消费一个主题的消息。消费者可以跟踪消息的偏移量(Offset),以控制消息的消费位置。
- 当消息被消费后,Kafka 不会立即删除消息,而是根据配置的保留策略保留一段时间。消费者可以使用偏移量来重复消费消息,例如在出现错误或需要重新处理的情况下。
- ZooKeeper 用于管理和维护 Kafka 集群的元数据、分区分配、消费者组的协调等。它负责监控 Broker 的状态,并在需要时进行 Leader 选举和分区重新分配。
通过这种工作流程,Kafka 实现了高吞吐量、可扩展性和持久化的消息传递和处理,适用于大数据、实时数据处理、日志收集等场景。