2016-06-02 8 views
1

Ich habe die Cygnus Logs am Morgen überprüft und sehe diese Kanalfehler. Es scheint, dass Ckan-Kanal ist voll und kann die Transaktionen nicht fortsetzen.Fiware Cygnus Kanäle sind voll

Was schlagen Sie uns für diesen Fehler vor?

16/06/01 08:11:58 WARN http.HTTPSource: Error appending event to channel. Channel might be full. Consider increasing the channel capacity or make sure the sinks perform faster. 
org.apache.flume.ChannelException: Unable to put batch on required channel: org.apache.flume.channel.MemoryChannel{name: ckan-channel} 
     at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:200) 
     at org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost(HTTPSource.java:201) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:814) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
     at org.mortbay.jetty.Server.handle(Server.java:326) 
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
     at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) 
     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 
     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
     at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) 
     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: org.apache.flume.ChannelException: Space for commit to queue couldn't be acquired Sinks are likely not keeping up with sources, or the buffer size is too tight 
     at org.apache.flume.channel.MemoryChannel$MemoryTransaction.doCommit(MemoryChannel.java:128) 
     at org.apache.flume.channel.BasicTransactionSemantics.commit(BasicTransactionSemantics.java:151) 
     at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:192) 
     ... 16 mor16/06/01 08:11:58 WARN http.HTTPSource: Error appending event to channel. Channel might be full. Consider increasing the channel capacity or make sure the sinks perform faster. 
org.apache.flume.ChannelException: Unable to put batch on required channel: org.apache.flume.channel.MemoryChannel{name: ckan-channel} 
     at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:200) 
     at org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet.doPost(HTTPSource.java:201) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:814) 
     at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
     at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) 
     at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
     at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) 
     at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
     at org.mortbay.jetty.Server.handle(Server.java:326) 
     at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
     at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) 
     at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) 
     at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
     at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
     at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) 
     at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: org.apache.flume.ChannelException: Space for commit to queue couldn't be acquired Sinks are likely not keeping up with sources, or the buffer size is too tight 
     at org.apache.flume.channel.MemoryChannel$MemoryTransaction.doCommit(MemoryChannel.java:128) 
     at org.apache.flume.channel.BasicTransactionSemantics.commit(BasicTransactionSemantics.java:151) 
     at org.apache.flume.channel.ChannelProcessor.processEventBatch(ChannelProcessor.java:192) 
     ... 16 more 

Auch ich sehe, dass hfds-channel/sink nicht einmal in den Protokollen aktiv ist.

Ist das, weil Ckan-Kanal gibt Fehler, so dass hdfs-Kanal dafür nicht aufgerufen wird?

Antwort

1

Was Sie feststellen, ist ein bekannter Protokollfehler von Flume. Das Protokoll ist selbst beschreibend: Einer der Kanäle, der intern eine Quelle und eine Senke kommuniziert, wird voll.

Der Grund? Die Quelle generiert Ereignisse schneller, als die Senke verarbeiten kann. Es gibt ein paar Dinge, die in diesem Fall getan werden können:

  • Reduzieren Sie die Anzahl der Benachrichtigungen an Cygnus gesendet. Dies scheint offensichtlich, aber Sie können sagen "das sind meine Daten und ich will sie alle bestehen". Nun, wir reden über die Reduzierung der Anzahl der Benachrichtigungen, nicht die Menge der Daten. Anstatt beispielsweise eine Benachrichtigung für jedes Attribut zu senden, das sich über eine bestimmte Entität geändert hat, senden Sie alle Attribute in derselben Benachrichtigung. Dies kann erreicht werden, indem Sie die Art ändern, wie Sie Cygnus bei Orion abonnieren. Der Grund für die Reduzierung der Anzahl der Benachrichtigungen besteht darin, dass die Kanalkapazität anhand von Flume-Ereignissen gemessen wird (in der Regel gibt es ein Flume-Ereignis pro Benachrichtigung), nicht in Bytes. Mit größeren Benachrichtigungen können Sie also dieselben Daten beibehalten, jedoch weniger Kapazität des Kanals verbrauchen.
  • Erhöhung der Kapazität des Kanals. Dies ist nur nützlich, wenn der Benachrichtigungsdurchsatz nicht regulär ist. Wenn es regulär ist, wird dies das Problem nur verzögern.
  • Verwendung der Stapelverarbeitung. Dies wird in allen Senken, die diese Funktion unterstützen, weitestgehend erklärt (übrigens die meisten). Schauen Sie sich zum Beispiel die Erklärung zur HDFS-Senke an, aber die Schlussfolgerungen sind für alle Senken gleich.
  • Verwenden der Parallelisierung. Versuchen Sie statt einer einzelnen Senke mehrere parallel laufende Senken hinzuzufügen. Dies wird erreicht, indem alle diese Senken mit demselben Kanal verbunden werden, aber IMHO ist es am besten, einen Kanal für jede Senke zu haben und unseren eigenen RoundRobinChannelSelector zu verwenden. Dies ist eine sehr fortschrittliche Funktion, also frag mich, ob die vorherigen für dich nicht funktionieren.

Sie können einen Blick auf die Performance section werfen.

Verwandte Themen