我们刚开始在项目中使用Kafka。我们正在使用kafka_2.11-0.9.0.0。我有一些与KafkaConsumer有关的疑问。
1)我在启动Zookeeper和Kafka服务器之前启动了Kafka Consumer,但我的KafkaConsumer客户端仍能连接。我有以下代码行
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)
}
}
2)我读过,Zookeeper通过使用poll(长超时)方法调用来保持活动Consumer的跟踪。如果我使用Long.MAX_VALUE在poll()中有超时,zookeeper将如何跟踪我的消费者。能否帮助我理解KafkaConsumer民意调查的行为。
提前致谢。
答案 0 :(得分:1)
1)如果你在启动你的消费者之前没有启动zookeeper和kafka它无法连接但会尝试从kafka读取元数据。我的经验是,KafkaConsumer'民意调查'调用将无法阻止,直到它能够连接和读取元数据。换句话说......你的消费者并没有实际连接,而是在等待kafka集群出现。
2)轮询超时告诉消费者等待多长时间才能返回任何数据。你必须确保在轮询返回后你很快再次调用民意调查,让你的消费者保持活跃状态。轮询调用的超时时间与KafkaConsumer的keepalive机制无关(这由您的消费者的使用者属性的 session.timeout.ms 属性控制) )。