Kafka:工作流程

来自Wikioe
跳到导航 跳到搜索


关于

Kafka 只是分为一个或多个分区的主题的集合。

  • Kafka 集群中的所有数据都是不相连的分区联合。
  • Kafka 分区是消息的线性有序序列,其中每个消息由它们的索引(称为偏移)来标识,传入消息写在分区的末尾。
  • 通过将消息复制到不同的代理提供持久性


Kafka 以快速,可靠,持久,容错和零停机的方式提供基于 pub-sub队列 的消息系统。 在这两种情况下,生产者只需将消息发送到主题,消费者可以根据自己的需要选择任何一种类型的消息传递系统。

  • Kafka 将以非常简单和高效的方式提供两个系统中最好的。

“发布/订阅消息”的工作流程【???】

Pub-Sub 消息的工作流程:

  1. 生产者定期向主题发送消息。
  2. Kafka 代理存储“为该特定主题配置的分区”中的所有消息。
    • 它确保消息在分区之间平等共享:如果生产者发送两个消息并且有两个分区,Kafka 将在第一分区中存储一个消息,在第二分区中存储第二消息。
  3. 消费者订阅特定主题。
    • 一旦消费者订阅主题,Kafka 将向消费者提供主题的当前偏移,并且还将偏移保存在 Zookeeper 系统中。
    • 消费者将定期请求 Kafka(如100 Ms)新消息。
  4. 一旦 Kafka 收到来自生产者的消息,它将这些消息转发给消费者。
  5. 消费者将收到消息并进行处理。
    • 一旦消息被处理,消费者将向 Kafka 代理发送确认。
  6. 一旦 Kafka 收到确认,它将偏移更改为新值,并在 Zookeeper 中更新它
    • 由于偏移在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。

以上流程将重复,直到消费者停止请求。

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

“队列消息”(用户组)的工作流【???】

在“队列消息传递系统”而不是单个消费者中,具有相同组 ID 的一组消费者将订阅主题。

简单来说,订阅“具有相同 Group ID ”的主题的消费者被认为是单个组【?】,并且消息在它们之间共享。【???】


工作流程:

  1. 生产者以固定间隔向某个主题发送消息。
  2. Kafka 存储“为该特定主题配置的分区”中的所有消息。(类似于前面的方案)
  3. 单个消费者订阅特定主题,假设订阅 Topic-01 的 Group ID 为 Group-1 。
  4. Kafka 以与“发布/订阅消息”相同的方式与消费者交互,直到新消费者以相同的组 ID 订阅相同主题 Topic-01 1 。【???】
  5. 一旦新消费者到达,Kafka 将其操作切换到共享模式,并在两个消费者之间共享数据。【???】
    • 一旦消费者的数量超过分区的数量,新消费者将不会接收任何进一步的消息,直到现有消费者取消订阅任何一个消费者。
      出现这种情况是因为 Kafka 中的每个消费者将被分配至少一个分区,并且一旦所有分区被分配给现有消费者,新消费者将必须等待。


此功能也称为“使用者组”。

ZooKeeper 的作用

Apache Kafka 的一个关键依赖是 Apache Zookeeper,它是一个分布式配置和同步服务。

  • Zookeeper 是 Kafka Broker 和 Consumer 之间的协调接口。


  1. Kafka 服务器通过 Zookeeper 集群共享信息:Kafka 在 Zookeeper 中存储基本元数据,例如关于主题,代理,消费者偏移(队列读取器)等的信息。
    • 由于所有关键信息存储在 Zookeeper 中,并且它通常在其整体上复制此数据,因此 Kafka Broker / Zookeeper 的故障不会影响 Kafka 集群的状态,一旦 Zookeeper 重新启动,Kafka 将恢复状态。
    • 这为 Kafka 带来了零停机时间。
  2. Kafka Broker 之间的 Leader 选举也通过使用 Zookeeper 在 Leader 失败的情况下完成。