Flume常见问题

一、Flume自带Channel

  Flume自带两种Channel:Memory ChannelFile Channel

  Memory Channel 是内存中的队列。Memory Channel 在不需要关心数据丢失的情景下使用,速度较快。如果需要关心数据丢失,那么Memory Channel就不应该被选用,因为随着程序的死亡、机器宕机或者重启都会导致数据的丢失。

  File Channel将所有时间写到磁盘,因此在程序关闭或宕机的情况下不会丢失数据。

二、 Flume中的小文件问题

  在Flume的官方配置文档中可以看出:flume存在小文件问题(默认10个Event,或1kb在Hdfs上创建一个文件;不够10个Event,30s秒创建一个.tmp文件)。官方配置如下所示:

hdfs.rollInterval	30	Number of seconds to wait before rolling current file (0 = never roll based on time interval)
hdfs.rollSize	1024	File size to trigger roll, in bytes (0: never roll based on file size)
hdfs.rollCount	10	Number of events written to file before it rolled (0 = never roll based on number of events)

  企业解决小文件问题:

#1个小时生成一个新的文件 3600 或 半小时生成一个小文件 1800
a1.sinks.k1.hdfs.rollInterval = 3600
#设置每个文件的滚动大小大概为128MB (为了避免由于下一个event的加入导致整个文件需要进行分片)
a1.sinks.k1.hdfs.rollSize = 134217700
#文件的滚动与Event数量无关
a1.sinks.k1.hdfs.rollCount = 0

三、将数据上传到HDFS上的常见问题

  当我们通过flume将数据上传到HDFS上时,通常存在数据看不懂的问题。(默认是序列化后的数据,文件类型为sequenceFile,需要将其设置为DataStream)

#设置文件类型,可支持压缩(保持数据不动)
a1.sinks.k1.hdfs.fileType = DataStream

四、flume丢失数据吗?

  在Flume中一共有两个事务,一个是在Source到Channel之间,一个是Channel到Sink之间。在Source到Channel之间的叫put事务,在Channel到Sink之间的叫Take事务。(事务的存在是为了保证数据的安全性)
虽然Flume自带的事务性能一定程度保证数据的安全性,但在某些条件下仍旧存在丢失数据的可能性。那么如何保证Flume不丢数据呢?
要保证Flume不丢数据,需要选定特定的Source和Sink。具体组合如下:

Taildir Scorce(不丢数据) + File Channel(Memory在宕机等一些条件下容易丢失数据) + HDFS Sink(可能存在重复数据,但一定不丢数据)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值