public async Task RandomBatches()
        {
            const string topic     = "test";
            const int    batchSize = 10;
            const int    batchTime = 500;

            var consumer = Services.GetRequiredService <IKafkaConsumer>();
            var producer = Services.GetRequiredService <IKafkaProducer>();

            var sink = Sink <StubMessage> .Create();

            consumer.Pipeline <StubMessage>(topic)
            .Batch(batchSize, TimeSpan.FromMilliseconds(batchTime))
            .Action(async messages =>
            {
                await sink.Batch(messages);
                Log($"Received Batch = {messages.Count()}");
            })
            .Subscribe();

            var count = await Generator.Run(
                Logger,
                () => producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage),
                TimeSpan.FromSeconds(5),
                TimeSpan.FromMilliseconds(200));

            await Task.Delay(batchTime * 2);

            Log($"Generated {count} calls");

            sink.TotalMessages().Should().Be(count);
        }
        public async Task BatchSeries()
        {
            const int    batchSize  = 5;
            const int    batchCount = 30;
            const int    batchTime  = 500;
            const string topic      = "test";
            var          sink       = Sink <StubMessage> .Create(x => Log("Received"));

            var consumer = Services.GetRequiredService <IKafkaConsumer>();
            var producer = Services.GetRequiredService <IKafkaProducer>();
            var broker   = Services.GetRequiredService <IKafkaMemoryBroker>();

            consumer.Pipeline <StubMessage>(topic)
            .Batch(batchSize, TimeSpan.FromMilliseconds(batchTime))
            .Action(async messages =>
            {
                await sink.Batch(messages);
                Log($"Received Batch = {messages.Count()}");
            })
            .Subscribe();

            await Task.WhenAll(Enumerable.Range(0, batchCount *batchSize)
                               .Select(_ => producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage)));

            await producer.ProduceAsync(topic, Sink <StubMessage> .NewMessage);

            await Task.Delay(batchTime * 2);

            await sink.Received(batchCount)
            .Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() == batchSize));

            await sink.Received(1).Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() == 1));

            await sink.DidNotReceive()
            .Batch(Arg.Is <IMessageEnumerable <StubMessage> >(x => x.Count() != batchSize && x.Count() != 1));
        }