Kafka工作流
作者:--
发布时间:2019-11-20
评论:0
阅读:0
截至目前,我们已经了解了kafka的核心概念。 现在让我们来看看kafka的工作流程。
kafka只是分成一个或多个分区的主题集合。 kafka分区是消息的线性排序序列,每个消息由其索引标识(称为偏移量)。 kafka集群中的所有数据都是不相关的分区联合。 传入消息写在分区的末尾,消费者依次读取消息。 通过将消息复制到不同的经纪人来提供持久性。
kafka以快速,可靠,持久的容错和零停机方式提供基于发布订阅和队列的消息传递系统。 在这两种情况下,生产者只需将消息发送到一个主题,消费者就可以根据他们的需要选择任何一种消息传递系统。 可通过下一节中的步骤来了解消费者如何选择它们的消息系统。
发布订阅消息传递的工作流
以下是发布订阅消息工作流程的步骤 -
- 生产者定期向主题发送消息。
- kafka经纪人将所有消息存储在为该特定主题配置的分区中。 它确保消息在分区之间平均分享。 如果制作者发送两条消息并且有两个分区,则kafka将在第一个分区中存储一条消息,并在第二个分区中存储第二条消息。
- 消费者订阅特定主题。
- 当消费者订阅了一个主题,kafka将向消费者提供该主题的当前偏移量,并且还将该偏移量保存在zookeeper集合中。
- 消费者会定期请求kafka(如100小时)收取新消息。
- kafka收到生产者的消息后,会将这些消息转发给消费者。
- 消费者将收到消息并进行处理。
- 当消息被处理,消费者将向kafka经纪人发送确认。
- kafka收到确认后,会将偏移量更改为新值并在zookeeper中更新它。 由于在zookeeper中维护了偏移量,因此即使在服务器繁忙期间,使用者也可以正确读取下一条消息。
- 上述流程将重复,直到消费者停止请求。
- 消费者可以随时选择倒带/跳至期望的主题偏移量并阅读所有后续消息。
队列消息/消费者组的工作流
在队列消息系统(不是单个消费者)中,具有相同组id的一组消费者将订阅主题。 简而言之,订阅具有相同组id的主题的消费者被视为单个组,并且消息在他们之间共享。 让我们来看看一下这个系统的实际工作流程。
- 生产者定期向主题发送消息。
- kafka将所有消息存储在为特定主题配置的分区中,类似于之前的场景。
- 单个消费者订阅特定主题,将group id设为group-1。
- kafka发布订阅消息与消费者进行交互,直到新消费者订阅同一主题topic-01,其group id与group-1相同。
- 一旦新消费者到达,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。