Kafka Consumer民意调查和重新连接

时间:2016-07-26 18:10:02

标签: apache-kafka long-polling kafka-consumer-api

我们刚开始在项目中使用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民意调查的行为。

提前致谢。

1 个答案:

答案 0 :(得分:1)

1)如果你在启动你的消费者之前没有启动zookeeper和kafka它无法连接但会尝试从kafka读取元数据。我的经验是,KafkaConsumer'民意调查'调用将无法阻止,直到它能够连接和读取元数据。换句话说......你的消费者并没有实际连接,而是在等待kafka集群出现。

2)轮询超时告诉消费者等待多长时间才能返回任何数据。你必须确保在轮询返回后你很快再次调用民意调查,让你的消费者保持活跃状态​​。轮询调用的超时时间与KafkaConsumer的keepalive机制无关(这由您的消费者的使用者属性的 session.timeout.ms 属性控制) )。