コード例 #1
0
 public Producer(TopicPartitionOffset topicPartitionOffset, string boostrapServers)
 {
     this._topicPartitionOffset = topicPartitionOffset;
     this._boostrapServers      = boostrapServers;
 }
コード例 #2
0
 private void OnPartitionEof(object sender, TopicPartitionOffset e)
 {
     Console.WriteLine($"EOF     Topic= {e.Topic}    Offset= {e.Offset}");
 }
コード例 #3
0
 public void StoreOffset(TopicPartitionOffset offset)
 {
     // TODO
     throw new NotImplementedException();
 }
コード例 #4
0
 /// <inheritdoc cref="IConsumer{TKey,TValue}.Assign(TopicPartitionOffset)" />
 public void Assign(TopicPartitionOffset partition) => throw new NotSupportedException();
コード例 #5
0
 public Consumer(TopicPartitionOffset topicPartitionOffset, ConsumerConfig config)
 {
     _topicPartitionOffset = topicPartitionOffset;
     _config = config;
 }
コード例 #6
0
ファイル: KafkaConsumer.cs プロジェクト: TobbenTM/Factorino
 private void OnEndReached(object sender, TopicPartitionOffset offset)
 {
     _handler.OnEndReached(offset.Topic, offset.Partition, offset.Offset);
 }
コード例 #7
0
 public void Seek(TopicPartitionOffset tpo)
 {
     cluster.Seek(this, tpo);
 }
コード例 #8
0
 public void StoreOffset(TopicPartitionOffset offset)
 {
 }
コード例 #9
0
 public ValueTask OnPartitionEndReached(TopicPartitionOffset offset)
 {
     _commitController.Commit(offset);
     return(new ValueTask());
 }
コード例 #10
0
 public void Seek(TopicPartitionOffset tpo)
 {
     _consumer.Seek(tpo);
 }
コード例 #11
0
 public void StoreOffset(TopicPartitionOffset offset)
 {
     _consumer.StoreOffset(offset);
 }
コード例 #12
0
 public void Assign(TopicPartitionOffset partition)
 {
     _consumer.Assign(partition);
 }
コード例 #13
0
        public static void Consumer_Poll_Error(string bootstrapServers, string singlePartitionTopic, string partitionedTopic)
        {
            LogToFile("start Consumer_Poll_Error");

            var producerConfig = new ProducerConfig {
                BootstrapServers = bootstrapServers
            };

            TopicPartitionOffset firstProduced = null;

            using (var producer = new Producer(producerConfig))
            {
                var keyData = Encoding.UTF8.GetBytes("key");
                firstProduced = producer.ProduceAsync(singlePartitionTopic, new Message {
                    Key = keyData
                }).Result.TopicPartitionOffset;
                var valData = Encoding.UTF8.GetBytes("val");
                producer.ProduceAsync(singlePartitionTopic, new Message {
                    Value = valData
                });
                producer.Flush(TimeSpan.FromSeconds(10));
            }

            var consumerConfig = new ConsumerConfig
            {
                GroupId            = Guid.NewGuid().ToString(),
                BootstrapServers   = bootstrapServers,
                SessionTimeoutMs   = 6000,
                EnablePartitionEof = true
            };

            // test key deserialization error behavior
            using (var consumer = new Consumer <Null, string>(consumerConfig))
            {
                int msgCnt = 0;
                int errCnt = 0;

                consumer.OnPartitionsAssigned += (_, partitions) =>
                {
                    Assert.Single(partitions);
                    Assert.Equal(firstProduced.TopicPartition, partitions[0]);
                    consumer.Assign(partitions.Select(p => new TopicPartitionOffset(p, firstProduced.Offset)));
                };

                consumer.OnPartitionsRevoked += (_, partitions)
                                                => consumer.Unassign();

                consumer.Subscribe(singlePartitionTopic);

                while (true)
                {
                    try
                    {
                        var record = consumer.Consume(TimeSpan.FromMilliseconds(100));
                        if (record == null)
                        {
                            continue;
                        }
                        if (record.IsPartitionEOF)
                        {
                            break;
                        }

                        msgCnt += 1;
                    }
                    catch (ConsumeException e)
                    {
                        errCnt += 1;
                        Assert.Equal(ErrorCode.Local_KeyDeserialization, e.Error.Code);
                        Assert.Equal(firstProduced.Offset.Value, e.ConsumerRecord.Offset.Value);
                    }
                }

                Assert.Equal(1, msgCnt);
                Assert.Equal(1, errCnt);

                consumer.Close();
            }

            // test value deserialization error behavior
            using (var consumer = new Consumer <string, Null>(consumerConfig))
            {
                int msgCnt = 0;
                int errCnt = 0;

                consumer.OnPartitionsAssigned += (_, partitions) =>
                {
                    Assert.Single(partitions);
                    Assert.Equal(firstProduced.TopicPartition, partitions[0]);
                    consumer.Assign(partitions.Select(p => new TopicPartitionOffset(p, firstProduced.Offset)));
                };

                consumer.OnPartitionsRevoked += (_, partitions)
                                                => consumer.Unassign();

                consumer.Subscribe(singlePartitionTopic);

                while (true)
                {
                    try
                    {
                        var record = consumer.Consume(TimeSpan.FromMilliseconds(100));
                        if (record == null)
                        {
                            continue;
                        }
                        if (record.IsPartitionEOF)
                        {
                            break;
                        }

                        msgCnt += 1;
                    }
                    catch (ConsumeException e)
                    {
                        errCnt += 1;
                        Assert.Equal(ErrorCode.Local_ValueDeserialization, e.Error.Code);
                        Assert.Equal(firstProduced.Offset.Value + 1, e.ConsumerRecord.Offset.Value);
                    }
                }

                Assert.Equal(1, msgCnt);
                Assert.Equal(1, errCnt);

                consumer.Close();
            }

            Assert.Equal(0, Library.HandleCount);
            LogToFile("end   Consumer_Poll_Error");
        }
