Kafka:工作流程
跳到导航
跳到搜索
关于
Kafka 只是分为一个或多个分区的主题的集合。
- Kafka 集群中的所有数据都是不相连的分区联合。
- Kafka 分区是消息的线性有序序列,其中每个消息由它们的索引(称为偏移)来标识,传入消息写在分区的末尾。
- 通过将消息复制到不同的代理提供持久性。
Kafka 以快速,可靠,持久,容错和零停机的方式提供基于 pub-sub 和 队列 的消息系统。 在这两种情况下,生产者只需将消息发送到主题,消费者可以根据自己的需要选择任何一种类型的消息传递系统。
- Kafka 将以非常简单和高效的方式提供两个系统中最好的。
“发布/订阅消息”的工作流程【???】
Pub-Sub 消息的工作流程:
- 生产者定期向主题发送消息。
- Kafka 代理存储“为该特定主题配置的分区”中的所有消息。
- 它确保消息在分区之间平等共享:如果生产者发送两个消息并且有两个分区,Kafka 将在第一分区中存储一个消息,在第二分区中存储第二消息。
- 消费者订阅特定主题。
- 一旦消费者订阅主题,Kafka 将向消费者提供主题的当前偏移,并且还将偏移保存在 Zookeeper 系统中。
- 消费者将定期请求 Kafka(如100 Ms)新消息。
- 一旦 Kafka 收到来自生产者的消息,它将这些消息转发给消费者。
- 消费者将收到消息并进行处理。
- 一旦消息被处理,消费者将向 Kafka 代理发送确认。
- 一旦 Kafka 收到确认,它将偏移更改为新值,并在 Zookeeper 中更新它。
- 由于偏移在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。
以上流程将重复,直到消费者停止请求。
- 消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续消息。
“队列消息”(用户组)的工作流【???】
在“队列消息传递系统”而不是单个消费者中,具有相同组 ID 的一组消费者将订阅主题。
- 简单来说,订阅“具有相同 Group ID ”的主题的消费者被认为是单个组【?】,并且消息在它们之间共享。【???】
工作流程:
- 生产者以固定间隔向某个主题发送消息。
- Kafka 存储“为该特定主题配置的分区”中的所有消息。(类似于前面的方案)
- 单个消费者订阅特定主题,假设订阅 Topic-01 的 Group ID 为 Group-1 。
- Kafka 以与“发布/订阅消息”相同的方式与消费者交互,直到新消费者以相同的组 ID 订阅相同主题 Topic-01 1 。【???】
- 一旦新消费者到达,Kafka 将其操作切换到共享模式,并在两个消费者之间共享数据。【???】
- 一旦消费者的数量超过分区的数量,新消费者将不会接收任何进一步的消息,直到现有消费者取消订阅任何一个消费者。
- 出现这种情况是因为 Kafka 中的每个消费者将被分配至少一个分区,并且一旦所有分区被分配给现有消费者,新消费者将必须等待。
- 一旦消费者的数量超过分区的数量,新消费者将不会接收任何进一步的消息,直到现有消费者取消订阅任何一个消费者。
此功能也称为“使用者组”。
ZooKeeper 的作用
Apache Kafka 的一个关键依赖是 Apache Zookeeper,它是一个分布式配置和同步服务。
- Zookeeper 是 Kafka Broker 和 Consumer 之间的协调接口。
- Kafka 服务器通过 Zookeeper 集群共享信息:Kafka 在 Zookeeper 中存储基本元数据,例如关于主题,代理,消费者偏移(队列读取器)等的信息。
- 由于所有关键信息存储在 Zookeeper 中,并且它通常在其整体上复制此数据,因此 Kafka Broker / Zookeeper 的故障不会影响 Kafka 集群的状态,一旦 Zookeeper 重新启动,Kafka 将恢复状态。
- 这为 Kafka 带来了零停机时间。
- Kafka Broker 之间的 Leader 选举也通过使用 Zookeeper 在 Leader 失败的情况下完成。