2016-07-31 8 views
0

Ich verwende C++ kafka Implementierung von C++ rdkafka. Die Frage ist über RdKafka :: KafkaConsumer. Wie kann ich den Verbraucher so einstellen, dass er am Anfang eines Themas beginnt?C++ - kafka-client (rdkafka)

P.S. Der Verbraucher Beispiel in der Verbindung basiert auf RdKafka :: Verbraucher, die durch gekennzeichnet ist „nur Vermächtnis, verwenden KafkaConsumer statt“

dank voraus

+1

Haben Sie versucht "conf-> set (" auto.offset.reset "," smallest ", errstr)" oder "conf-> set (" auto.offset.reset "," early ", errstr)" (für neuere Kafka-Versionen) –

+0

Ja. Aber es hat nicht geholfen. Wenn ich meinen Consumer neu starte, erwarte ich, alle Nachrichten von Anfang an zu lesen (selbst diejenigen, die ich vor dem Absturz der vorherigen Consumer-Anwendung festgeschrieben habe) –

+0

hast du dein Problem gelöst? wenn ja wie? –

Antwort

1

Das ist nicht wie „auto.offset.reset“ funktioniert. "auto.offset.reset" ist nur gültig, wenn kein gültiger Commit-Offset vorliegt. Der Fluss ist wie:

  1. Start Verbraucher (Neustart oder nach dem Absturz)
  2. Look für den Offset
    • wenn gefunden, Wiederaufnahme aus dem Offset
    • wenn nicht gesetzt nach auto.offset gefunden, Offset- .Reset.

Wenn Sie das ganze Thema auf jedem Neustart lesen möchten, gibt es eigentlich keinen Grund, Versetzungen überhaupt zu begehen. Der Zweck von Offsets ist es, zu wissen, wo Sie geblieben sind, weil Sie nach dem Neustart von diesem Offset fortsetzen möchten.

+0

OK, danke. Was ist die beste Vorgehensweise, um den späten Beitritt eines Kunden zu implementieren? (Ich habe zum Beispiel eine Konfigurationsnachricht erstellt und dann sollten viele Verbraucher sie zu ihrer eigenen Zeit und Planung lesen). Ich nehme an, dass Commit nicht funktionieren wird, tatsächlich nahm ich auch an, dass die Erstellung jedes Consumers mit group.id = GUID dasselbe Verhalten ergibt es tat es nicht. –

+0

Ich verstehe nicht genau. Was willst du genau machen? Scheint eine neue Frage zu sein. Um SO sauber zu halten, möchten Sie vielleicht eine neue Frage starten. –

+0

@ MatthiasJ.Sax Ich habe auch dieses Verhalten. Ich benutze auto.offset.reset = false und eine neue zufällig generierte group.id ohne Consumer-Committing half immer noch nicht. Der Verbraucher liest immer die spätesten Nachrichten. – user1116377