开发学院

您的位置:首页>教程>正文

教程正文

Apache Kafka 工作流程

  到目前为止,我们讨论了Kafka的核心概念。现在让我们来解释Kafka的工作流程。

  Kafka被分成一个或多个部分的主题的集合。Kafka分区是一个线性有序的消息序列,其中每个消息都由它们的索引(称为偏移量)来标识。Kafka集群中的所有数据都是分区的不连贯结合。传入的消息被写入分区的末尾,消息被消费者顺序读取。持久性是通过将消息复制到不同的代理来提供的。

  Kafka以快速、可靠、持久、容错和零停机的方式提供了基于发布和队列的消息传递系统。在这两种情况下,生产者只需将消息发送到一个主题,消费者可以根据自己的需要选择任何一种类型的消息传递系统。让我们按照下一节中的步骤来理解消费者如何选择他们选择的消息传递系统。

发布-订阅消息的工作流

  以下是发布-订阅消息的分步工作流程:

  •   生产者定期给一个主题发信息。

  •   Kafka代理将所有消息存储在为该特定主题配置的分区中。它确保消息在分区之间平等共享。如果生产者发送两个消息,并且有两个分区,Kafka将在第一个分区中存储一个消息,在第二个分区中存储第二个消息。

  •   消费者订阅特定的主题。

  •   一旦消费者订阅了一个主题,Kafka将向消费者提供该主题的当前偏移量,并且还将偏移量保存在zookeeper集合中。

  •   消费者将定期(如100毫秒)向Kafka索要新信息。

  •   一旦Kafka收到来自生产者的信息,它就把这些信息转发给消费者。

  •   消费者会收到信息并进行处理。

  •   一旦消息被处理,消费者将向Kafka Broker发送确认。

  •   一旦Kafka收到确认,它会将偏移量更改为新值,并在zookeeper中进行更新。因为偏移量在zookeeper中维护,所以即使在服务器出错时,消费者也可以正确读取下一条消息。

  •   上述流程将重复,直到消费者停止请求。

  •   消费者可以选择随时倒带/跳到主题的所需偏移量,并阅读所有后续消息。

队列消息传递/消费者组的工作流

  在队列消息传递系统中,具有相同组标识的一组消费者将订阅一个主题,而不是单个消费者。简而言之,订阅具有相同组标识的主题的消费者被视为单个组,并且消息在他们之间共享。让我们检查一下这个系统的实际工作流程。

  •   生产者定期向一个主题发送消息。

  •   Kafka将所有消息存储在为该特定主题配置的分区中,类似于前面的场景。

  •   单个消费者订阅特定主题,假设主题-01和组标识为组-1。

  •   Kafka与消费者互动的方式与发布-订阅消息的方式相同,直到新消费者订阅相同的主题,主题-01与群组-1具有相同的群组标识。

  •   一旦新的消费者到来,Kafka将它的操作切换到共享模式,并在两个消费者之间共享数据。这种共享将持续到消费者数量达到为特定主题配置的分区数量。

  •   一旦消费者的数量超过分区的数量,新消费者将不会收到任何进一步的消息,直到任何一个现有消费者退订。出现这种情况是因为Kafka中的每个消费者将被分配至少一个分区,并且一旦所有分区被分配给现有消费者,新消费者将不得不等待。

  •   这个特性也被称为消费群。同样,Kafka将以一种非常简单有效的方式提供这两种体系中的最佳。

ZooKeeper的角色

  Apache Kafka的一个关键依赖是Apache Zookeeper,这是一个分布式配置和同步服务。Zookeeper是Kafka Broker和消费者之间的协调接口。Kafka服务器通过Zookeeper集群共享信息。Kafka在Zookeeper中存储基本元数据,如主题、经纪人、消费者补偿(队列阅读器)等信息。

  由于所有关键信息都存储在Zookeeper中,并且通常会在整个团队中复制这些数据,Kafka经纪人/Zookeeper的失败不会影响Kafka集群的状态。一旦Zookeeper重新启动,Kafka将恢复这个状态。这给Kafka带来了零停机时间。Kafka经纪人之间的领导选举也是通过在领导人失败的情况下使用Zookeeper来完成的。

  让我们在下一章继续讨论如何在您的机器上安装Java、ZooKeeper和Kafka。