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

问题描述

最近有一段时间,跑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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值