二、Kafka的集群架构与工作流程

1、Kafka集群组件说明

Kafka集群图
  • Broker(代理)
    Kafka集群通常由多个代理组成以保持负载平衡。 Kafka代理是无状态的,所以它们使用ZooKeeper来维护它们的集群状态。 一个Kafka代理实例可以每秒处理数十万次读取和写入,每个Broker可以处理TB的消息,而没有性能影响。 Kafka经纪人领导选举可以由ZooKeeper完成。
  • ZooKeeper
    ZooKeeper用于管理和协调Kafka代理。 ZooKeeper服务主要用于通知生产者和消费者Kafka系统中存在任何新代理或Kafka系统中代理失败。 根据Zookeeper接收到关于代理的存在或失败的通知,然后生产者和消费者采取决定并开始与某些其他代理协调他们的任务。
  • Producers(生产者)
    生产者将数据推送给经纪人。 当新代理启动时,所有生产者搜索它并自动向该新代理发送消息。 Kafka生产者不等待来自代理的确认,并且发送消息的速度与代理可以处理的一样快。
  • Consumers(消费者)
    因为Kafka代理是无状态的,这意味着消费者必须通过使用分区偏移来维护已经消耗了多少消息。 如果消费者确认特定的消息偏移,则意味着消费者已经消费了所有先前的消息。 消费者向代理发出异步拉取请求,以具有准备好消耗的字节缓冲区。 消费者可以简单地通过提供偏移值来快退或跳到分区中的任何点。 消费者偏移值由ZooKeeper通知。

2、工作流程

2.1 发布 - 订阅消息的工作流程

(1)生产者定期向主题发送消息。
(2)Kafka 代理存储该特定主题配置的分区中的所有消息。 确保消息在分区之间平等共享。 如果生产者发送两个消息并且有两个分区,Kafka 将在第一分区中存储一个消息,在第二分区中存储第二消息。
(3)消费者订阅特定主题。一旦消费者订阅主题,Kafka 将向消费者提供主题的当前偏移,并且还将偏移保存在 Zookeeper 系统中。
(4)消费者将定期请求 Kafka 新消息。 Kafka 收到来自生产者的消息后,会将这些消息转发给消费者。
(5)消费者收到消息并进行处理后,便会向 Kafka 代理发送确认。
(6) Kafka 收到确认,将偏移更改为新值,并在 Zookeeper 中更新它。 由于偏移在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。
(7)重复以上流程,直到消费者停止请求。消费者可以随时回退/跳到所需的主题偏移量,并阅读所有后续消息。

2.1 队列消息/用户组的工作流

在队列消息传递系统,而不是单个消费者中,具有相同 Group ID 的一组消费者将订阅主题。这个消费者组被认为是单个组,并且消息在它们之间共享。

(1)生产者定期向某个主题发送消息。
(2)Kafka 代理存储该特定主题配置的分区中的所有消息。
(3)单个消费者订阅特定主题,假设为 Topic-01,Group ID 为 Group-1。
(4)Kafka 以与发布 - 订阅消息相同的方式与消费者交互,直到新消费者以相同的组 ID 订阅相同主题Topic-01 。
(5)一旦新消费者到达,Kafka 将其操作切换到共享模式,并在两个消费者之间共享数据。 此共享将持续,直到用户数达到为该主题配置的分区数。
(6)一旦消费者的数量超过分区的数量,新消费者将不会接收任何新消息,直到现有的一个消费者取消订阅。 出现这种情况是因为 Kafka 中的每个消费者将被分配至少一个分区,并且一旦所有分区被分配给现有消费者,新消费者将必须等待。

转自W3Cschool的Kafka基本工作流程

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容