2013-07-31 11 views
5

Ich bin neu bei Kafka, was ich bisher hinsichtlich des Verbrauchers verstanden habe, gibt es im Grunde zwei Arten der Implementierung.
1) The High level consumer/consumer group
2) Simple ConsumerApache Kafka Consumer-Gruppe und einfache Verbraucher

Der wichtigste Teil über die hohe Abstraktion ist es verwendet, wenn Kafka nicht über den Umgang mit der Offset schert, während der einfache Verbraucher viel bessere Kontrolle über die Offset-Management. Was mich verwirren ist, was ich tun möchte, wenn ich Consumer in einer Multithread-Umgebung betreiben will und auch Kontrolle über den Offset haben will. Wenn ich Consumer Group verwende, heißt das, dass ich vom letzten im Zoo-Keeper gespeicherten Offset lesen muss? Ist das die einzige Option, die ich habe?

Antwort

6

Die High-Level Consumer-API lässt Sie den Offset in den meisten Fällen nicht direkt steuern.

Wenn die Verbrauchergruppe zum ersten Mal erstellt wird, können Sie ihr mitteilen, ob sie mit der ältesten oder neuesten Nachricht, die kafka gespeichert hat, unter Verwendung der auto.offset.reset-Eigenschaft beginnen.

Sie können auch steuern, wenn die High-Level-Verbraucher neue Offsets durch Zookeeper verpflichtet auto.commit.enable auf false setzen.

Da der High-Level-Verbraucher die Offsets in zookeeper speichert, kann Ihre App direkt auf zoekeeper zugreifen und die Offsets manipulieren - aber das wäre außerhalb der High-Level-Consumer-API.

Ihre Frage war ein wenig verwirrend, aber Sie können den einfachen Verbraucher in einer Multithread-Umgebung verwenden. Das macht der High-Level-Konsument.

0

In Apache Kafka 0.9 und 0.10 wird das Consumer Group Management vollständig innerhalb der Kafka-Anwendung von einem Broker (zur Koordination) und einem Thema (für State Storage) abgewickelt.

Wenn eine Verbrauchergruppe die Einstellung von auto.offset.reset bestimmt zu einem Thema ersten abonniert hat, wo die Verbraucher beginnen Nachrichten (http://kafka.apache.org/documentation.html#newconsumerconfigs) kann

Sie ein ConsumerRebalanceListener registrieren verbrauchen einer Benachrichtigung zu erhalten, wenn ein bestimmtes Verbraucherthema/Partitionen zugeordnet ist.

Sobald der Verbraucher ausgeführt wird, können Sie seek, seekToBeginning und seekToEnd verwenden, um Nachrichten von einem bestimmten Offset zu erhalten. seek wirkt sich auf die nächste poll für die Verbraucher und wird auf der nächsten gespeichert begehen (zB commitSync, commitAsync oder wenn die auto.commit.interval abgelaufen ist, falls aktiviert.)

Die Verbraucher javadocs spezifischere Situationen erwähnen: http://kafka.apache.org/0100/javadoc/org/apache/kafka/clients/consumer/KafkaConsumer.html

Sie können die von Kafka bereitgestellte Gruppenverwaltung mit der manuellen Verwaltung von Offsets über seek (..) kombinieren, sobald Partitionen zugewiesen sind.

Verwandte Themen