Apache kafka 卡夫卡消费者调查和重新连接

Apache kafka 卡夫卡消费者调查和重新连接,apache-kafka,long-polling,kafka-consumer-api,Apache Kafka,Long Polling,Kafka Consumer Api,我们刚刚开始在我们的项目中使用卡夫卡。我们使用的是卡夫卡2.11-0.9.0.0。我有一些关于卡夫卡消费者的问题 1) 在启动Zookeeper和Kafka服务器之前,我启动了Kafka消费者,但我的Kafka消费者客户端仍然能够连接。我有以下几行代码 Consumer<String, String> consumer = new KafkaConsumer<String,String>(props); consumer.subscribe(getCon

我们刚刚开始在我们的项目中使用卡夫卡。我们使用的是卡夫卡2.11-0.9.0.0。我有一些关于卡夫卡消费者的问题

1) 在启动Zookeeper和Kafka服务器之前,我启动了Kafka消费者,但我的Kafka消费者客户端仍然能够连接。我有以下几行代码

    Consumer<String, String> consumer =  new KafkaConsumer<String,String>(props);
    consumer.subscribe(getConsumerRegisteredTopics());
    while (true) {
        ConsumerRecords<String, String> records = consumer.poll(Long.MAX_VALUE);
        for (ConsumerRecord<String, String> record : records){
           processRecord (record)
        }
   }  
消费者=新卡夫卡消费者(道具);
consumer.subscribe(getConsumerRegisteredTopics());
while(true){
ConsumerRecords记录=consumer.poll(Long.MAX_值);
对于(消费者记录:记录){
processRecord(记录)
}
}  
2) 我读到,Zookeeper通过使用poll(长超时)方法调用来跟踪活动消费者。如果我在poll()中使用Long.MAX_VALUE has timeout,zookeeper将如何跟踪我的消费者。你能帮我理解卡夫卡消费者投票电话的行为吗

提前感谢。

1)如果您在启动消费者之前没有启动zookeeper和kafka,它将无法连接,但将尝试从kafka读取元数据。我的经验是,KafkaConsumer“poll”调用将不确定地阻止,直到它能够连接和读取元数据。换句话说。。。您的消费者并未实际连接,但正在等待卡夫卡群集出现


2) 轮询超时告诉使用者要等待多长时间才能返回任何数据。您必须确保在轮询返回后,您再次调用poll足够快,以便您的消费者保持活动状态。轮询调用的超时与KafkanConsumer的keepalive机制无关(这由消费者属性的session.timeout.ms属性控制)。

感谢您的回复。如果我的消费者在poll方法中等待Long.MAX_值,它将如何发送heartbeat,以及Kafka服务器/Zookeeper如何知道我的消费者仍然处于活动状态。heartbeat在那里,以确保您的应用程序代码处于活动状态。因此,只要程序中的控制流在poll方法中,就不必担心心跳。