flume sink端是kafka的 数据重复现象如何处理

项目场景:

flume sink端是kafka
用flume做采集,结果数据重复了,有的数据甚至重复了上万次


排查处理

1.查看flume日志

[root@flume-agent ~]cd /var/log/flume-ng
[root@flume-agent flume-ng]tail -40f flume-agent.log

发现以下大量的异常日志:

Caused by: org.apache.flume.ChannelFullException: Space for commit to queue couldn't be acquired. Sinks are likely not keeping up with sources, or the buffer size is too tight

2.报这个错的原因:就是source在拿到数据,往channel里面写的时候,没地方了,中间是个queue,比作池子,流入太快,流出慢,然后,慢慢的,池子就满了,再流就溢出了,这样就引发了flume的事务机制,重试反复发数据。根据报错调整配置:

#a1.channels.c1.capacity=1000
a1.channels.c1.capacity=1000000

3.做以上调整后,发现还是会有一些重复,继续查看日志,仍然有异常:

Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.RecordTooLargeException: The message is 1088783 bytes when serialized which is larger than the maximum request size you have configured with the max.request.size configuration.

4.调整max.request.size

#kafka消息生产的大小限制 
a1.sinks.k1.kafka.producer.max.request.size=51200000

5.客户那边反馈还是会有重复,没办法了直接上才艺了。追加flume重试次数配置调整和kafka生产者幂等性

#kafka生产消息重试次数设置
a1.sinks.k1.kafka.producer.retries=3
a1.sinks.k1.kafka.producer.retry.backoff.ms=3000
#kafak生产者加幂等性,此时acks必须为all
a1.sinks.k1.kafka.producer.enable.idempotence=true
a1.sinks.k1.kafka.producer.acks = all

到这问题基本就解决了,接下来的更深层次的重复,就不写了。。


总结:

flume重复问题可以从flume日志是否异常,kafka生产者幂等性,flume source,以及最终的etl业务清洗等各方面入手
原创文章转载请注明出处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day-day-up2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值