Kafka中消费者或者消费者组的数量有限制吗?
我计划每 10 分钟向一个主题推送 200 MB 数据,并让 200 多个不同的消费者收听并消费该主题。还有其他推荐的方法吗?
正如罗希特的回答所述,没有这样的限制。
关于您的问题,您似乎想实现某种消费的并行化。如果您向 200 个消费者发送 200 个不同的消费者组,则每个消费者将独立读取所有数据,因此您将有200 个线程每 10 分钟读取相同的 200MB (200x200 MB = 每 10 分钟收到 40GB)。我猜您希望每个消费者按照您的方法每 10 分钟读取 1MB 的内容,但事实并非如此。
如果每个消费者实现的逻辑相同,则不应声明多个消费者组。如果您声明两个消费者组,每个消费者组都会读取相同的数据,并且您只需重复已完成的工作,复制输出即可。如果要对主题的记录完成的工作不同,请设置不同的消费者组:例如,一个消费者组必须将记录存储到DDBB中。另一个消费者组必须将数据可视化到 Grafana 中。这是两种不同的处理机制,因此每种机制都必须自己读取所有数据。这并不是声明不同消费群体的唯一原因,而是其中的一个例子。对于一个主题声明多个消费者组有多种理由。
想象一个场景,唯一要做的工作是将消息存储到 DDBB 中。如果您声明两个消费者组并启动消费者,您将得到的是存储在数据库中的重复值,因为第一个消费者组所做的工作与第二个消费者组相同。您不仅从 kafka 重新读取,还将相同的消息重新存储到 ddbb 中。
为了实现启动多个消费者来有效地共享工作(例如,启动 4 个消费者,每个消费者读取 50MB),您必须对主题进行分区。
只有来自同一消费者组的一个消费者线程可以读取特定分区。如果该主题中有 4 个分区,并且有 4 个共享同一消费者组的消费者线程,则启动它们将导致每个线程从一个分区读取数据。如果您启动两个消费者,两个消费者都将被分配 2 个分区。工作原理如下:
在这种情况下,如果消费者共享同一个消费者组,那么并发读取的消费者数量确实受到限制,即该主题的分区数量。如果您启动第五个消费者线程,其中一个将阻塞/等待,因为它没有分配任何分区。在示例中,消费者 5 一直等待,直到有一个分区可供他使用(因此可能会永远等待)。
我的建议是:决定需要多少个消费者线程来消费数据,并在此基础上对主题进行分区。例如,如果您将主题划分为 8 个不同的分区,您将能够从同一消费者组启动 8 个消费者。然后,每个消费者将或多或少地读取(取决于生产者分区程序)25MB (200/8)的传入数据,从而有效地共享工作负载:每个消费者将从自己的分区中读取数据。
如果您启动 200 个消费者和 200 个不同的消费者组,那么
您要做的工作就会成倍增加x200,因为每个消费者都会从头到尾读取数据。
如果您使用相同的消费者组启动 200 个消费者,并且该主题只有一个分区,那么 您将有一个线程完成所有工作,并有 199 个过时的消费者。
在 Kafka 中,特定主题的消费者组数量没有限制。然而,消费者群体的增加提高了网络利用率。
较新版本的 Kafka 毫无价值,将偏移量存储在名为 的内部 Kafka 主题中__consumer_offsets。
| 归档时间: |
|
| 查看次数: |
4609 次 |
| 最近记录: |