常见问题

Flume 采集数据会丢失吗

根据 Flume 的架构原理,Flume 是不可能丢失数据的,其内部有完善的事务机制,Source 到 Channel 是事务性的,Channel 到 Sink 是事务性的,因此这两个环节不会出现数据的丢失,唯一可能丢失数据的情况是 Channel 采用 memoryChannel,agent 宕机导致数据丢失,或者 Channel 存储数据已满,导致 Source 不再写入,未写入的数据丢失。Flume 不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由 Sink 发出,但是没有接收到响应,Sink 会再次发送数据,此时可能会导致数据的重复。

FileChannel 和 MemoryChannel 区别

MemoryChannel 传输数据速度更快,但因为数据保证在 JVM 的堆内存中,agent 进程挂掉会导致数据丢失,适用于对数据质量要求不高的需求。FileChannel 传输速度相对于 Memory 慢,但数据安全保障高,agent 进程挂掉也可以从失败中恢复数据。

Taildir Source 相比 Exec Source、Spooling Directory Source 的优势

1.7 版本之前,实现实时采集日志的 Source 只有 Exec Source,但此 Source 可能会丢失数据(见官网描述) 大家为了实现实时采集的效果,又保证数据安全,只能每隔半分钟产生一个并移动到 Spooling Directory 监控的目录中,此类做法会在 Web Server 中产生非常多的日志小文件,不利于管理 1.7 版本之后,出现了 Taildir Source,即可以实时采集数据,又保证了数据安全,内部实现了类似断点续传的功能。

Last updated