Flume系列2-Flume 入门

Flume系列2-Flume 入门,第1张

安装地址:

安装部署:

本地使用的是CDH 6.3.1 版本,已安装Flume,此处略过安装步骤

使用 Flume 监听一个端口,收集该端口数据,并打印到控制台。

安装netcat并检查端口是否被占用

在Flume的安装目录下创建conf/lib目录,并创建flume的配置文件

添加内容如下:

第一种写法:

第二种写法:

参数说明:

--conf/-c:表示配置文件存储在 conf/目录

--name/-n:表示给 agent 起名为 a1

--conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 flume-telnet.conf

文件。

-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger

参数属性值,并将控制台日志打印级别设置为 INFO 级别。日志级别包括:log、info、warn、

error。

通过nc输入的数据,flume监听页面都接受到了,并且输出到了控制台

实时监控 Hive 日志,并上传到 HDFS 中

注:要想读取 Linux 系统中的文件,就得按照 Linux 命令的规则执行命令。由于 Hive 日志在 Linux 系统中所以读取文件的类型选择:exec 即 execute 执行的意思。表示执行Linux 命令来读取文件。

添加如下内容:

注意: 对于所有与时间相关的转义序列,Event Header 中必须存在以 “timestamp”的key(除非 hdfs.useLocalTimeStamp 设置为 true,此方法会使用 TimestampInterceptor 自动添加 timestamp)。

a3.sinks.k3.hdfs.useLocalTimeStamp = true

从日志可以看到文件已经上传到HDFS:

在HDFS上查看:

1小时自动生产一个目录

1分钟自动生产一个文件

tmp结尾的文件为正在写入的文件,时间到了后就会自动重命名

使用 Flume 监听整个目录的文件,并上传至 HDFS

添加如下内容:

flume日志:

从日志输出可以看到原目录的 c.txt直接被修改为 c.txt.COMPLETED,然后c.txt上传到一个另外名字的文件,而且从输出可以看到,多个文件的内容会合并上传到一个hdfs上的文件。

hdfs上看输出:

同样是1分钟一个文件,但是有写入才会创建,如果没有写入是不行的。

  Exec source 适用于监控一个实时追加的文件,不能实现断点续传;Spooldir Source 适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步;而 Taildir Source 适合用于监听多个实时追加的文件,并且能够实现断点续传。

案例需求:

使用 Flume 监听整个目录的实时追加文件,并上传至 HDFS 。

添加如下内容:

flume控制台输出:

HDFS查看输出文件:

Taildir Source 维护了一个 json 格式的 position File,其会定期的往 position File中更新每个文件读取到的最新的位置,因此能够实现断点续传

注:

Linux 中储存文件元数据的区域就叫做 inode,每个 inode 都有一个号码, *** 作系统用 inode 号码来识别不同的文件,Unix/Linux 系统内部不使用文件名,而使用 inode 号码来识别文件。

改名后inode不会发生变化,这点要注意

Channel被设计为Event中转临时缓冲区,存储Source收集并且没有被Sink读取的Event,为平衡Source收集和Sink读取数据的速度,可视为Flume内部的消息队列。Channel线程安全并且具有事务性,支持source写失败重复写和sink读失败重复读等 *** 作。

常用的Channel类型有Memory Channel、File Channel、KafkaChannel等。

对比Channel, Memory Channel读写速度快,但是存储数据量小,Flume进程挂掉、服务器停机或者重启都会导致数据丢失。部署Flume Agent的线上服务器内存资源充足、不关心数据丢失的场景下可以使用。

将 event 写入磁盘文件,与 Memory Channel 相比存储容量大,无数据丢失风险。File Channle 数据存储路径可以配置多磁盘文件路径,通过磁盘并行写入提高FileChannel 性能。Flume 将 Event 顺序写入到 File Channel 文件的末尾,在配置文件中通过设置 maxFileSize 参数配置数据文件大小,当被写入的文件大小达到上限时 Flume 会重新创建新的文件存储写入的 Event。当然数据文件数量也不会无限增长,当一个已关闭的只读数据文件中的 Event 被读取完成,并且 Sink 已经提交读取完成的事务,则 Flume 将删除存储该数据的文件。Flume 通过设置检查点和备份检查点实现在 Agent 重启之后快速将 File Channle 中的数据按顺序回放到内存中,保证在 Agent 失败重启后仍然能够快速安全地提供服务。

将Kafka作为Channel存储,Kafka是分布式、可扩展、高容错、高吞吐的分布式系统,Kafka通过优秀的架构设计充分利用磁盘顺序特性,在廉价的硬件条件下完成高效的消息发布和订阅。

Memory Channel在使用的过程中受内存容量的限制不能缓存大量的消息,并且如果Memory Channel中的消息没来得及写入Sink,此时Agent出现故障就会造成数据丢失。File Channel虽然能够缓存更多的消息,但如果缓存下来的消息还没有写入Sink,此时Agent出现故障则File Channel中的消息不能被继续使用,直到该Agent重新恢复才能够继续使用File Channel中的消息。Kafka Channel相对于Memory Channel和File Channel存储容量更大、容错能力更强,弥补了其他两种Channel的短板,如果合理利用Kafka的性能,能够达到事半功倍的效果。

有了Kafka Channel可以在日志收集层只配置Source组件和Kafka Channel组件,不需要再配置Sink组件,减少了日志收集层启动的进程数并且有效降低服务器内存、磁盘等资源使用率,日志汇聚层可以只配置Kafka Channel和Sink,不需要再配置Source,减少日志汇聚层的进程数,这样的配置既能降低服务器的资源使用率又能减少Event在网络之间的传输,有效提高日志采集系统的性能。

Kafka Channel相关 *** 作在org.apache.flume.channel.kafka包的KafkaChannel类定义,

kafka相关参数的默认值在org.apache.kafka.clients.CommonClientConfigs包中的KafkaChannel-Configuration中。

Kafka的通用配置参数在配置文件中都以“kafka.”为前缀,针对Producer或者Consumer的相关配置以“kafka.producer. ”或者“kafka.consumer. ”为前缀,

源码 KafkaChannelConfiguration 中相关默认配置参数定义如下:

说明:agent_name 没有配置Source,只配置了Channel和Sink,使用的Channel类型为Kafka Channel,主题名称为“test_channel”, consumer组id为“test-consumer”, Sink类型为 hdfs 滚动生成文件,对接的Channel为KafkaChannel channel_name。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11184982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存