我正在使用confluent.kafka dotnet Nuget软件包
Nuget版本1.2.1
操作系统:Windows 10
消费者配置:
EnableAutoCommit = false
SessionTimeoutMs = 60000
EnablePartitionEof = true
AutoOffsetReset = AutoOffsetReset.Earliest
ReconnectBackoffMs = 0
当代理关闭时,我正在尝试解决此问题,消费者无法提交消息并从头到尾运行。 然后经纪人复活了,Consumer没有收到未成功提交给Broker的旧消息,只是继续监听,什么也没有发生。
只有当我向代理发送新消息时,消费者才开始再次使用旧消息和新消息。
确保消费者正在处理消息。
关闭经纪人。
看到使用者仍在处理并提交失败的消息。
等待消费者完成工作。
启动代理。
请等待,确认消费者没有收到未提交的旧消息。
using (var consumer = new ConsumerBuilder<Ignore, string>(config).Build())
{
consumer.Subscribe(txt_topic.Text.Trim());
AppendMessage($"Subscribed to TOPIC {consumer.Subscription[0]} - Waiting for messages");
try
{
while (true)
{
try
{
ConsumeResult<Ignore, string> consumeResult = consumer.Consume(TimeSpan.FromSeconds(5));
if (consumeResult == null)
{
if (!chx_StopSpam.Checked)
AppendMessage(
$"======= No new message from {txt_server.Text.Trim()} ======="
);
continue;
}
if (consumeResult.IsPartitionEOF)
{
AppendMessage(
$"====== Reached end of topic [{consumeResult.Topic}] - PARTITION {consumeResult.Partition} ======"
);
continue;
}
else
{
AppendMessage("========================================");
AppendMessage($"{DateTime.Now.ToString("HH:mm:ss.fff")} Received message at PARTITION {consumeResult.Partition} - OFFSET {consumeResult.Offset}");
AppendMessage($"{DateTime.Now.ToString("HH:mm:ss.fff")} Handling message...");
try
{
Thread.Sleep(int.Parse(txt_handle.Text.Trim()));
consumer.Commit(consumeResult);
AppendMessage($"{DateTime.Now.ToString("HH:mm:ss.fff")} Commited PARTITION {consumeResult.Partition} - OFFSET {consumeResult.Offset}.");
}
catch (KafkaException e)
{
AppendMessage($"{DateTime.Now.ToString("HH:mm:ss.fff")} Commit error: {e.Error.Reason}");
}
}
}
catch (ConsumeException e)
{
AppendMessage($"{DateTime.Now.ToString("HH:mm:ss.fff")} Consume error: {e.Error.Reason}");
}
}
}
catch (OperationCanceledException)
{
AppendMessage($"{DateTime.Now.ToString("HH: mm:ss.fff")} Closing consumer.");
consumer.Close();
}