首先需要了解一下flume的三个组件与logstash三个组件的关系
flume中的三个组件 source channel sink
logstash中的三个组件 input filter output
logstash中的finput相当于flume中的source----从那里读数据
logstash中的filter相当于flume中source端的interceptor------对数据进行过滤
logstash中的output相当于flume中的sink-----将数据落地到哪里
比较
- 1.logstash侧重于数据的预处理,flume侧重于数据的传输
flume数据的产生后封装成event进行传输。传输的时候数据会持久化在channel中,数据只有sink完成后,才会从当前的channel中删除。这个过程是通过事务控制的,这样就保证了数据的可靠性。
但是这里也会产生一个问题:内存如果超过一定的量,也会造成数据丢失;如果使用文件存储,性能会变差。
logstash比较注重于字段的预处理,logstash有几十个插件,配置灵活。相比较而言,flume则是强调用户的自定义开发(source和sink的种类不多,功能也比较单一)
- 2.logstash的input组件,与output组件支持很多方式,比如kafka,es等要比flume的sink端的输出很多
- 3.logstash中filter可以省略,但是logstash侧重于数据的预处理,所以一般不会省略filter