Ejemplo n.º 1
0
        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);
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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
                });
            }
        }
Ejemplo n.º 3
0
 public WriteAt(KafkaWriter writer, Action <int> write, int position)
 {
     _writer   = writer;
     _position = position;
     _write    = write;
 }