我对kafka有介绍性的经验,我正在尝试探索其细节。
我试图了解kafka分区如何帮助提高吞吐量;我在网上找到的所有信息中;据解释,更多的分区意味着更多的并行流;这是有道理的。
但是从不同的角度来看却没有。
让我说我有两个使用者,它们以给定主题每秒10条消息的速度使用数据。现在,他们不再从单个分区或两个不同的分区中使用它们了;我的吞吐量将保持每秒20条消息不变。
我觉得我必须丢失一些内部工作细节,您可以通过解释kafka分区(多个)如何帮助提高固定数量的消费者与单个kafka分区的吞吐量来帮助我。
答案 0 :(得分:1)
我认为您的第一个误解是
给定主题每秒10条消息。
在卡夫卡,话题并不是真正的具体事情。相反,您应该将其视为具有相同名称和配置的分区的集合。
然后进入
让我说我有两个使用者,它们以给定主题每秒10条消息的速度使用数据。现在,他们不再从单个分区或两个不同的分区中使用它们了;我的吞吐量将保持每秒20条消息不变。
这并不完全正确,尤其是考虑到Consumer Groups这是Kafka的关键功能时。
如果只有一个分区,则同一组中不能有多个使用者同时使用。如果您的使用者位于不同的组中,则每个使用者都将收到所有消息。通过具有多个分区,您可以使多个使用者同时运行。
例如,对于2个分区,您可以在同一组中运行2个使用者,使用者1从分区0接收记录,使用者2从分区1接收记录。如果只有一个分区,则只有1个使用者可以使用(每个组) )。
此外,分区可以位于不同的代理上,这又有助于扩展性。
答案 1 :(得分:1)
https://kafka.apache.org/intro
当我开始学习卡夫卡时;我有同样的问题。以下说明将帮助您回答问题:
假设您有一个主题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秒,那么在情况3中,您的吞吐量将是1 msg /秒。
在案例2中;这将是3 msg /秒。因为每个使用者都在听不同的分区并处理数据。
在情况1中;你不会有任何好处。