flume可以有多个source 多个channel 多个sink
为什么要把flume分为source chanel sink多个组件呢?有多个组件是为了更加灵活,可以得到不同的来源,传入不同的地方 也可以只有一个source channel 而没有sink
也可以是其他情况
agent---flume
source搜集数据(如:每次来一行数据,就读取一行,那么用tail -f 用exec source 里面配置command参数:配置tail -f命令)
(jdbc memory kafka file) Channel 为什么要用channel呢?作为缓冲的一个过程,防止source和sink速率不匹配的问题
sink
场景;要求实时采集nginx的log文件 并且保证数据不丢掉 数据丢失情况:nginx宕机,如果flume机器宕机 ,重新启动flume,那么flume会接着原来的数据继续读 (需要记录偏移量position)
自定义source(实现上面的可以记录偏移量的source): 继承AbstractSource,实现EventDrivenSource接口,Configurable接口
1 读取配置文件。读取哪个文件,编码集,偏移量写到哪个文件,多长时间读一次,多长时间检测一下文件是否有新内容