2016-07-13 14 views
0

Ich versuche, eine Nachricht von einem Produzenten zu einem Kafka-Knoten in einem anderen DC zu senden. Sowohl der Producer als auch der Consumer sind mit der Standardkonfiguration 0.10.0.0 konfiguriert und die Nachrichtengrößen sind nicht so klein (etwa 500k). Die meiste Zeit beim Senden von Nachrichten ich mit diesen Ausnahmen begegnet bin:Apache Kafka: TimeoutException und dann nichts funktioniert

org.apache.kafka.common.errors.TimeoutException: Batch mit 1 Eintragung (en) aufgrund Timeout abgelaufen, während Metadaten von Brokern anfordernden für topic-0 org.apache.kafka.common.errors.TimeoutException: Speicher konnte nicht innerhalb der konfigurierten maximalen Blockierungszeit von 60000 ms zugewiesen werden.

Und danach werden keine Nachrichten mehr übertragen (auch der Rückruf für die restlichen Nachrichten wird nicht aufgerufen).

+0

Sie sollten die server.properties überprüfen, ob Sie konfiguriert haben: Listeners = PLAINTEXT: //Ihr.Host.Name: 9092 richtig oder nicht. – NangSaigon

+0

Es ist korrekt und der Port ist offen – AmirHossein

Antwort

1

Set batch.size = 0, das Problem wird behoben.

+0

Vielen Dank für die Antwort. Aber warum passiert es? – AmirHossein

+1

Gemäß der Kafka-Dokumentation "Eine kleine Batchgröße macht die Batchverarbeitung weniger häufig und kann den Durchsatz reduzieren ** (eine Batchgröße von Null deaktiviert die Batchverarbeitung vollständig) **. Eine sehr große Batchgröße kann den Speicher ein wenig verschwenderischer nutzen als wir in Erwartung weiterer Datensätze immer einen Puffer der angegebenen Batchgröße zuweisen. " – Aby

+0

Warum führt die Dosierung zu diesem Problem? – AmirHossein

2

Ich wollte nur in, weil ich genau die gleichen Fehler heute erhalten habe. Ich habe versucht, die request.timeout.ms zu erhöhen, batch.size zu verringern und sogar die batch.size auf Null zu setzen. Nichts hat jedoch funktioniert.

Es stellte sich heraus, dass der Server keine Verbindung zu einem der 10 Kafka Clusterknoten herstellen konnte. Was ich sah, waren einige unpassende Ausnahmen. Übrigens verwenden wir Kafka 0.9.0.1, wenn es darauf ankommt.