flume的memeryChannel中transactionCapacity和sink的batchsize注意點

最近在做flume的實時日誌收集,記錄一下memeryChannel的transactionCapacity參數採的坑,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.MemoryChannelMemoryTransaction.doTake(MemoryChannel.java:96)atorg.apache.flume.channel.BasicTransactionSemantics.take(BasicTransactionSemantics.java:113)atorg.apache.flume.channel.BasicChannelSemantics.take(BasicChannelSemantics.java:95)atorg.apache.flume.sink.AbstractRpcSink.process(AbstractRpcSink.java:354)atorg.apache.flume.sink.DefaultSinkProcessor.process(DefaultSinkProcessor.java:68)atorg.apache.flume.SinkRunnerMemoryTransaction.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.SinkRunnerPollingRunner.run(SinkRunner.java:147)
at java.lang.Thread.run(Thread.java:745)
注意點:sink的batchsize參數 不能大於transactionCapacity的參數;這個sink的batchsize是什麼意思呢,就是sink會一次從channel中取多少個event去發送,而這個發送是要最終以事務的形式去發送的,因此這個batchsize的event會傳送到一個事務的緩存隊列中(takeList),這是一個雙向隊列,這個隊列可以在事務失敗時進行回滾(也就是把取出來的數據吐memeryChannel的queue中),它的初始大小就是transactionCapacity定義的大小;在sink中,channel的transactionCapacity參數不能小於sink的batchsize。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章