flume性能调优

南墨2年前技术文章1139

1.Source性能调优

1.1 Spooldir Source

使用Spooldir Source采集日志数据时,若每行日志数据<100bp,可以通过将多行合并传输来提升传输性能

建议合并时根据数据长度来确定多少行合并为一个单位进行传输,合并后的长度建议在1K以上,譬如数据长度为50bp,那么可以采用20行合并为一个单位传输,配置示例如下:

server.sources.static_log_source.deserializer.maxBatchLine = 20

server.sources.static_log_source.deserializer.maxLineLength = 2048

1.2 Avro Source

Avro source支持SSL加密传输,但加密传输势必会影响传输性能,因此如果环境足够安全或传输的数据非敏感数据,建议采用非加密传输来提升传输性能,配置示例如下:

server.sources.avro_source.ssl = false

1.3 TailDir Source

如果TAILDIR监视的目录下有数千文件,按照正则表达式列出所有的文件会是一个比较耗费资源的过程,建议打开cachePatternMatching开关以提升性能,配置示例如下:

server.sources.taildir_source.cachePatternMatching = false

2. Channel性能调优

2.1 File Channel

使用File Channel会将缓存数据写入本地磁盘,由于需要频繁的读写dataDirs所在磁盘,若数据流量比较大,可能造成磁盘IO高,从而影响传输性能;如果IO响应时间经常超过10ms,那么建议将dataDirs设置在更多的磁盘上以降低磁盘IO,配置示例如下:

server.channels.file_channel.dataDirs = /data/data1/flume/datadir, /data/data2/flume/datadir, /data/data3/flume/datadir

2.2 Memory Channel

Memory Channel使用内存作为缓存,相较于File Channel有更好的性能,但使用Memory Channel可靠性较低,一旦宕机或其他意外发生,Channel中缓存的数据将会丢失,因此Channel的容量(capacity)不宜设置过大,另一方面Channel容量大小直接影响到flume进程占用内存大小,容量越大,占用的内存越大,GC耗时越长, 性能也越低;建议Channel容量设置为transactionCapacity的十倍,最好不要超过100000;配置示例如下:

server.channels.memory_channel.capacity = 100000

3. Sink性能调优

3.1 Hdfs Sink

Hdfs Sink支持文件滚动,滚动策略有按时间(hdfs.rollInterval)、文件大小(hdfs.rollSize)、Event个数(hdfs.rollCount)滚动,该配置对传输性能有影响,滚动约频繁对性能影响越大;超时时间(hdfs.callTimeout)也对传输数据有影响,尤其是HDFS压力较大的场景;

如何提升hdfs sink的性能?

1.       在业务允许的范围内,尽可能减小文件滚动频率;

2.       HDFS压力较大、flume日志中有比较频繁hdfs超时异常,参见5.5 性能瓶颈监控及调优中超时异常章节介绍调整hdfs.callTimeout设置;

配置示例如下:

server.channels.hdfs_sink.coalesceIncrements = true

3.2 Kafka Sink

kafka中写数据,一般要写若干副本(至少为1),Kafka Sinkkafka.producer.acks配置项可以配置需要等待的副本返回结果,若设为0,表示不需要等待,此参数可以提升Kafka Sink性能,但同时牺牲了可靠性,因此在有可靠性要求的场景下不建议使用,配置示例如下:

server.channels.kafka_sink.kafka.producer.acks = 0

3.3 HBase Sink

HBase sink每批次写入的数据如果存储在有限的cell中,是否合并计数对性能有较大的影响,将参数coalesceIncrements设置为true,即合并计数会提升HBase sink的性能,但计数异常时会影响整个批次,在可靠性要求较高的时候不建议采用,配置示例如下:

server.channels.hbase_sink.coalesceIncrements = true

HBase Sink支持向安全HBase写数据,如果向非安全HBase中写数据,可以使用AsyncHBaseSink,其采用异步的方式,性能会更高,但其不支持安全认证,配置示例如下:

server.channels.asynchbase_sink.type = asynchbase

server.channels.asynchbase_sink.coalesceIncrements = true


返回列表

上一篇:ES架构模型

下一篇:flink web监控

相关文章

Debezium部署以及同步之DB2数据到Kafka的同步

Debezium部署以及同步之DB2数据到Kafka的同步

因为Debezium依赖于kafka之上,所以我们先部署kafka和zookeeper(忽略)。1 环境介绍Debezium1.9版本 Db2 11.5版本  附官网:http...

Golang new and make

Go  语言中 new 方法和 make 方法,都是用于分配相应类型内存空间。1、makemake 内置函数分配并初始化(仅)slice、map 或 chan 类型的对象,返回值是所创建的类型本身。与...

数据湖技术之iceberg(十一)Flink与Iceberg整合-DataStream API

数据湖技术之iceberg(十一)Flink与Iceberg整合-DataStream API

1.实时写入Iceberg表DataStream Api方式操作Iceberg方式目前仅支持Java Api。使用DataStream API 实时写入Iceberg表具体操作如下:2、编写代码使用D...

k8s Krew 插件使用指南

kubectl Krew 插件使用指南前言:在某些情况下,只是使用 kubectl 命令的时候存在效率比较低、功能不满足的问题,针对这些问题,社区提出了krew插件项目。还有一点是:大部分工程师还是喜...

ES底层数据存储原理

ES底层数据存储原理

1、ES底层数据存储原理架构图Segment工作流程:A、 新的文档在内存中组织B、 每隔一段时间,buffer将会被提交:生成一个新的segment(一个额外的新的倒序索引)并被写到磁盘,同时一个新...

WAF 透明接入模式

WAF 透明接入模式

透明接入模式只需将需要防护的网站信息添加到WAF,无需修改域名的DNS解析设置,即可实现WAF防护。如果您的源站服务器为ECS服务器或者部署在阿里云公网SLB上,那么除了使用CNAME接入模式,还可以...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。