我在做一些基准测试,它由以下数据流:星火流媒体应用stucks而写,从卡桑德拉阅读/同时
卡夫卡 - >星火流 - >卡桑德拉 - > Prestodb
基础设施:我的火花流应用程序运行在4个执行器上(每个内核2个内核4g)。每个执行器都运行在安装了Cassandra的datanode上。 4 PrestoDB工作人员也位于数据节点中。我的集群有5个节点,每个节点都有一个Intel Core i5,32GB DDR3 RAM,500GB SSD和1Gigabit网络。
Spark流应用程序:我的Spark流式批处理间隔为10s,我的kafka制作者每3秒产生5000个事件。我的流媒体应用程序写入2 Cassandra表。
上下文中的一切工作正常:一切正常运行,流应用程序能够处理事件并将它们存储在Cassandra中。批处理间隔是足够的,摄取率,调度和处理延迟在很长一段时间内几乎保持不变。
上下文中的事情变得混乱和混乱:在我的基准测试中,每小时我对Cassandra表执行6次查询。对于运行这些查询的时间,Spark写入Cassandra时,Spark流应用程序不再能够支持写入吞吐量并挂起。
我到目前为止所做的工作:我在其他web帖子(包括stackoverflow)中搜索了这个现象,但是我找不到类似的现象。我见过的最好的办法是增加可用于Cassandra的内存量。其他方面与连接器的读取大小有关,但我不知道这是否是一个问题,因为它只发生在同时读取和写入时。
问题:Cassandra不应该在读取时锁定写入,对吗?你们认为我需要解决的问题的来源(或来源)是什么?我应该考虑哪些配置?
我附加了一个打印a print,说明如前所述,当我使用6个查询运行基准测试时,写入Cassandra表之一的阶段卡住的作业停滞不前。如果您需要更多信息来追踪问题,请随时询问。我很感激!
非常感谢您对我们的支持,
希望我把这个问题以适当的方式,
最好的问候,
卡洛斯
什么堆大小分配给火花执行人和卡桑德拉
最好的问候,
卡洛斯·科斯塔?在查询过程中,您看到GC的堆或使用堆的利用率有所增加吗?还要检查对Cassandra开放的连接数(用于摄取以及查询)? –
每个Spark执行程序都有4GB的内存。我认为他们有足够的内存来处理这种工作负载,至少在我写这篇文章时似乎绰绰有余。没有错误,没有卡住的工作,没有什么。问题是当prestoDB查询开始在Cassandra表上运行时。当prestoDB工作负载完成后,尽管有几个“暂停”作业,Spark仍能够恢复所有批处理,并且再次正常开始写入Cassandra ... –
... Cassandra堆大小为4GB,HEAP_NEWSIZE为400M。你认为我应该根据自己的工作负载将它碰撞吗? 在基准测试期间,我没有检查GC,堆的使用和打开连接,因为它是自动化的,每个小时在夜间......但感谢提示,我将尝试重现场景并立即查看这些方面。至少在寻找什么方面有一个明确的道路是很好的。 谢谢你的帮助! –