Apache Kafka - WorkFlow

截至目前,我们讨论了卡夫卡的核心概念.现在让我们来看看Kafka的工作流程.

Kafka只是分成一个或多个分区的主题集合. Kafka分区是线性排序的消息序列,其中每个消息由其索引标识(称为偏移). Kafka集群中的所有数据都是分区的脱节联合.传入消息在分区末尾写入,消息依次由消费者读取.通过将消息复制到不同的代理来提供持久性.

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

Pub-Sub Messaging的工作流程

以下是Pub-Sub Messaging的逐步工作流程 :

  • 生产者定期向主题发送消息.

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

  • 消费者订阅特定主题.

  • 消费者订阅主题后,Kafka将向消费者提供主题的当前偏移量,并将偏移量保存在消费者手中. Zookeeper ensemble.

  • 消费者将定期请求Kafka(如100 Ms)获取新消息.

  • 一旦Kafka收到来自制作人的消息,它就会将这些消息转发给消费者.

  • 消费者将收到消息并对其进行处理.

  • 消息处理完毕后,消费者会向Kafka经纪人发送确认信息.

  • 一旦Kafka收到确认,它就会将偏移量更改为新值并在Zookeeper中更新它.由于在Zookeeper中维护了偏移,因此即使在服务器暴动期间,消费者也可以正确读取下一条消息.

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

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

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

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

  • 生产者定期向主题发送消息.

  • Kafka将为该特定主题配置的分区中的所有消息存储,与之前的方案类似.

  • 单个消费者订阅特定主题,假设,为.

  • Kafka以与Pub-Sub Messaging相同的方式与消费者交互,直到新消费者使用相同的为.

  • 新消费者到货后,Kafka将其运营切换为共享模式并分享两个消费者之间的数据.此共享将持续到消费者数量达到为该特定主题配置的分区数量.

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

  • 此功能也称为.同样,Kafka将以非常简单有效的方式提供两个系统中的最佳系统.

ZooKeeper的角色

Apache Kafka的一个关键依赖是Apache Zookeeper,它是一个分布式配置和同步服务. Zookeeper充当Kafka经纪人和消费者之间的协调界面. Kafka服务器通过Zookeeper集群共享信息. Kafka在Zookeeper中存储基本元数据,例如有关主题,代理,消费者偏移(队列读取器)等的信息.

由于所有关键信息都存储在Zookeeper中,因此它通常会复制此整个集合中的数据,Kafka broker/Zookeeper的失败不会影响Kafka集群的状态.一旦Zookeeper重新启动,Kafka将恢复状态.这为Kafka提供了零停机时间. Kafka经纪人之间的领导者选举也是在领导失败的情况下使用Zookeeper完成的.

要了解有关Zookeeper的更多信息,请参阅 zookeeper

在下一章中,让我们继续介绍如何在您的机器上安装Java,ZooKeeper和Kafka.