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