2016-10-17 27 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跟不上(?),那将会很奇怪。队列大小不应该是一个问题(尽管我们现在已经提出了这些问题) - 因为我们应该能够以它们到达“有限”情况的速度处理它们? –