单个消费者可以从 kafka 主题的多个分区中读取数据吗?

ove*_*nge 10 apache-kafka kafka-topic

有一个kafka主题有16个分区

使用给定的消费者组名称,我们目前正在启动单个消费者来读取该主题。


  1. 单个消费者是否partition 0(仅)阅读该主题?如果partition 0消息已空,消费者是否开始从下一个分区读取(partiton 1...等等)?

  2. 我们可以选择启动多个消费者(具有相同的消费者组名称)来读取同一主题(具有 16 个分区)。可以维护多少个消费者来并行读取多个分区?

dba*_*tor 17

组中的消费者通过确定每个分区仅由组中的单个消费者使用来尽可能公平地划分主题分区。当消费者数量少于分区数量时,相同的消费者将从多个分区读取消息。

在您的场景中,单个使用者将从您的所有分区中读取数据。这种类型的消费者被称为排他性消费者。当消费者组只有一个消费者时,就会发生这种情况。这样的消费者必须连接到它需要的所有分区。

理想情况下,分区的数量应该等于消费者的数量。如果消费者数量较多,多余的消费者就会闲置,浪费客户端资源。如果分区数量较多,一些消费者将从多个分区读取数据,这不应该成为问题,除非消息的顺序很重要。

订购

Kafka 不保证分区之间消息的排序。它确实提供分区内的排序。因此,如果消费者仅订阅单个分区,Kafka 可以维护消费者的消息排序。

如果您的用例需要消息排序,则从生产者发送的消息应使用相同的分区键来分组到 kafka 代理中的相同分区中。


rec*_*ion 6

你有一个有 16 个分区的主题

使用给定的消费者组名称,您当前正在启动单个消费者以从主题中读取该单个消费者将从所有分区中读取。

因为您可以启动多个消费者(在同一消费者组内)。

对于 16 个分区,您应该最多有 16 个使用者监听每个分区。在消费者组内的 Kafka 中,每个分区最多可以有 1 个消费者。