flume的memeryChannel中transactionCapacity和sink的batchsize需要注意事項

來源:互聯網
上載者:User

標籤:ace   channels   配置   sink   發送   大小   ide   ref   nbsp   

fluem中出現,transactionCapacity查詢一下,得出一下這些:

最近在做flume的即時日誌收集,用flume預設的配置後,發現不是完全即時的,於是看了一下,原來是memeryChannel的transactionCapacity在作怪,因為他預設是100,也就是說收集端的sink會在收集到了100條以後再去提交事務(即發送到下一個目的地),於是我修改了transactionCapacity到10,想看看是不是會更加即時一點,結果發現收集日誌的agent啟動的時候報錯了。

16/04/29 09:36:15 ERROR sink.AbstractRpcSink: Rpc Sink avro-sink: Unable to get event from channel memoryChannel. Exception follows.
org.apache.flume.ChannelException: Take list for MemoryTransaction, capacity 10 full, consider committing more frequently, increasing capacity, or increasing thread count
at org.apache.flume.channel.MemoryChannel$MemoryTransaction.doTake(MemoryChannel.Java:96)
at org.apache.flume.channel.BasicTransactionSemantics.take(BasicTransactionSemantics.java:113)
at org.apache.flume.channel.BasicChannelSemantics.take(BasicChannelSemantics.java:95)
at org.apache.flume.sink.AbstractRpcSink.process(AbstractRpcSink.java:354)
at org.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)
at org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:147)
at java.lang.Thread.run(Thread.java:745)

於是很納悶,為什麼預設值100可以,而設定10就會說小了呢,於是查閱資料,發現原來是sink的batchsize參數在作怪,下面,我就來理一理這個來龍去脈,這個sink的batchsize是什麼意思呢,就是sink會一次從channel中取多少個event去發送,而這個發送是要最終以事務的形式去發送的,因此這個batchsize的event會傳送到一個事務的緩衝隊列中(takeList),這是一個雙向隊列,這個隊列可以在事務失敗時進行復原(也就是把取出來的資料吐memeryChannel的queue中),它的初始大小就是transactionCapacity定義的大小,源碼中有: takeList = new LinkedBlockingDeque<Event>(transCapacity); 源碼來自1190000003586635的分享。

再看這個錯誤拋出的地方:

 if(takeList.remainingCapacity() == 0) {
        throw new ChannelException("Take list for MemoryTransaction, capacity " +
            takeList.size() + " full, consider committing more frequently, " +
            "increasing capacity, or increasing thread count");
    }

在上面的情況中,sink一次取100個events,塞到takelist中,在塞了10個後,就會引發上述異常,因此,這個錯誤的解決辦法就是:在sink中,channel的transactionCapacity參數不能小於sink的batchsize。

flume的memeryChannel中transactionCapacity和sink的batchsize需要注意事項

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.