flume 1.9 源码阅读(一)

Flume源码阅读

  • Flume NG
    • 和 Flume OG 相比
    • Flume 源码目录结构
    • Flume 结构
      • 数据流模型

参考:
https://www.jianshu.com/p/0187459831af
http://flume.apache.org/FlumeUserGuide.html

Flume NG

Flume 是一个分布式的、可靠的、高效的日志采集、聚合、转移系统。他可以从多个不同的Source(源)将数据存储到中心数据仓库中

Flume NG 全称是 Flume (Next Generation) ,他是相对于 Flume OG (Original Genetration)而言的,他比Flume OG 要更简单、更轻量、更容易部署。

和 Flume OG 相比

首先 Flume NG 是从 Flume OG 开始的:

  • Flume NG 依然使用 sources 和 sinks ,我们使用 channel 来连接他们
  • channels 是可插拔(配置的), in-memory channel 用于快速但非持久事件传递、持久性事件传递使用file-based channel
  • 不在区分逻辑节点和物理节点,所有节点被称为 agent, 每个agent可以运行0个或多个 sources 和 sinks
  • 取消了 master,不在依赖于zookeeper
  • 所有的东西都是以插件形式存在的,有些是面相最终用户的,有些则是面相开发人员的,可插拔组件包括 channels、sources、sinks、interceptors(拦截器)、sink processors 和 event serializers(事件序列化器)

Flume 源码目录结构

flume 1.9 源码阅读(一)_第1张图片

  1. 主要模块说明
  • flume-ng-channels
    实现了flume channels,包含了flume-file-channel、flume-jdbc-channel、flume-kafka-channel、flume-spillable-memory-channel 四类

  • flume-ng-sources
    实现了 flume sources, 如 flume-kafka-source、flume-taildir-source 等

  • flume-ng-sinks
    实现了 flume sinks, 如 flume-hdfs-sink、 flume-ng-hbase-sink、flume-ng-elasticsearch-sink、flume-ng-kafka-sink 等

  • flume-ng-core
    flume整个核心框架,包括了各个模块的接口以及逻辑关系实现

  • flume-ng-node
    实现启动flume的一些基本类,包括main函数的入口(Application.java中)

  • flume-ng-configuration
    这个主要就是Flume配置信息相关的类,包括载入flume-config.properties配置文件并解析。其中包括了Source的配置,Sink的配置,Channel的配置

  • flume-ng-clients
    实现了log4j相关的几个Appender,使得log4j的日志输出可以直接发送给flume-agent

Flume 结构

数据流模型

flume 1.9 源码阅读(一)_第2张图片

  • Event: 一个 event 是对于 flume 来说就是一个最小数据单元
  • Source: 获取数据(event)组件
  • Channel: 用来存储source获取的数据(event)直到sink将其消费
  • Sink: 消费Channel中数据,将其存储到外部设备或者发送到中间件中

简单的来说 Flume 使用 source 组件来获取数据(event), 然后将其存储到一个或者多个 channel 中,然后 sink 组件将其消费发送到外部存储或者中间件中(如kafka)。

你可能感兴趣的:(大数据,工具)