2016-07-26 68 views
2

Wir haben gerade Kafka für unser Projekt verwendet. Wir verwenden kafka_2.11-0.9.0.0. Ich habe ein paar Fragen zu KafkaConsumer.Kafka Verbraucherumfrage und -wiederherstellung

1) Ich habe Kafka Consumer gestartet, bevor ich den Zookeeper und den Kafka-Server gestartet habe, aber mein KafkaConsumer-Client konnte trotzdem eine Verbindung herstellen. Ich habe folgende Zeilen Code

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) Ich habe gelesen, Zookeeper hält Spuren der aktiven Verbraucher durch die Verwendung von poll (long timeout) Methodenaufruf. Wenn ich Long.MAX_VALUE mit timeout in poll() verwende, wird der Tierpfleger den Überblick über meine Kunden behalten. Könnten Sie mir bitte helfen, das Verhalten von KafkaConsumer Poll Call zu verstehen?

Vielen Dank im Voraus.

Antwort

1

1) Wenn Sie zoekeeper und kafka nicht gestartet haben, bevor Sie Ihren Consumer starten, kann er keine Verbindung herstellen, wird aber versuchen, Metadaten von kafka zu lesen. Ich habe die Erfahrung gemacht, dass der KafkaConsumer "Poll" -Ruf solange undefiniert blockiert, bis er in der Lage ist, Metadaten zu verbinden und zu lesen. Mit anderen Worten: Ihr Verbraucher hat sich nicht wirklich verbunden, wartet aber darauf, dass der Kafka-Cluster erscheint.

2) Das Poll Timeout teilt dem Kunden mit, wie lange gewartet werden muss, bis Daten zurückgegeben werden können. Sie müssen sicherstellen, dass nach der Rückkehr zur Umfrage die Umfrage erneut aufgerufen wird, damit der Verbraucher aktiv bleibt. Die für den Abrufaufruf angegebene Zeitüberschreitung bezieht sich nicht auf den Keepalive-Mechanismus des KafkaConsumer (dies wird durch die Eigenschaft der Verbrauchereigenschaften für Ihren Verbraucher gesteuert).

+0

Vielen Dank für Ihre Antwort. Wenn mein Konsument in der Poll-Methode auf Long.MAX_VALUE wartet, wie sendet er einen Herzschlag und wie weiß Kafka Server/Zookeeper, dass mein Konsument noch am Leben ist? – user1874156

+0

der Heartbeat ist da, um sicherzustellen, dass Ihr Anwendungscode am Leben ist. Solange sich der Kontrollfluss in Ihrem Programm innerhalb der Poll-Methode befindet, müssen Sie sich nicht um Herzschläge kümmern. –