Flume 介绍和常见问题
flume 是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume 提供对数据进行简单处理,并写到各种数据接受方(比如文本、HDFS、Hbase 等) 的能力 。
flume 的数据流由事件(Event) 贯穿始终。事件是 Flume 的基本数据单位,它携带日志数据(字节数组形式) 并且携带有头信息,这些 Event 由 Agent 外部的 Source 生成,当 Source 捕获事件后会进行特定的格式化,然后 Source 会把事件推入(单个或多个)Channel 中。你可以把 Channel 看作是一个缓冲区,它将保存事件直到 Sink 处理完该事件。Sink 负责持久化日志或者把事件推向另一个 Source。
flume 的可靠性
当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume 提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据 agent 首先将 event 写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是 scribe 采用的策略,当数据接收方 crash 时,将数据写到本地,待恢复后,继续发送),Besteffort(数据发送到接收方后,不会进行确认)。
flume 的可恢复性
还是靠 Channel。推荐使用 FileChannel,事件持久化在本地文件系统里(性能较差)。
你是如何实现 Flume 数据传输的监控的
使用第三方框架 Ganglia 实时监控 Flume。
Flume 的 Source,Sink,Channel 的作用?你们 Source 是什么类型?
作用
(1)Source 组件是专门用来收集数据的,可以处理各种类型、各种格式的日志数据,包括 avro、thrift、exec、jms、spooling directory、netcat、sequence generator、syslog、http、legacy
(2)Channel 组件对采集到的数据进行缓存,可以存放在 Memory 或 File 中。
(3)Sink 组件是用于把数据发送到目的地的组件,目的地包括 Hdfs、Logger、avro、thrift、ipc、file、Hbase、solr、自定义。
我公司采用的 Source 类型为:
- 监控后台日志:exec
- 监控后台产生日志的端口:netcat
Flume 的 Channel Selectors
Channel 选择器是决定 Source 接收的一个特定事件写入哪些 Channel 的组件,它们告知 Channel 处理器,然后由其将事件写入到每个 Channel。
复制 Channel 选择器,该选择器复制每个事件到通过 Source 的 channels 参数所指定的所有的 Channels 中。
多路复用 channel 选择器是一种专门用于动态路由事件的 channel 选择器,通过选择事件应该写入的 channel,基于一个特定的事件头的值进行路由
Flume 参数调优
-Source 增加 Source 个数(使用 Tair Dir Source 时可增加 FileGroups 个数)可以增大 Source 的读取数据的能力。
例如:当某一个目录产生的文件过多时需要将这个文件目录拆分成多个文件目录,同时配置好多个 Source 以保证 Source 有足够的能力获取到新产生的数据。 batchSize 参数决定 Source 一次批量运输到 Channel 的 event 条数,适当调大这个参数可以提高 Source 搬运 Event 到 Channel 时的性能。
- Channel type 选择 memory 时 Channel 的性能最好,但是如果 Flume 进程意外挂掉可能会丢失数据。type 选择 file 时 Channel 的容错性更好,但是性能上会比 memory channel 差。
- 使用 file Channel 时 dataDirs 配置多个不同盘下的目录可以提高性能。
- Capacity 参数决定 Channel 可容纳最大的 event 条数。
- transactionCapacity 参数决定每次 Source 往 channel 里面写的最大 event 条数和每次 Sink 从 channel 里面读的最大 event 条数。transactionCapacity 需要大于 Source 和 Sink 的 batchSize 参数。
Flume 采集数据会丢失吗?
不会,Channel 存储可以存储在 File 中,数据传输自身有事务。
Flume 的负载均衡和故障转移吗
目的是为了提高整个系统的容错能力和稳定性。简单配置就可以轻松实现,首先需要设置 Sink 组,同一个 Sink 组内有多个子 Sink,不同 Sink 之间可以配置成负载均衡或者故障转移。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论