学习kafka的第二天

这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战

Kafka的集群图

cluster_architecture.png

Broker

Kafka 集群通常由多个代理组成以保持负载平衡。Kafka brokers 是无状态的,所以他们使用 ZooKeeper 来维护他们的集群状态。一个 Kafka broker 实例每秒可以处理数十万次读取和写入,每个 broker 可以处理 TB 级的消息而不会影响性能。Kafka broker leader 选举可以通过 ZooKeeper 来完成。

ZooKeeper

ZooKeeper 用于管理和协调 Kafka 代理。ZooKeeper 服务主要用于通知生产者和消费者有关 Kafka 系统中任何新代理的存在或 Kafka 系统中代理的故障。根据 Zookeeper 收到的关于代理存在或失败的通知,然后生产者和消费者做出决定并开始与其他一些代理协调他们的任务。

Producers

生产者将数据推送给经纪人。当新代理启动时,所有生产者都会搜索它并自动向该新代理发送消息。Kafka 生产者不会等待来自代理的确认,而是以代理可以处理的速度发送消息。

Consumers

由于 Kafka brokers 是无状态的,这意味着消费者必须通过使用分区偏移量来维护已经消费了多少消息。如果消费者确认特定的消息偏移,则意味着消费者已经消费了所有先前的消息。消费者向代理发出异步拉取请求,以准备好使用字节缓冲区。消费者只需提供一个偏移值就可以倒带或跳到分区中的任何点。消费者偏移值由 ZooKeeper 通知。

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

以下是 Pub-Sub 消息传递的逐步工作流程 -

  • 生产者定期向主题发送消息。
  • Kafka 代理将所有消息存储在为该特定主题配置的分区中。它确保消息在分区之间平等共享。如果生产者发送两条消息并且有两个分区,则Kafka将在第一个分区中存储一条消息,在第二个分区中存储第二条消息。
  • 消费者订阅特定主题。
  • 一旦消费者订阅了一个主题,Kafka 将向消费者提供该主题的当前偏移量,并将该偏移量保存在 Zookeeper 集合中。
  • 消费者将定期(如 100 毫秒)向 Kafka 请求新消息。
  • 一旦 Kafka 收到来自生产者的消息,它就会将这些消息转发给消费者。
  • 消费者将收到消息并对其进行处理。
  • 处理完消息后,消费者将向 Kafka 代理发送确认。
  • 一旦 Kafka 收到确认,它会将偏移量更改为新值并在 Zookeeper 中更新它。由于在 Zookeeper 中维护了偏移量,因此即使在服务器异常期间,消费者也可以正确读取下一条消息。
  • 上述流程将重复,直到消费者停止请求。
  • 消费者可以选择随时回退/跳到主题的所需偏移量并阅读所有后续消息。

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

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

  • 生产者定期向主题发送消息。
  • Kafka 将所有消息存储在为该特定主题配置的分区中,类似于之前的场景。
  • 单个消费者订阅特定主题,假设"Topic-01"和"Group ID"为"Group-1"。
  • 卡夫卡用相同的方式,发布-订阅消息的消费者交互,直到新的消费订阅同一主题,"主题-01"与同"组ID"为"第1组"。
  • 一旦新的消费者到达,Kafka 将其操作切换到共享模式并在两个消费者之间共享数据。这种共享将一直持续到消费者数量达到为该特定主题配置的分区数量。
  • 一旦消费者数量超过分区数量,新消费者将不会收到任何进一步的消息,直到现有消费者中的任何一个退订。出现这种情况是因为 Kafka 中的每个消费者至少会分配一个分区,一旦所有分区都分配给现有消费者,新消费者将不得不等待。
  • 此功能也称为"消费者组"。同样,Kafka 将以非常简单和高效的方式提供两个系统中最好的。

おすすめ

転載: juejin.im/post/7034503870071963661