維運菜鳥,最近在做公司日誌進行簡單處理之後,按一定數量加入一個list,然後使用ES的接口將數據批量添加到另外一台ElasticSearch上,再通過一些方式進行展示。這裡遇到一個問題,如果資料插入時,發生異常。例如要插入的es主機崩潰等,但是資料來源沒有問題。這樣就應該把已經處理完的資料移到快取中,然後停止程式。 (資料來源是kafka,即便停止了程序,重新啟動後仍可以消費之前沒有消費的)
那麼想問一下,對於比較輕量的python程序或者腳本,應該使用怎樣的方式存儲這些異常狀況發生時要先儲存下來的資料呢?
阿神2017-05-19 10:09:54
可以在es異常時, py腳本捕獲到異常後, 使用cPickle
或者pickle
将处理好的数据序列化后保存到一个文件上(你可以理解成写入一个文件, 不同在于cPickle
和pickle
能夠將字典或者列表這樣的對象直接寫入文件), 然後等你es恢復了, 重新啟動該py腳本, 那麼該腳本優先去檢測是否存在這個臨時檔案, 如果有, 並非空, 則把裡面的資料取出, 寫入es