public async Task<List<OffsetResponse>> GetTopicOffsetAsync(string topic, int maxOffsets = 2, int time = -1)
{
await _brokerRouter.RefreshMissingTopicMetadata(topic).ConfigureAwait(false);
var topicMetadata = GetTopicFromCache(topic);
//send the offset request to each partition leader
var sendRequests = topicMetadata.Partitions
.GroupBy(x => x.PartitionId)
.Select(p =>
{
var route = _brokerRouter.SelectBrokerRouteFromLocalCache(topic, p.Key);
var request = new OffsetRequest
{
Offsets = new List<Offset>
{
new Offset
{
Topic = topic,
PartitionId = p.Key,
MaxOffsets = maxOffsets,
Time = time
}
}
};
return route.Connection.SendAsync(request);
}).ToArray();
await Task.WhenAll(sendRequests).ConfigureAwait(false);
return sendRequests.SelectMany(x => x.Result).ToList();
}