/// <summary> /// In this example /// - consumer group functionality (i.e. .Subscribe + offset commits) is not used. /// - the consumer is manually assigned to a partition and always starts consumption /// from a specific offset (0). /// </summary> public static void Run_ManualAssign(string brokerList, List <string> topics, CancellationToken cancellationToken) { var config = new ConsumerConfig { // the group.id property must be specified when creating a consumer, even // if you do not intend to use any consumer group functionality. GroupId = new Guid().ToString(), BootstrapServers = brokerList, // partition offsets can be committed to a group even by consumers not // subscribed to the group. in this example, auto commit is disabled // to prevent this from occuring. EnableAutoCommit = true }; using (var consumer = new Consumer <Ignore, string>(config)) { consumer.Assign(topics.Select(topic => new TopicPartitionOffset(topic, 0, Offset.Beginning)).ToList()); consumer.OnError += (_, e) => Console.WriteLine($"Error: {e.Reason}"); consumer.OnPartitionEOF += (_, topicPartitionOffset) => Console.WriteLine($"End of partition: {topicPartitionOffset}"); while (!cancellationToken.IsCancellationRequested) { try { var consumeResult = consumer.Consume(cancellationToken); Console.WriteLine($"Received message at {consumeResult.TopicPartitionOffset}: ${consumeResult.Message}"); } catch (ConsumeException e) { Console.WriteLine($"Consume error: {e.Error}"); } } consumer.Close(); } }