【问题标题】:what will happen after the Kafka consumer reads the whole partion?Kafka消费者读取整个分区后会发生什么?
【发布时间】:2021-01-23 22:57:56
【问题描述】:

我确实有一个在 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 个节点用于消费信息。

【问题讨论】:

    标签: .net apache-kafka confluent-kafka-dotnet


    【解决方案1】:

    来自confluent-kafka-dotnetConsumeResult&lt;T1, T2&gt; Consume(CancellationToken ct) 方法将:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-05
      • 2019-03-26
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2018-02-05
      • 2022-06-13
      相关资源
      最近更新 更多