实时/准实时方案可以使用以下四种方式实现:
- flume+kafka+spark准实时写入ES
- logging + CMRESHandler实时写入ES
- 利用python中的Elasticsearch库实时写入ES
- pyinotify后台监控文件变化写入ES
定时写入方案则有:
- 超时重试及定时批量写入ES
接下来我将比较这几个方案的区别,及实现定时写入ES方案。
flume+kafka+spark实时写入ES
此方案流程为:通过flume采集日志,上送到kafka,接着spark程序订阅Topic并消费日志,然后写入ES。因为消息存在一定的滞后,所以叫准实时。对于数据量超大的场景,或同时需要利用spark做日志分析场景,一般采用此方案,目前公司使用的就是这样一套系统,但存在很多问题。目前随着集群上应用越来越多,资源可能不够用,导致程序偶尔会挂掉,另外kafka数据消息偶尔延时以及丢失问题,最终决定弃用本方案(项目对日志有精确要求,日志语料需要导出标注)
logging + CMRESHandler实时写入ES
另一种实时写入方案是:利用logging配合es写入模块做实时写入操作
环境安装:
pip install CMRESHandler