public static void ProduceConsumeSchemaManyMessagesProtobuf(string bootstrapServers, string schemaRegistryServers)
        {
            var producerConfig = new ProducerConfig {
                BootstrapServers = bootstrapServers
            };
            var schemaRegistryConfig = new SchemaRegistryConfig {
                Url = schemaRegistryServers
            };

            using (var topic = new TemporaryTopic(bootstrapServers, 1))
                using (var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig))
                    using (var producer =
                               new ProducerBuilder <string, Msg230>(producerConfig)
                               .SetValueSerializer(new ProtobufSerializer <Msg230>(schemaRegistry))
                               .Build())
                    {
                        var u = new Msg230();
                        u.Value = 41;
                        producer.ProduceAsync(topic.Name, new Message <string, Msg230> {
                            Key = "test1", Value = u
                        }).Wait();

                        var consumerConfig = new ConsumerConfig
                        {
                            BootstrapServers = bootstrapServers,
                            GroupId          = Guid.NewGuid().ToString(),
                            AutoOffsetReset  = AutoOffsetReset.Earliest
                        };

                        // Test the protobuf deserializer can read this message
                        using (var consumer =
                                   new ConsumerBuilder <string, UInt32Value>(consumerConfig)
                                   .SetValueDeserializer(new ProtobufDeserializer <UInt32Value>().AsSyncOverAsync())
                                   .Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            Assert.Equal(u.Value, cr.Message.Value.Value);
                        }

                        // Check the pre-data bytes are as expected.
                        using (var consumer = new ConsumerBuilder <string, byte[]>(consumerConfig).Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            // magic byte + schema id + expected array index length + at least one data byte.
                            Assert.True(cr.Message.Value.Length >= 1 + 4 + 1 + 2 + 1);
                            // magic byte
                            Assert.Equal(0, cr.Message.Value[0]);
                            // index array length
                            Assert.Equal(1, cr.Message.Value[5]);
                            // there are 231 messages in the schema. message 230 has index 230. varint is 2 bytes:
                            // in binary: 11100110.
                            // -> &7f |80 -> 11100110 = 230
                            Assert.Equal(230, cr.Message.Value[6]);
                            // >>7 -> 00000001
                            Assert.Equal(1, cr.Message.Value[7]);
                        }
                    }
        }
        public static void ProduceConsumeSchemaManyMessagesProtobuf(string bootstrapServers, string schemaRegistryServers)
        {
            var producerConfig = new ProducerConfig {
                BootstrapServers = bootstrapServers
            };
            var schemaRegistryConfig = new SchemaRegistryConfig {
                Url = schemaRegistryServers
            };

            using (var topic = new TemporaryTopic(bootstrapServers, 1))
                using (var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig))
                    using (var producer =
                               new ProducerBuilder <string, Msg230>(producerConfig)
                               .SetValueSerializer(new ProtobufSerializer <Msg230>(schemaRegistry))
                               .Build())
                    {
                        var u = new Msg230();
                        u.Value = 41;
                        producer.ProduceAsync(topic.Name, new Message <string, Msg230> {
                            Key = "test1", Value = u
                        }).Wait();

                        var consumerConfig = new ConsumerConfig
                        {
                            BootstrapServers = bootstrapServers,
                            GroupId          = Guid.NewGuid().ToString(),
                            AutoOffsetReset  = AutoOffsetReset.Earliest
                        };

                        // Test the protobuf deserializer can read this message
                        using (var consumer =
                                   new ConsumerBuilder <string, UInt32Value>(consumerConfig)
                                   .SetValueDeserializer(new ProtobufDeserializer <UInt32Value>().AsSyncOverAsync())
                                   .Build())
                        {
                            consumer.Subscribe(topic.Name);
                            var cr = consumer.Consume();
                            Assert.Equal(u.Value, cr.Message.Value.Value);
                        }
                    }
        }