Flume 1.6 遇Emoji表情发生截断丢失数据问题分析

来源:互联网 发布:淘客cms微信系统 编辑:程序博客网 时间:2024/06/05 14:47

问题描述

最近有一段时间,跑ETL的时候,发现出来的数据明显比之前少,少了大约一半左右,就开始排查。
我们的数据是从Flume采集过来的,排查日志发现,flume在读取到某一条的时候,就不再往下读取了。

问题分析

进一步拿到原始文件后,找到那条数据。用vim打开发现其中有个地方有两个空格。起初以为是乱码(之前flume出过乱码中断的问题),贴到ide里面,得到具体编码为\uD83D\uDD1E\uD83D\uDCAA,发现是四字节的utf-8编码。贴到Google一看,原来是Emoji表情。
跟踪flume源码发现,在spooling directory source中,只支持3个字节以内的utf-8。而遇到这种4字节的utf-8将发生截断,并且会解读为EOF,即结束标志。换句话说,当前文件中,这个表情后面的数据全部不再读取了,也不会发生报错情况。

解决办法

翻了下flume官方的issues,果然有这个问题:“Flume agent fails to parse files with emoji when the source type is spooldir”,地址:https://issues.apache.org/jira/browse/FLUME-2828。但是处于OPEN状态,未解决。
继续翻发现,“ResettableFileInputStream can’t support ucs-4 character”,地址是:https://issues.apache.org/jira/browse/FLUME-2215,这个bug有点关联,仔细看了下,确实能够解决。
新版本flume(1.7)已经修复该问题,考虑到当前flume并没有进行复杂的业务逻辑操作,故直接升级版本。

1 0
原创粉丝点击