想要了解具有多个分区的 Kafka 主题的 max.poll.records 的行为。 假设我在一个消费者组中有 8 个分区和 8 个消费者实例。假设生产者以非常快的速度生成 2000 条消息。假设使用循环分区器。并且消息大小非常小(即忽略 fetch.max.bytes)
需要纯粹从理论上理解——实际上还有很多其他变量。
快速回答 - 对您的所有问题都是肯定的。我将详细解释您的情况,以便证明“是”是合理的。在你的例子中:
T1
,有 8 个分区。假设消息几乎立即生成(在消费任何消息之前,该表显示了消息在 kafka 主题中的分布情况 - 每个分区有 250 条消息(point1)。
Topic | Partition | Messages
T1 | P1 | m1, m9, m17, ..., m1993
T1 | P2 | m2, m10, m18, ..., m1994
T1 | P3 | m3, m11, m19, ..., m1995
T1 | P4 | m4, m12, m20, ..., m1996
T1 | P5 | m5, m13, m21, ..., m1997
T1 | P6 | m6, m14, m22, ..., m1998
T1 | P7 | m7, m15, m23, ..., m1999
T1 | P8 | m8, m16, m24, ..., m2000
由于消费者组的每个消费者只分配一个分区,因此它最多会读取 500 条记录,就像你提到的那样。然而,由于只有 250 条可用,消费者读取了 250 条记录/消息(point2)(假设:没有其他设置可以限制 kafka 消费者读取的消息数量,并且在初始写入后不再写入更多消息)
无法保证哪个消费者实例分配了哪个分区,但无论哪个消费者实例分配了partition1,都将读取消息m1,m9,m17,...,m1993(point3)