Kafka分区分配协议

Kafka partition assignment protocol

我正在编写集成测试以使用 confluent-dotnet(包装 librdkafka)验证 kafka 生产者消费者配置。

在一个测试中,我想启动一个消费者,消费者将从现有分区的末尾开始,然后从生产者发布一条消息,并断言消费者只消费了一条消息。

现在消费者的启动是异步的(即:如果你调用订阅然后直接发布,从最后开始的消费者将不会收到它)。 在没有竞争条件的情况下编写此测试的适当方法是什么?一旦我完成"Partition.Assign",消费者抵消已经确定了吗?我不确定,因为 OnPartitionAssigned 的回调只包含一个 TopicPartition,没有偏移量。

在相关问题上,似乎有时候,在没有任何 kafka 节点故障的情况下(afaict),我收到的分配的分区比分区的数量多(即:我被分配了两次相同的分区),如何这可能吗?

设置一个 OnPartitionEof 委托,当消费者到达分区的末尾时将调用它,当它被调用时,您可以确定消费者确实正在为给定的分区获取消息并且您可以开始向它生产。

        consumer.OnPartitionEOF += (_, end)
            => Console.WriteLine($"Reached end of topic {end.Topic} partition {end.Partition}, next message will be at offset {end.Offset}");