Apache kafka 卡夫卡-消费到空

Apache kafka 卡夫卡-消费到空,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我有一个用例,在KafkaConsumer中的所有消费者记录都被提取出来之前,不要继续。在这个用例中,不会有任何东西进入管道。什么是确保绝对没有剩余数据可获取的正确方法?卡夫卡设计用于处理无限的数据流,因此“全部消费”只意味着在一段时间(1分钟)、1小时等内没有人发送任何数据-这取决于您 您可以使用(伪代码): 您可以调整轮询中的超时和空周期数,以达到必要的等待时间。如果您使用的是kafka console consumer,则可以指定timeout ms参数来定义在认为不再有消息到来之前等待的

我有一个用例,在
KafkaConsumer
中的所有消费者记录都被提取出来之前,不要继续。在这个用例中,不会有任何东西进入管道。什么是确保绝对没有剩余数据可获取的正确方法?

卡夫卡设计用于处理无限的数据流,因此“全部消费”只意味着在一段时间(1分钟)、1小时等内没有人发送任何数据-这取决于您

您可以使用(伪代码):


您可以调整轮询中的超时和空周期数,以达到必要的等待时间。

如果您使用的是
kafka console consumer
,则可以指定
timeout ms
参数来定义在认为不再有消息到来之前等待的时间

--timeout-ms <Integer: timeout_ms>      If specified, exit if no message is    
                                          available for consumption for the    
                                          specified interval.  
--如果指定超时毫秒,则在未收到消息时退出
可供在
指定的时间间隔。

您确定这是正确的方法吗?似乎您正在将流媒体解决方案制作成批处理解决方案?这是为了(如果)我们的网关已经完成,而消息尚未发送到Cassandra,那么我们希望使用队列中的消息来查找我们最近发布的修订号。如果您知道没有添加新数据,您可以通过
Consumer#endOffsets
获取日志的末尾,并在
Consumer#position
到达末尾时终止读取。嗯,这可能有效。现在我正在研究seekToBegining/seekToEnd,然后使用position计算两者是否相同,并将其视为流为空,但这在语义上可能不正确,我不知道。执行此操作与使用长超时调用poll之间的语义区别是什么?如上所述,在执行此检查时,Kafka中没有输入任何内容。如果您调用
poll
,超时时间超过heartbeat,则您的消费者将被视为已死亡。请注意,数据将保留在主题中,直到过期-可能会持续几天default@AlexOtt “如果调用poll的超时时间长于heartbeat,则您的消费者将被视为已死亡。”--这仅适用于较旧的卡夫卡版本。比较:
--timeout-ms <Integer: timeout_ms>      If specified, exit if no message is    
                                          available for consumption for the    
                                          specified interval.