2016-10-17 25 views
1

我們已經設置了WSO2 DAS 3.1.0,它從我們的API Manager 1.10.0安裝程序接收事件。WSO2 DAS和APIM網關節點停止發佈事件

我們從API管理器網關節點接收事件,我們在流中分析它們,並最終將結果輸出到RDBMS。

當對這個設置進行壓力測試時,由於沒有明顯原因,幾個小時後,DAS服務器停止發佈到RDBMS(在此之前工作得很好)。它仍然看起來像DAS服務器仍在工作;但在同一時間,網關節點開始抱怨(在某些情況下):

[PassThroughMessageProcessor-212] ERROR AsyncDataPublisher Event queue is full, and Event is not added to the queue to publish 

重新啓動DAS服務器被再次工作,但它從一個可靠的設置遠遠。

有幾件事情:

  1. 。我們還需要尋找到對DAS特定的性能設置?我們目前使用2GB的Java堆內存運行它,並且檢查JVM-metrics日誌並不表示DAS正在使用所有資源(大約80%的CPU和大約1.5GB的內存)。

  2. 任何其他需要了解DAS爲何突然停止處理事件的區域? (並且不會發布任何日誌,爲什麼它會失敗)。

  3. 當我們重新啓動DAS時,網關節點似乎沒有再次開始傳輸事件。是否有可能檢測到它不能再發送事件,使它們在發送事件時「關閉」?有什麼辦法可以覆蓋這個,讓他們在可能的時候再次開始發送活動?

  4. 爲什麼在DAS中沒有錯誤日誌?我認爲如果DAS不能足夠快地處理事件,或者它的隊列開始填滿等,DAS會記錄某種警告。

(我們試圖改變從H2的WSO2_ANALYTICS_EVENT_STORE_DB到MS SQL,但相同的行爲,與事件不是在幾個小時後公佈)。

回答

1

當AyncPublisher的隊列已完全用完並且無法將事件發佈到DAS時,會在添加速率事件時發生此錯誤。您可以在這裏做的第一件事是增加網關節點中的事件隊列緩衝區大小。可以通過在APIM_HOME/repository/conf/data-bridge/thrift-agent-config.xml中配置「asyncDataPublisherBufferedEventSize」參數來完成。您可以按如下方式增加值。

<asyncDataPublisherBufferedEventSize>100000</asyncDataPublisherBufferedEventSize> 

讓我稍微解釋一下下面會發生什麼。基本上,當DAS接收事件時,事件記錄被插入數據庫(作爲批次)。因此DAS接收器TPS取決於下劃線數據存儲。使用RDBMS唱片商店,DAS接收器TPS的測量範圍爲6000-7000(這也取決於事件大小)。因此,當我們以較高的速度向DAS發佈活動時,DAS接收方隊列將被填滿,並且最終發行商方隊列也將被填滿並開始丟棄事件而不添加發布。

因此,如上所述增加隊列大小可能會解決您的問題,但TPS很高仍然可能不夠。如果您希望在部署中實現更高的接收器TPS,則建議使用HBASE而不是RDBMS作爲事件記錄存儲。

[1] https://docs.wso2.com/pages/viewpage.action?pageId=50505742

+0

謝謝您的信息。在我們的例子中,我們的測試每秒發送大約50-100個事件,所以如果DAS跟不上(?),那將會很奇怪。隊列大小不應該是一個問題(儘管我們現在已經提出了這些問題) - 因爲我們應該能夠以它們到達「有限」情況的速度處理它們? –