在 kafka 中手动提交偏移量

时间:2021-05-17 23:10:28

标签: c# apache-kafka confluent-kafka-dotnet

我有一个带有相应分区的偏移量列表,我需要手动提交它们。 为此,我遍历列表并将分区分配给消费者,然后寻找特定的偏移量。 然后我正在使用消息并将 ConsumerBulider 传递给 commit 方法。 有时它执行得很顺利,但有时它会抛出“Local:Waiting for Coordinator”异常。 但是在这两种情况下,当我之后尝试使用消息时,我会重新使用我已经提交的相同系列的消息,或者我应该说我尝试提交。这意味着我永远无法真正提交它们:(

`

foreach (var item in cmdparamslist)
{
            Partition p = new Partition(Int16.Parse(item.PartitionID));
            TopicPartition tp = new 
TopicPartition(configuration.GetSection("KafkaSettings").GetSection("Topic").Value, p);
            Offset o = new Offset(long.Parse(item.Offset));
            TopicPartitionOffset tpo = new TopicPartitionOffset(tp, o);
            try
            {
                KafkaConsumer.Assign(tpo);
                await Task.Delay(TimeSpan.FromSeconds(1));
                KafkaConsumer.Seek(tpo);
                var cr = KafkaConsumer.Consume(cts.Token);
                try
                {
                    KafkaConsumer.Commit(cr);
                }
                catch (TopicPartitionOffsetException e1)
                {
                    Console.WriteLine("exception " + e);
                }
                catch (KafkaException e)
                {
                    Console.WriteLine("exception " + e);
                }
            }
            catch (KafkaException e)
            {
                Console.WriteLine("exception " + e);
            }
        }
        KafkaConsumer.Close();
    }
catch(Exception e)
{
    Console.WriteLine("exception "+e);
}
}

消费者/客户配置:

    var conf = new ConsumerConfig
    {
        GroupId = Guid.NewGuid().ToString(),
        BootstrapServers = configuration.GetSection("KafkaSettings").GetSection("RemoteServers").Value,
        AutoOffsetReset = AutoOffsetReset.Earliest,
        SaslMechanism = SaslMechanism.Gssapi,
        SecurityProtocol = SecurityProtocol.SaslPlaintext,
        EnableAutoCommit = false
        //EnableAutoOffsetStore = false
    };`

我使用的是 Confluent.Kafka 1.6.2 版本和 .net5

有人可以帮我吗?

0 个答案:

没有答案