2017-12-19 1 views
0

Ich habe eine Klasse, die eine RichFlatmapFunction in meinem Flink-Stream-Job erweitert. Ich erstelle eine Jedis Instanz in der open() Methode und schließe sie (jedis.close()) in der close() Methode, so dass alle Datensätze, die die Transformation durchlaufen, die gleiche Jedis Instanz verwenden. Dieser Ansatz hat mir vorher keine Verbindungsfehler gegeben. Aber in einem letzten Job läuft, habe ich den Fehler,Redis Verbindung zurückgesetzt in Flink

"redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketException: Anschluss Reset".

Könnte das sein, weil ich die gleiche Jedis-Instanz (die offen bleibt) für alle Datensätze verwenden? Ich habe kein Zeitlimit beim Erstellen der Instanz festgelegt. Das Timeout ist also auch der Standardwert.

Kann ich diesen Fehler vermeiden, wenn ich JedisPool verwende, um Jedis-Instanzen für jeden Datensatz abzurufen und zu schließen?

+0

Bitte upvote die Antwort, wenn es hilft –

Antwort

1

Anschluss Reset geschieht, wo es eine Störung zwischen Server und Client-Verbindung auf Netzwerkebene, dh jedes Netzwerk verloren, Firewall oder Absturz der Anwendung oder beabsichtigt schließen

gibt auch eine Möglichkeit vorgesehen Nähe wegen der Leerlaufzeit .

Kommen wir nun zur Verwendung von JedisPool, Die Verwendung von Verbindungspools ist die beste Methode in Multithread-Umgebungen, da die Wiederverwendung von Verbindungen effizient ist. Also versuchen Sie bitte, sie mit der richtigen Konfiguration zu verwenden

+0

"Standardmäßig schließen aktuelle Versionen von Redis die Verbindung mit dem Client nicht, wenn der Client für viele Sekunden im Leerlauf ist: die Verbindung bleibt geöffnet für immer". Dies wird in der Dokumentation von Redis erwähnt und wir verwenden eine aktuelle Version von Redis. Wir haben auch in der Konfiguration kein 'Idle Timeout' eingestellt. Dieses Problem könnte also auf "Unterbrechungen zwischen Server- und Client-Verbindungen auf Netzwerkebene, d. H. Netzwerkausfall, Firewall oder Anwendungsabsturz" zurückzuführen sein. – avidlearner

+0

@avidlearner ja es muss der Fall sein für TCP RST-Eingang ausgelöst werden –

+0

@avidlearner: Markieren Sie die Antwort richtig, wenn es hilft –

Verwandte Themen