博学而笃志 切问而近思 仁在其中
详情
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 idgroup-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。



下一篇:测试
相关文章
loading......
最新动态
所有评论

loading......

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册