天天看點

java logstash 如何保證資料不丢失

        用過ruby 版本 的logstash 大家都知道,在input 資料消費進來之後,output資料要是失敗了,就會扔掉,這個對資料要求較高的應用中是很難接受的。

       舉一個列,input kafka,output elasticsearch,在消費kafka資料到記憶體隊列,在output到elasticsearche的時候,elasticsearch不可用,elasticsearc用戶端會重試幾次之後還是失敗就會扔掉,重新消費kafka資料,ruby 版本的logstash 沒有提供配置能保證資料不可丢失。

       java 版本的logstash 在baseoutput基類裡面定義了一個sendfailedmsg <b>這個方法,這個方法就是有開發插件的開發人員自己寫資料重試的邏輯,并且把失敗的資料放在 </b><b>blockingqueue&lt;object&gt; failedmsgqueue這個quene 裡面,java logstash會在消費input quene 資料之前,先消費failedmsgqueue裡面的資料,直到沒有資料才會消費input quene裡的資料,預設這個是關閉的,需要consistency這個字段設定為true。</b>

<b>   并且,java logstash在應用在正常被kill時會監聽input quene 判斷裡面是否還有資料,如果還有會讓裡面的資料消費完成,在停掉應用。</b>