大数据生态系统】flume中source 和sink为什么可以不配置

2021-01-05 13:54发布

如题

如题

3条回答
小磊子
2楼 · 2021-01-06 10:29

Flume简介

    Flume 是Cloudera(就是CDH的那个公司) 开发的实时日志收集系统,它是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
    Flume可以根据需求接收不同的数据类型,同时将接收的数据发送到其他的具有接收能力或者处理能力的地方,如kafka,hdfs,本地文件等,比如冲一个app埋点采集过来的日志数据发送到flume中,即可将日志进行存储到hdfs或者文件然后解析离线分析,又可以(同时可以)将日志发送到kafka,然后进行实时分析;在这里Flume充当一个类似管道的作用,将接收到的数据引流到所需的地方去,本身不存储数据但是有一定的缓冲,区别于kafka消息队列,可以持久化数据;
   flume有三个重要的Source、Channel、Sink

Source

   即flume来源,是专门用来收集数据的,可以处理各种类型、各种格式的日志数据(包括avro、thrift、exec、jms、spooling directory、netcat、 generator、syslog、http、legacy、自定义),还有其他如Http等一些数据源,也可以自己重写一个类,比如自动读取数据数据库(flume-ng-sql-source ),并将接收的数据以Flume的event格式传递给一个或者多个通道channel,。

Channel

   即管道,是接收到数据源,在sink前中间的一个连接通道,可以理解为从水塔到水龙头之间那个水管管道,本身不是存储数据,只是一个短暂临时的容器,Channel将从source处接收到的event格式的数据缓存起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用

Sink

   即数据最终流向的地方,它将channel中发送过来的数据存储到指定的组件中,包括文本,hdfs,数据库,kafka,hbase,网络流等

配置示例
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source:配置接收的源为avro格式,并且定义了发送的ip和端口,一般log4j,logback在打日志就能发送,已经有集成好的logback的
a1.sources.r1.channels =  c1
a1.sources.r1.type = avro
a1.sources.r1.bind = 192.168.1.100
a1.sources.r1.port = 44444

# Describe the sink1  to local file:定义sink的形式和其他配置,file_roll表示写入本地文件中
a1.sinks.k1.channel = c1
a1.sinks.k1.type = file_roll  
a1.sinks.k1.sink.directory = /data/log/test
a1.sinks.k1.sink.file.prefix=flume-
a1.sinks.k1.sink.rollInterval=3600
a1.sinks.k1.sink.batchSize=10
a1.sinks.k1.sink.serializer=text
a1.sinks.k1.sink.serializer.appendNewline = true

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10240 #内存中存储 Event 的最大数
a1.channels.c1.transactionCapacity = 10240 #source 或者 sink 每个事务中存取 Event 的操作数量(不能比 capacity 大)
Event是Flume流中的最小单位,比如一行就是一个Event,在代码中可以根据不同的event的进行不同数据处理


相关问题推荐

没有解决我的问题,去提问