Cygnus のバージョンは 0.8.2 で、FI-Ware ラボ内の FI-Ware インスタンスから Cosmos のパブリック インスタンスを使用しています。
IDAS に更新をプッシュする 8 つのセンサー デバイスがあります。1 秒に 1 回の更新もあれば、5 秒に 1 回の更新もあり、平均して 1 秒あたり約 8,35 回更新されます。Orion (バージョン 0.22) へのサブスクリプションを作成して、ONCHANGE 通知を Cygnus に送信しました。
Cygnus は、データを Cosmos、Mongo、および MySQL に保持するように構成されています。1 つのソース (http-source)、3 つのチャネル (hdfs-channel mysql-channel mongo-channel)、および 3 つのシンク (hdfs-sink mysql-sink mongo-sink) の標準構成を使用しました。
mysql-sink と mongo-sink は、ほぼリアルタイムでデータを保持します。ただし、hdfs-sink は非常に遅く、1 秒あたり約 1.65 イベントしかありません。http-source は 1 秒あたり約 8,35 のイベントを受信するため、hdfs-channel はすぐにいっぱいになり、ログ ファイルに警告が表示されます。
time=2015-07-30T13:39:02.168CEST | lvl=WARN | trans=1438256043-345-0000002417 | function=doPost | comp=Cygnus | msg=org.apache.flume.source.http.HTTPSource$FlumeHTTPServlet[203] : 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: hdfs-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
副作用として、http-source が hdfs-channel に通知を注入できない場合、mysql-channel と mongo-channel にも通知が注入されず、その通知が完全に失われます。どこにも永続化されていません。
異なる http ソース ポート、異なる管理インターフェイス ポートを使用して 3 つの個別の Cygnus (Cosmos 用、MySQL 用、MongoDB 用) を起動し、各 Cygnus にサブスクリプションを追加することで、問題を部分的に回避できます。MySQL と MongoDB の永続化は、hdfs チャネルがいっぱいになっても影響を受けませんが、Cosmos の永続化にはまだ問題があります。hdfs-sink を追加すると、8 つのセンサー デバイスで問題が解決する可能性がありますが、センサー デバイスを追加したり、更新を送信したりすると、問題が先送りされるだけです。
これら2つの質問は少し関係ありませんが、とにかく尋ねています...
質問 1: コスモスへの固執がそれほど遅いというのは本当ですか?
ローカル データベースへの永続化と比較して、舞台裏で多くのことが行われていること、およびリソースが制限されている Cosmos のパブリック インスタンスを使用していることはわかっていますが、それでもなおです。リアルタイム データでそのように使用することを意図しているのでしょうか (当社の 8 センサー デバイス テストはかなり控えめです)? もちろん、データをファイルにプッシュするシンクを作成してから、Cosmos に単純なファイルをアップロードすることもできますが、少し手間がかかります。そのようなファイルシンクは利用できないと思いますか?
質問 2: 通知を hdfs チャネル (任意のチャネルだと思います) に挿入できない場合、他のチャネルにも追加されず、完全に破棄されるというのは本当ですか?