コード例 #14
0
 private KafkaBatchContainer(string streamNamespace, IEnumerable <string> events, TopicPartitionOffset topicPartitionOffset)
 {
     _events = events;
     TopicPartitionOffset = topicPartitionOffset;
     StreamNamespace      = streamNamespace;
 }
コード例 #15
0
 public async ValueTask OnPartitionEndReached(TopicPartitionOffset offset)
 {
     await Commit().ConfigureAwait(false);
 }
コード例 #16
0
 public async Task OnPartitionEndReached(TopicPartitionOffset offset)
 {
     await _commitController.Commit(offset);
 }
コード例 #17
0
        public void Properties()
        {
            var tpo = new TopicPartitionOffset("mytopic", 42, 107);

            Assert.Equal(tpo.TopicPartition, new TopicPartition("mytopic", 42));
        }
コード例 #18
0
 public static TopicPartitionOffset AddOffset([NotNull] this TopicPartitionOffset topicPartitionOffset, int addOffset)
 => new TopicPartitionOffset(topicPartitionOffset.TopicPartition, topicPartitionOffset.Offset + addOffset);
コード例 #19
0
 public void Seek(TopicPartitionOffset tpo) => _innerConsumer.Seek(tpo);
コード例 #20
0
ファイル: Extensions.cs プロジェクト: runeanielsen/Topos
 public static bool IsSpecial(this TopicPartitionOffset tpo) => tpo.Offset.IsSpecial;
コード例 #21
0
 public void Assign(TopicPartitionOffset partition)
 => Assign(new List <TopicPartitionOffset> {
     partition
 });
コード例 #22
0
 public Task Commit(TopicPartitionOffset offset)
 {
     return(Consumer.CommitAsync(new List <TopicPartitionOffset> {
         offset
     }));
 }
コード例 #23
0
 public Task OnPartitionEndReached(TopicPartitionOffset offset)
 {
     return(Commit(offset));
 }
コード例 #24
0
 protected virtual void OnPartitionEndReached(object sender, TopicPartitionOffset offset)
 {
     Log.DebugFormat("Group [{0}]: Reached end of topic: {1} and partition: {2}, next message will be at offset: {3}", Group, offset.Topic, offset.Partition, offset.Offset);
 }
コード例 #25
0
 public void Assign(TopicPartitionOffset partition)
 {
     // TODO
 }
コード例 #26
0
 private void OnConsumerOnOnPartitionEof(object _, TopicPartitionOffset end)
 {
     LogManager.Instance.Info($"Reached end of topic {end.Topic} partition {end.Partition}, next message will be at offset {end.Offset}");
 }
コード例 #27
0
 public void Seek(TopicPartitionOffset tpo)
 {
     // TODO
     throw new NotImplementedException();
 }
コード例 #28
0
        private static void assertCloseToNow_byte(Consumer <byte[], byte[]> consumer, TopicPartitionOffset tpo)
        {
            consumer.Assign(new List <TopicPartitionOffset>()
            {
                tpo
            });
            var cr = consumer.Consume(TimeSpan.FromSeconds(10));

            Assert.NotNull(cr.Message);
            Assert.Equal(TimestampType.CreateTime, cr.Message.Timestamp.Type);
            Assert.True(Math.Abs((cr.Message.Timestamp.UtcDateTime - DateTime.UtcNow).TotalSeconds) < 120);
        }
コード例 #29
0
 public TopicPartitionOffsetError(TopicPartitionOffset tpo, Error error)
     : this(tpo.Topic, tpo.Partition, tpo.Offset, error)
 {
 }
コード例 #30
0
 public Producer(string topicName, int partition, string boostrapServers)
 {
     this._boostrapServers      = boostrapServers;
     this._topicPartitionOffset = new TopicPartitionOffset(topicName, new Partition(partition), new Offset(0));
 }