2017-01-27 3 views
0

Ich run kafka_2.11-0.10.1.1 mit confluent-kafka-0.9.2 (Master-Zweig) Python-Bindungen, die librdkafka-0.9.2 verwendet. Meine Maschine läuft ubuntu-16.04 x86_64. Ich lasse zookeeper-3.4.8-1 auf Port 2181 laufen. Ich betreibe konfluenten Produzent Beispiel wie folgt:Erhalten Sie keine Nachricht mit konfluenten Kafka einfachen Produzenten-/Konsumentenbeispielen?

$ cd confluent-kafka-python/examples 
$ python producer.py localhost:9095 confluent-01 
first message 
2nd msg 

und die Verbraucher:

$ python consumer.py localhost:9095 confluentgroup confluent-01 

Alles läuft lokal auf meinem Rechner, die keine Firewall läuft.

Bemerkungen:

  • das Thema erfolgreich auf Zookeeper erstellt
  • der Broker erfolgreich die Produzenten Nachrichten empfängt:
  • die Verbraucher setzt folgende conf {'bootstrap.servers': broker, 'group.id': group, 'session.timeout.ms': 6000, 'default.topic.config': {'auto.offset.reset': 'smallest'}, 'api.version.request': True }
  • am Anfang producer/consumer funktionieren für einige Zeit, bis ich Receive failed: Disconnected auf der Herstellerseite bekomme. Exerpt:

$ python producer.py localhost:9095 confluent-02 
asd 
% Message delivered to confluent-02 [0] 
1234123 
890890 
% Message delivered to confluent-02 [0] 
%3|1485791262.420|FAIL|rdkafka#producer-1| [thrd:obscura.ax.example.com:9095/3]: obscura.ax.example.com:9095/3: Receive failed: Disconnected 

Problem: Ich habe nicht alles auf der Verbraucherseite nach einer Weile

Fragen:

  1. Was mache ich falsch?
  2. Wie kann ich überprüfen, ob die Producer-Nachrichten auf der Brokerseite empfangen wurden? Die Producer-Nachrichten werden ordnungsgemäß auf der Brokerseite empfangen.
  3. Wie kann ich die Verbraucherseite debuggen? Ich habe 'debug': "cgrp, topic, fetch" zum Verbraucher conf hinzugefügt. Wo kann ich die Protokolle lesen?
+0

Können Sie versuchen, localhost mit tatsächlichen 'ip' oder' hostname' der Maschine zu ersetzen, auf der Sie dies ausführen? – Confused

+0

@Gondola_Ride der Broker erhält erfolgreich die Nachricht vom Hersteller (aus dem Protokoll). Mein Problem ist, dass der Verbraucher nichts macht. –

+0

Ich bin verwirrt über die Version, die Sie verwenden? Was ist die Broker-Version und was ist die Client-Version? Clients können keine Verbindung zu einem älteren Broker herstellen - vielleicht ist das das Problem? –

Antwort

0

Ich habe die Dinge schließlich funktionieren. Anfangs lief ich die confluent-kafka tutorial, die:

  • nicht trap ctrl+c SIGINT Signal,
  • schließt nicht aus, eine Zeit während in poll()

im Consumer-Code.Also ich musste ctrl+z dann kill %1 es auf meinem linux machine. Ich glaube, diese Terminierung hat den Socket nicht geschlossen, der für einige Zeit offen blieb (TIME_WAIT). Dann, als ich den Verbraucher neu startete, zog er Müll von der älteren Steckdose und blieb stecken.

Ich habe try: [...] except KeyboardInterrupt: consumer.close() hinzugefügt, um die ctrl+c zu fangen und den Sockel zu schließen. Und das Problem nicht länger angegangen.

Ich hoffe, dass dies jemand in der Zukunft helfen wird.

1

Ich habe zwei Vorschläge:

1) versuchen, die Option --from-beginnend an den Verbraucher Befehl

2) der Standardanschluss für Makler hinzuzufügen ist 9092 so den richtigen Anschluss überprüfen Verwenden Sie

Hoffe das hilft.

+0

1) Beispiele/consumer.py definiert bereits ''auto.offset.reset': 'kleinste'' 2) der Produzent erfolgreich Nachricht gesendet auf localhost: 9093 –

+0

auto. oofset.reset ist die Richtlinie, die Kafka anwendet, wenn keine Offsets festgelegt wurden. Ihr Konsument konsumiert nicht, weil er bereits alle Nachrichten gelesen hat, also sagt die Option --von Anfang an in der Kafka-Shell dem Konsumenten, von Anfang an mit Conusme zu beginnen. Sie können die Verbrauchergruppe ändern, um alle Nachrichten zu lesen. –

Verwandte Themen