我有 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 将看到一个消费者组中有多少消费者是活跃的。它可以为消费者分配一个分区,如下所示:
(在图中;P0、P1、P2 和 P3 是分区。消费者组 A 有 C1 和 C2 消费者。C1 监听 P0,P3 和 C2 监听 P1 和 P2。最后,您的消费者组 A 将从所有分区。)
现在让我们假设;您的使用者是单线程的,处理一条消息大约需要 1 秒,那么在 case#3 中,您的吞吐量将为 1 msg/秒。
在情况#2; 这将是 3 味精/秒。因为每个消费者都在监听不同的分区并处理数据。
在情况#1; 你不会得到任何好处。
| 归档时间: |
|
| 查看次数: |
1820 次 |
| 最近记录: |