Apache Kafka – 工作流
Apache Kafka – 工作流
到目前为止,我们讨论了 Kafka 的核心概念。现在让我们对 Kafka 的工作流程有所了解。
Kafka 只是一个被分成一个或多个分区的主题集合。Kafka 分区是一个线性排序的消息序列,其中每条消息都由它们的索引(称为偏移量)标识。Kafka 集群中的所有数据都是分区的脱节联合。传入的消息写在分区的末尾,消息由消费者顺序读取。通过将消息复制到不同的代理来提供持久性。
Kafka 以快速、可靠、持久、容错和零停机的方式提供基于发布-订阅和队列的消息传递系统。在这两种情况下,生产者只需将消息发送到主题,消费者可以根据需要选择任何一种类型的消息传递系统。让我们按照下一节中的步骤来了解消费者如何选择他们选择的消息传递系统。
Pub-Sub 消息传递的工作流程
以下是 Pub-Sub 消息传递的逐步工作流程 –
-
生产者定期向主题发送消息。
-
Kafka 代理将所有消息存储在为该特定主题配置的分区中。它确保消息在分区之间平等共享。如果生产者发送两条消息并且有两个分区,Kafka 将在第一个分区中存储一条消息,在第二个分区中存储第二条消息。
-
消费者订阅特定主题。
-
一旦消费者订阅了一个主题,Kafka 将向消费者提供该主题的当前偏移量,并将该偏移量保存在 Zookeeper 集合中。
-
消费者将定期(如 100 毫秒)向 Kafka 请求新消息。
-
一旦 Kafka 收到来自生产者的消息,它就会将这些消息转发给消费者。
-
消费者将收到消息并对其进行处理。
-
处理完消息后,消费者将向 Kafka 代理发送确认。
-
一旦 Kafka 收到确认,它将偏移更改为新值并在 Zookeeper 中更新它。由于在 Zookeeper 中维护了偏移量,因此即使在服务器异常期间,消费者也可以正确读取下一条消息。
-
上述流程将重复,直到消费者停止请求。
-
消费者可以选择随时回退/跳到主题的所需偏移量并阅读所有后续消息。
队列消息/消费者组的工作流程
在队列消息系统而不是单个消费者中,具有相同Group ID 的
一组消费者将订阅一个主题。简单来说,订阅具有相同Group ID
的主题的消费者被视为一个组,消息在它们之间共享。让我们检查一下这个系统的实际工作流程。
-
生产者定期向主题发送消息。
-
Kafka 将所有消息存储在为该特定主题配置的分区中,类似于前面的场景。
-
单个消费者订阅特定主题,假设
Topic-01
和Group ID
为Group-1
。 -
卡夫卡用相同的方式,发布-订阅消息的消费者交互,直到新的消费订阅同一主题,
主题-01
与同组ID
为第1组
。 -
一旦新的消费者到达,Kafka 将其操作切换到共享模式并在两个消费者之间共享数据。这种共享将一直持续到消费者数量达到为该特定主题配置的分区数量。
-
一旦消费者数量超过分区数量,新消费者将不会收到任何进一步的消息,直到现有消费者中的任何一个退订。出现这种情况是因为 Kafka 中的每个消费者至少会分配一个分区,一旦所有分区都分配给现有消费者,新消费者将不得不等待。
-
此功能也称为
Consumer Group
。同样,Kafka 将以非常简单和高效的方式提供两个系统中最好的。
ZooKeeper 的作用
Apache Kafka 的一个关键依赖项是 Apache Zookeeper,它是一个分布式配置和同步服务。Zookeeper 充当 Kafka 代理和消费者之间的协调接口。Kafka 服务器通过 Zookeeper 集群共享信息。Kafka 将基本元数据存储在 Zookeeper 中,例如有关主题、代理、消费者偏移量(队列读取器)等的信息。
由于所有关键信息都存储在 Zookeeper 中,并且它通常会在其整体中复制这些数据,因此 Kafka broker / Zookeeper 的故障不会影响 Kafka 集群的状态。一旦 Zookeeper 重新启动,Kafka 将恢复状态。这为 Kafka 提供了零停机时间。Kafka broker之间的leader选举也是在leader故障的情况下使用Zookeeper来完成的。
要了解更多关于动物园管理员,请参阅动物园管理员
让我们在下一章继续进一步了解如何在您的机器上安装 Java、ZooKeeper 和 Kafka。