flume 数据不丢失保证:
1、但是根据Flume的架构原理,再采用FileChannel的Flume是不可能丢失数据的,因为其内部有完善的事务机制(ACID)。
Source到Channel是事务性的,
Channel到Sink也是事务性的,
这两个环节都不可能丢失数据。
在采集阶段
flume 采取采用 TAILDIR
偏移量存储在: /var/log/flume-ng/taildir_position.json
防止数据采集的时候数据不丢失
唯一可能丢失数据的是Channel采用MemoryChannel,
(1)在agent宕机时候导致数据在内存中丢失;
(2)Channel存储数据已满,导致Source不再写入数据,造成未写入的数据丢失;
在传到其它端时候
flume支持不同的sink: sink支持ack (ack 可以保证数据不丢失,但无法保证数据重复)
ps: Flume造成数据重复,例如数据已经由Sink发出,但是没有接收到响应,Sink会再次发送数据,导致数据重复
注意:在一些网络资料中有看到当Flume的数据量达到70MB/s以上时,就会出现丢失数据的情况。本人在生产中采用集群方案高可用加FileChannel的方式保证数据不丢失,现在还没出现数据丢失的情况。此种情况还没有验证方案。
具体搭建flume 高可用方案 请参考此博客