public static int Write(this IKafkaWriter writer, IEnumerable <Message> messages, MessageCodec codec) { if (codec == MessageCodec.None) { using (writer.MarkForLength()) { writer.Write(messages); } return(0); } using (var messageWriter = new KafkaWriter()) { messageWriter.Write(messages); var messageSet = messageWriter.ToSegment(false); using (writer.MarkForLength()) { // messageset writer.Write(0L); // offset using (writer.MarkForLength()) { // message using (writer.MarkForCrc()) { writer.Write((byte)0) // message version .Write((byte)codec) // attribute .Write(-1); // key -- null, so -1 length using (writer.MarkForLength()) { // value var initialPosition = writer.Position; writer.WriteCompressed(messageSet, codec); var compressedMessageLength = writer.Position - initialPosition; return(messageSet.Count - compressedMessageLength); } } } } } }
private static CompressedMessageResult CreateGzipCompressedMessage(IEnumerable <Message> messages) { using (var writer = new KafkaWriter()) { writer.Write(messages, false); var messageSet = writer.ToBytesNoLength(); var compressedMessage = new Message(Compression.Zip(messageSet), (byte)MessageCodec.CodecGzip); return(new CompressedMessageResult { CompressedAmount = messageSet.Length - compressedMessage.Value.Length, CompressedMessage = compressedMessage }); } }
public WriteAt(KafkaWriter writer, Action <int> write, int position) { _writer = writer; _position = position; _write = write; }