我在做一些基準測試,它由以下數據流:星火流媒體應用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,堆的使用和打開連接,因爲它是自動化的,每個小時在夜間......但感謝提示,我將嘗試重現場景並立即查看這些方面。至少在尋找什麼方面有一個明確的道路是很好的。 謝謝你的幫助! –