我開發了一個用於HDFS數據攝取的NiFi流程原型。現在我想提高整體表現,但似乎我不能真正前進。 Apache NiFi優化問題
流接收輸入的csv文件(每行有80個字段),在行級別拆分它們,對字段應用一些轉換(使用4個自定義處理器按順序執行),將新行緩存到csv文件,將它們輸出到HDFS中。我以這種方式開發了處理器,當讀取每個單獨的記錄並將其字段移至flowfile屬性時,只會訪問一次流文件的內容。測試已在亞馬遜EC2 m4.4xlarge實例(16核CPU,64 GB RAM)上執行。
這是我試過到目前爲止:
- 感動
- 感動在內存中的出處庫(NiFi無法跟上flowfile庫和不同的SSD驅動器的內容庫根據configuration best practices
- 我已經試過爲了總線程 來吸引不同的號碼分配多個線程每個處理器的事件發生率)
- 配置系統
- 我試着增加nifi.queue.swap.threshold和設置背壓從來沒有(與G1GC組合)達到極限交換從8
- 嘗試不同的JVM內存設置到32 GB
- 我已經試過增加實例規範,沒有什麼變化
從我所進行的監測,它看起來像磁盤不是瓶頸(他們基本上空閒時間的很大一部分,顯示出實際上是在正在執行的計算-memory),平均CPU負載低於60%。
我能得到的最多的是215k行/分,這是3,5k行/秒。在數量上,它只有4,7 MB /秒。我瞄準的東西絕對比這更大。 就像比較一樣,我創建了一個讀取文件的流程,將它拆分成行,將它們合併成塊並輸出到磁盤上。這裏我得到12k行/秒,或17 MB/s。看起來並不令人驚訝,我想我可能做錯了什麼。 有沒有人有關於如何改善表演的建議?在集羣上運行NiFi會有多少好處,而不是隨着實例規格的增長而增長?謝謝大家
您的定製處理器可在任何地方進行評估嗎?就你所建立的流程而言,吞吐量在哪裏下降?大概你使用的是GetFile,然後是你的鏈表。 – apiri
是的! https://drive.google.com/drive/folders/0BwYJl5zg1oWSbi1nbG9LQnY2ZWc?usp=sharing我的吞吐量隨着定製處理器而下降。我預計,因爲他們執行比內置操作更復雜的操作。但是,他們仍然只是訪問flowfile屬性並創建新的屬性。分配給他們幾個線程似乎不工作。然而,這篇文章的最後一部分是甚至繞過它們,只是分割行並將它們合併在一起,我得到了12k行/秒。我應該搬到更高的層次並將批次作爲工作單位嗎?感謝您的時間。 – riccamini
平均而言,您正在處理的流程文件的大小是多少?有一件事向我跳出來,就是一個處理器正在緊繃並在堆上施加壓力。你使用的是什麼版本的NiFi?使用m4類實例,我假設這個EBS。它是什麼類的EBS? GP2?預設的iOPS? – apiri