Apache Kafka 工作流程

Kafka 只是分为一个或多个partition的topic的集合。Kafka 分区是消息的线性有序序列,其中每个消息由它们的索引(称为偏移offset)来标识。Kafka 集群中的所有数据都是不相连的partition联合。 传入消息写在partition的末尾,消息由消费者顺序读取。 通过将消息复制到不同的Broker提供持久性。

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

  • 生产者定期向主题发送消息。
    Kafka Broker 存储为该特定topic配置的partition中的所有消息。 它确保消息在partition之间平等共享。 如果生产者发送两个消息并且有两个partition,Kafka将在第一partition中存储一个消息,在第二partition中存储第二消息。
  • 消费者订阅特定主题。

一旦消费者订阅topic,Kafka 将向消费者提供topic的当前偏移offset,并且还将偏移offset保存在 Zookeeper 系统中。

消费者将定期(如100 ms) 请求 Kafka 新消息。

一旦 Kafka 收到来自生产者的消息,它将这些消息转发给消费者。消费者将收到消息并进行处理。

一旦消息被处理,消费者将向 Kafka 代理发送确认。一旦 Kafka 收到确认,它将偏移offset更改为新值,并在 Zookeeper 中更新它。 由于偏移offset在 Zookeeper 中维护,消费者可以正确地读取下一封邮件,即使在服务器暴力期间。
以上流程将重复,直到消费者停止请求。

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

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

在队列消息传递系统中不是单个消费者,而是一组消费者。 简单来说,消费同一topic的一组消费者,消息在它们之间共享。

生产者以固定间隔向某个主题发送消息。
Kafka存储在为该特定topic配置的partition中的所有消息。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值