卡夫卡 - 消耗到空

时间:2017-11-07 09:50:16

标签: apache-kafka kafka-consumer-api

我有一个用例,在获取KafkaConsumer中的所有消费者记录之前,最重要的是不要继续。在这个用例中,没有任何东西进入管道。有什么方法可以确保绝对没有任何东西可以拿去?

2 个答案:

答案 0 :(得分:1)

Kafka旨在处理无限数据流,因此“全部消费”仅表示没有人在一段时间(1分钟),1小时等内发送任何数据 - 这取决于您。

您可以使用类似(伪代码)的内容:

int emptyCount = 0;
while (true) {
   records = Consumer.poll(500);
   if (records.empty()) {
      emptyCount++;
      if (emptyCount >= 100) {
         break;
      }
      continue;
   }
   emptyCount = 0;
   ...process records...
}

你可以在民意调查中调整超时达到必要等待期的空循环次数。

答案 1 :(得分:0)

如果您使用的是kafka-console-consumer,则可以指定timeout-ms参数来定义等待多长时间才会被认为不再有消息传来。

--timeout-ms <Integer: timeout_ms>      If specified, exit if no message is    
                                          available for consumption for the    
                                          specified interval.