Flume基础知识 01简介 + 基本架构 + 核心概念 + 架构模式 + Agent内部原理 + 配置格式(一篇就可入门flume)

Posted シ風

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flume基础知识 01简介 + 基本架构 + 核心概念 + 架构模式 + Agent内部原理 + 配置格式(一篇就可入门flume)相关的知识,希望对你有一定的参考价值。

1 简介

Apache Flume 是一个分布式,高可用的数据收集系统。它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集。Flume 分为 NG 和 OG (1.0 之前) 两个版本,NG 在 OG的基础上进行了完全的重构,是目前使用最为广泛的版本。
Flume 跟 Sqoop、Kettle 有类似的地方但是又有不同,随后会详细分析。

2 基本架构和核心概念

基本架构图【官网】:

来自尚硅谷的资料,侵删,【这个较为详尽】:

2.1 基本架构

这里我们可以类比Kafka进行理解,外部数据源【扮演Kafka的生产者】以特定格式向 Flume 发送 events (事件)【就像Kafka的message一样】,当 source 接收到 events 时,它将其存储到一个或多个 channel【是不是很像Kafka的副本】,channe 会一直保存 events 直到它被 sink 所消费。sink 的主要功能从 channel 中读取 events 【是不是很像Kafka的消费者】,并将其存入外部存储系统或转发到下一个 source,成功后再从 channel 中移除 events。【跟Kafka多么的像】🐘

2.2 核心概念

Agent: 是一个独立的 (JVM) 进程,包含 Source 、 Channel 、 Sink 等组件。

Event: 它是 Flume NG 数据传输的基本单元。类似于 JMS 和消息系统中的消息。一个 Event 由标题和正文组成:前者是键/值映射,后者是任意字节数组。

Source: 数据收集组件,从外部数据源收集数据,并存储到 Channel 中。

Channel: 是源和接收器之间的管道,用于临时存储数据。可以是内存或持久化的文件系统:

Memory Channel : 使用内存,优点是速度快,但数据可能会丢失 (如突然宕机);
File Channel : 使用持久化的文件系统,优点是能保证数据不丢失,但是速度慢。

Sink: 主要功能从 Channel 中读取 Event,并将其存入外部存储系统或将其转发到下一个Source ,成功后再从 Channel 中移除 Event 。

2.3 组件种类

Flume 中的每一个组件都提供了丰富的类型,适用于不同场景:

  • Source 类型 :内置了几十种类型,如 Avro Source , Thrift Source , Kafka Source , JMS Source ;
  • Sink 类型 : HDFS Sink , Hive Sink , HBaseSinks , Avro Sink 等;
  • Channel 类型 : Memory Channel , JDBC Channel , Kafka Channel , File Channel 等。

对于 Flume 的使用,除非有特别的需求,否则通过组合内置的各种类型的 Source,Sink 和 Channel就能满足大多数的需求。在 Flume 官网 上对所有类型组件的配置参数均以表格的方式做了详尽的介绍【Flume的官网是真的很不错,清晰 👏 】,并附有配置样例;同时不同版本的参数可能略有所不同,所以使用时建议选取官网的《Flume 1.9.0 User Guide》作为主要参考资料。

3 架构模式

3.1 multi-agent flow

Flume 支持跨越多个 Agent 的数据传递,这要求前一个 Agent 的 Sink 和下一个 Agent 的 Source 都必须是 Avro 类型,Sink 指向 Source 所在主机名 (或 IP 地址) 和端口。

3.2 Consolidation

Consolidation(联合,统一;合并) 日志收集中常常存在大量的客户端(比如分布式 web 服务),Flume 支持使用多个 Agent 分别收集日志,然后通过一个或者多个 Agent 聚合后再存储到文件系统中。

3.3 Multiplexing the flow

Flume 支持从一个 Source 向多个 Channel,也就是向多个 Sink 传递事件,这个操作称之为 Fan Out (扇出)。默认情况下 Fan Out 是向所有的 Channel 复制 Event ,即所有 Channel 收到的数据都是相同的。同时 Flume 也支持在 Source 上自定义一个复用选择器 (multiplexing selector) 来实现自定义的路由规则。

3.4 负载均衡

4 Agent内部原理

【来自尚硅谷的资料 侵删】这里不详细说明了,大家理解理解:

5 配置格式

Flume 配置通常需要以下两个步骤【配置举例,随后会有详细说明】:

  1. 分别定义好 Agent 的 Sources Sinks Channels,然后将 Sources 和 Sinks 与通道进行绑定。需要注意的是一个 Source 可以配置多个 Channel,但一个 Sink 只能配置一个 Channel。基本格式如下:
<Agent>.sources = <Source>
<Agent>.sinks = <Sink>
<Agent>.channels = <Channel1> <Channel2>
# set channel for source
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...
# set channel for sink
<Agent>.sinks.<Sink>.channel = <Channel1>
  1. 分别定义 Source Sink Channel 的具体属性。基本格式如下:
<Agent>.sources.<Source>.<someProperty> = <someValue>
# properties for channels
<Agent>.channel.<Channel>.<someProperty> = <someValue>
# properties for sinks
<Agent>.sources.<Sink>.<someProperty> = <someValue>

以上是关于Flume基础知识 01简介 + 基本架构 + 核心概念 + 架构模式 + Agent内部原理 + 配置格式(一篇就可入门flume)的主要内容,如果未能解决你的问题,请参考以下文章

分布式日志收集系统 —— Flume

Flume框架基础

大数据系列|Flume的架构和环境安装

Flume基础:概述

Flume概述

Flume架构简介