Kafka分区分配协议

时间:2018-01-12 10:26:38

标签: c# apache-kafka kafka-consumer-api kafka-producer-api

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

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

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

就相关问题而言,似乎有时候,在没有(afaict)任何kafka节点失败的情况下,我收到的分区多于分区(即:我被分配了两次相同的分区),这是怎么回事?可能的?

1 个答案:

答案 0 :(得分:0)

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

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