apache-kafka - Kafka 分区和吞吐量

标签 apache-kafka

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

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

从不同的角度来看它却没有。

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

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

最佳答案

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 partition distribution

(图中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 msg/秒。因为每个消费者都在监听不同的分区和处理数据。

如果#1;你不会得到任何好处。

关于apache-kafka - Kafka 分区和吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891414/

相关文章:

apache-spark - 如何在启动Spark Streaming进程时加载历史数据,并计算运行聚合

apache-kafka - kafka.javaapi.* 和 org.apache.kafka.* 有什么区别?

apache-kafka - 将无法反序列化的消息发布到DLT主题

java - 处理慢速消费者 kafka 上的背压并避免重新平衡

apache-kafka - 卡夫卡流 : Custom TimestampExtractor for aggregation

java - 卡夫卡1.0流媒体API : message consumption from partitions get delayed

mysql - 设置Kafka连接器管道时出错

jdbc - Kafka Connect JDBC OOM - 大数据量

python - 如何以编程方式从 Python 中的融合模式注册表中获取模式

apache-spark - 使用 Spark Streaming 读取 Kafka 记录时出现不可序列化异常