0

我确实有一个在 Windows 服务中使用的 .Net 代码,该服务具有初始化消费者对象和使用 Kafka 的过程。

var config = new ProducerConfig
{
    BootstrapServers = "host1:9092,host2:9092,...",
    ClientId = ...,
    ...
};


ConsumerBuilder<byte[], byte[]> c = new ConsumerBuilder<byte[], byte[]>(config ).SetErrorHandler(_Consumer_OnError);

consumer = c.Build();

consumer.Subscribe(topics);

while (!canceled)
{
      var consumeResult = consumer.Consume(cancellationToken);
      //handle consumed message.
      ...
}

我想知道从分区中消耗完所有消息后会发生什么。仅供参考:有 3 个分区和 4 个节点用于消费信息。

4

1 回答 1

0

confluent-kafka-dotnetConsumeResult<T1, T2> Consume(CancellationToken ct)方法将:

轮询新消息/事件。阻塞直到消费结果可用或操作被取消。

这意味着调用Consume()将永远不会真正停止尝试使用分区中的消息(除非发生崩溃或您取消操作)。因此,如果您在分区中有两个事件,则第三次调用Consume()将阻塞,直到将新消息写入分区。

在该Consume方法的内部,Kafka 客户端不断调用代理以检查是否有新事件写入分区。

于 2021-01-23T14:57:56.570 回答