Kafka 分区和吞吐量

ank*_*tel 2 apache-kafka

我有 kafka 的入门经验,我正在尝试探索它的细节。

我试图了解 kafka 分区如何帮助提高吞吐量;在我在网上找到的所有信息中;说明更多的分区意味着更多的并行流;这是有道理的。

然而,从不同的角度来看,它不会。

假设我有两个消费者,它们以每秒“10”条来自给定主题的消息的速度消耗数据。现在无论他们是从单个分区还是两个不同的分区消费;我的吞吐量将保持不变,每秒 20 条消息。

我觉得我一定遗漏了一些关于内部工作的细节,你能帮助我解释 kafka 分区(多个)如何帮助提高固定数量的消费者与单个 kafka 分区的吞吐量。

JR *_*bkr 5

https://kafka.apache.org/intro

当我开始学习 kafka 时;我有同样的问题。以下解释将帮助您回答您的问题:

假设您有一个包含 3 个分区的主题 A:X、Y 和 Z。

首先要了解的是数据是如何跨分区分布的:

生产者可以选择消息将进入哪个分区。因此,您的生产者可以将消息#1 发送到分区-X,将消息#2 发送到分区-Y,将消息#3 发送到分区-Z。同理,其他生产者可以选择将数据写入哪个分区。如果你的生产者没有选择分区,那么 kafka 会为你选择。想要查询更多的信息; 请结帐生产者 API。生产者永远不应该将消息#1 推送到分区-X、分区-Y 和分区-Z。您可以创建副本以提供容错。分区不是副本

现在,消费者订阅了您的主题。Kafka 将看到一个消费者组中有多少消费者是活跃的。它可以为消费者分配一个分区,如下所示:

Kafka分区分布

(在图中;P0、P1、P2 和 P3 是分区。消费者组 A 有 C1 和 C2 消费者。C1 监听 P0,P3 和 C2 监听 P1 和 P2。最后,您的消费者组 A 将从所有分区。)

  1. 如果您的消费者组有 3 个消费者,而您又添加了一个新消费者,那么它将是理想的选择。消费者组中的消费者数量 <= 分区数
  2. 如果您的消费者组有 2 个消费者并且您添加了一个新的消费者,则将触发重新平衡。Kafka 会为你的消费者分配一个分区。
  3. 如果这是全新的消费者组,那么 kafka 会将所有分区分配给这个新消费者。

现在让我们假设;您的使用者是单线程的,处理一条消息大约需要 1 秒,那么在 case#3 中,您的吞吐量将为 1 msg/秒。

在情况#2; 这将是 3 味精/秒。因为每个消费者都在监听不同的分区并处理数据。

在情况#1; 你不会得到任何好处。