flume-ng-extends-source
flume-ng-extends-source copied to clipboard
日志接收端sink如何知道前一天的日志已经接受完毕了?
如果需要依赖前一天的数据做计算,那如何知道前一天的数据已经接受完毕了?
- 因为是实时数据收集,当判断系统时间已经到了
2015-06-20 00:00:00
时,基本确定2015-06-19
的数据已经收集差不多了,但不一定收集完2015-06-19
日的数据,因为系统还是有延迟的;因此,通过外部系统时间,判断前一天
的数据是否收集完毕,行不通; - 判断
前一天
的数据,是否收集完毕,可以在数据上打上时间戳
,因为同一个节点,断点续传等特性,当判断有当前
时间戳的数据到达时,即可进行断定这个节点上,前一天
数据收集完毕。
其实,你可以把你完整的场景再描述的更细节一些,可以讨论一下,是否有更好的解决方案。
恩,比如现在有一个需求,需要利用服务器的日志统计一个网站一天的UV、PV等数据,每天都计算前一整天的数据。如果用flume拉取日志,需要等到前一天的日志全部拉取完毕了,才能开始接下来的计算,那这时候就有一个问题,怎么样才能知道前一天的日志已经全部拉取完毕了,我觉得用“当前”event的时间戳来判断不是很保险,因为是不是可能今天已经有event传过来了,昨天的event还没有全部传输成功的情况。
使用flume之前我们是让日志做小时级分割,然后etl工具判断每小时所有的event是否已经在接受端都接收完毕了,来判断的。