【Flume】数据采集引擎Flume

本文介绍Flume作为高效可靠的日志收集工具的核心组件及其工作原理。涵盖Flume架构、组件功能,如Client、Source、Channel、Sink等,并提供安装步骤及Avro+Memory+Logger配置案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述
flume是一个高效的、可靠的、可用的分布式海量日志数据收集、聚合、传输的工具。
Flume is a distributed, reliable, and available service for efficiently collecting, aggregating, and moving large amounts of log data.
二、flum的架构

三、flume的组件以及作用
client:客户端(运行agent的地方)
source: 数据源,负责接收数据
channel:管道,负责接收source端的数据,将数据推送到sink端。
sink:下沉器,负责去拉取channel的数据,将其持久化到存储系统。

interceptor: 拦截器,flume允许使用拦截器拦截数据,可以作用于source、sink端,flume还可以允许拦截器链。

selector:选择器,作用于source端,决定数据往哪个channel发送。

event:flume的事件,相当于一条数据。
agent:flume的客户端,一个agent运行在一个jvm里,它是flume的最小运行单元。

source的种类
avro\exec\spooling dir\syslogtcp\httpsource\kafka

channel的种类
file、memory、jdbc、kafka
sink的种类
avro、hdfs、kafka、hbase、logger

数据模型:
单一的数据模型:
多数据流模型:

四、flume的安装
flume0.9和1.x的版本
1. 0.9之前的 版本叫flume-og, 而1.x的版本叫flume-ng
2. 0.9区分逻辑和物理上的节点,而1.x不区分物理和逻辑上的节点,每一个agent都是一个服务。
3. 0.9需要master和zookeeper的支持,而1.x 不再需要这些组件的支持。
4. 0.9开发并不是很灵活,而1.x很灵活,

四、flume案例
avro+memory+logger

vi agentconf/avro-logger.conf
#Name the components on the agent
a1.sources=r1
a1.channel=c1
a1.sinks=s1

#describe source
s1.sources.r1.type = avro
s1.sources.r1.bind = 192.168.243.11
s1.sources.r1.port = 44444

#describe channel
a1.channels.c1.type = memory

#describe sinks
a1.sinks.s1.type = logger

#bind source and sink to the channel
a1.source.r1.channels = c1
a1.sinks.s1.channels = c1

启动agent
bin/flume-ng agent -c ./conf -f ./agentconf/avro-logger.conf -n a1 -Dflume.root.logger=INFO,console

测试
bin/flume-ng avro-client -c ./conf -H 192.168.243.11 -p 44444 -F /root/flumedata/test.dat
### 使用 Apache Flume 采集和处理股票数据 Apache Flume 是一种分布式、可靠且高效的工具,用于从各种来源收集、聚合并传输大规模的日志或事件数据[^1]。尽管其最初设计目标是针对日志文件的采集,但由于其灵活性和可扩展性,也可以用来采集其他类型的动态数据,比如股票市场中的实时交易数据。 #### 配置 Flume采集股票数据 以下是使用 Apache Flume 进行股票数据采集的主要方法: 1. **选择合适的 Source** 股票数据通常可以通过 HTTP API 或 WebSocket 推送获取。因此可以选择 `HttpSource` 或自定义开发一个支持 WebSocket 的 Source。如果采用 RESTful API 获取数据,则推荐使用 `HttpSource` 并设置相应的端口监听来自外部系统的 POST 请求[^3]。 2. **配置 Channel 和 Sink** - **Channel**: 数据缓冲区,默认有 MemoryChannel (内存队列) 和 FileChannel (磁盘持久化队列),建议生产环境优先选用后者以防止节点崩溃造成数据丢失。 - **Sink**: 可以将接收到的数据写入 HDFS 文件系统存储长期保留;或者发送至 Kafka 主题供下游流计算引擎消费进一步加工分析;亦或是直接存放到关系型数据库中便于即时查询展示等操作[^4]。 3. **编写 Agent 配置文件** 下面给出一段简单的 agent.conf 示例代码片段来说明如何搭建这样一个流程: ```properties # Define a source, channel and sink. agent.sources = httpStockSource agent.channels = memoryChannel agent.sinks = hdfsSink kafkaSink # Describe/configure the source agent.sources.httpStockSource.type = http agent.sources.httpStockSource.port = 8080 agent.sources.httpStockSource.handler = org.apache.flume.source.http.JSONHandler # Use a memory channel to connect with sinks agent.channels.memoryChannel.type = memory agent.channels.memoryChannel.capacity = 1000 agent.channels.memoryChannel.transactionCapacity = 100 # Configure the HDFS sink agent.sinks.hdfsSink.channel = memoryChannel agent.sinks.hdfsSink.type = hdfs agent.sinks.hdfsSink.hdfs.path = /user/flume/stock_data/%Y-%m-%d/ agent.sinks.hdfsSink.hdfs.fileType = DataStream agent.sinks.hdfsSink.hdfs.writeFormat = Text agent.sinks.hdfsSink.hdfs.rollInterval = 600 # Configure the Kafka sink agent.sinks.kafkaSink.channel = memoryChannel agent.sinks.kafkaSink.type = org.apache.flume.sink.kafka.KafkaSink agent.sinks.kafkaSink.topic = stock_topic agent.sinks.kafkaSink.brokerList = localhost:9092 agent.sinks.kafkaSink.requiredAcks = 1 ``` 以上配置展示了如何利用 HttpSource 接收 JSON 格式的股票行情更新并通过双路输出分别保存到 HDFS 上以及推送到 Kafka 中等待后续更复杂的 ETL 处理逻辑执行[^2]。 #### 注意事项 - 网络延迟可能会影响实时性的表现效果,请确保网络连接稳定快速; - 对于高频次变动的小量级消息而言,MemoryChannel 性能较好但缺乏容错机制,而 FileChannel 则提供了更高的可靠性代价则是稍慢的速度; - 如果计划接入更多种类异构数据源的话,那么考虑引入拦截器(interceptor)组件来做字段解析转换等工作将会非常有用[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值