protected override void EncodeBody(IKafkaWriter writer, IRequestContext context) { var totalCompressedBytes = 0; var groupedPayloads = (from p in topics group p by new { p.topic, p.partition_id, p.Codec } into tpc select tpc).ToList(); writer.Write(acks) .Write((int)timeout.TotalMilliseconds) .Write(groupedPayloads.Count); foreach (var groupedPayload in groupedPayloads) { var payloads = groupedPayload.ToList(); writer.Write(groupedPayload.Key.topic) .Write(payloads.Count) .Write(groupedPayload.Key.partition_id); var compressedBytes = writer.Write(payloads.SelectMany(x => x.Messages), groupedPayload.Key.Codec); Interlocked.Add(ref totalCompressedBytes, compressedBytes); } if (context.OnProduceRequestMessages != null) { var segment = writer.ToSegment(); context.OnProduceRequestMessages(topics.Sum(_ => _.Messages.Count), segment.Count, totalCompressedBytes); } }