我们设置了一个WSO2 DAS 3.1.0,它从我们的API Manager 1.10.0设置中接收事件。
我们从API Manager Gateway节点接收事件,我们在流中分析它们,最后将结果输出到RDBMS。
当对此设置进行压力测试时,由于没有明显的原因,几个小时后,DAS服务器停止发布到RDBMS(直到此时才能正常工作)。似乎DAS服务器仍在工作;但与此同时,网关节点开始抱怨(在某些情况下):
[PassThroughMessageProcessor-212] ERROR AsyncDataPublisher Event queue is full, and Event is not added to the queue to publish
重新启动DAS服务器让它再次运行,但它远非可靠的设置。
一些事情:
我们应该为DAS寻找特定的性能设置吗?我们目前使用2GB的Java堆内存运行它,并且检查JVM-metrics日志并不表示DAS正在使用所有资源(大约80%的CPU和大约1.5GB的内存)。
要了解DAS突然停止处理事件的原因还有其他方面吗? (并且不会发布任何记录失败的原因)。
当我们重新启动DAS时,网关节点似乎不再开始传输事件。是否有某些东西可以检测到它无法再发送事件使其在发送事件时“关闭”?我们有什么办法可以覆盖它,让它们在可能的情况下再次开始发送事件?
为什么在DAS中根本没有错误日志呢?我假设DAS会记录某种警告,如果它不能足够快地处理事件,或者它的队列是否开始填满等等?
(我们尝试将WSO2_ANALYTICS_EVENT_STORE_DB从H2更改为MS SQL,但行为相同,几小时后事件未发布。)
答案 0 :(得分:1)
当AyncPublisher的队列已完全用完且无法在添加速率事件时将事件发布到DAS时,会发生此错误。您可以在这里做的第一件事是增加Gateway节点中的事件队列缓冲区大小。可以通过配置" asyncDataPublisherBufferedEventSize"来完成。 APIM_HOME / repository / conf / data-bridge / thrift-agent-config.xml中的参数。您可以按如下方式增加值。
<asyncDataPublisherBufferedEventSize>100000</asyncDataPublisherBufferedEventSize>
让我再解释下面发生的事情。基本上,当DAS接收事件时,事件记录将插入到DB中(作为批处理)。因此DAS接收器TPS取决于下划线数据存储。使用RDBMS记录存储,DAS接收器TPS的测量值约为6000-7000(也取决于事件大小)。因此,当我们以更高的速率向DAS发布事件时,DAS接收方队列将被填满,最终发布方队列也将被填满并开始丢弃事件而不添加发布。
因此,如上所述增加队列大小可能会解决您的问题但是TPS非常高仍然可能还不够。如果要在部署中实现更高的接收器TPS,建议使用HBASE作为事件记录存储而不是RDBMS。
[1] https://docs.wso2.com/pages/viewpage.action?pageId=50505742