Flume日志采集

Flume中的Source是数据收集的组件,而KafkaChannel是一种高效的缓冲通道

Apache Flume和Apache Kafka是两个常用的技术,它们可以结合起来构建一个强大的数据流水线。

Flume中的Source负责从各种数据源收集数据并将其发送到Flume的Channel中。Source可以是多种类型,比如监听文件变化的TailFileSource接收网络传输数据的NetcatSource等。这些Source可以根据实际业务需求进行配置,实现对不同数据源的实时监控和数据提取。

KafkaChannel是利用Kafka作为数据传输的管道,具有高吞吐量、可持久化存储和良好的容错性。它将收集到的事件存储在Kafka集群中,从而实现了事件的持久化保存和高可用性。KafkaChannel的配置参数包括指向Kafka集群的地址、使用的Kafka主题以及消费者组ID等。这种使用方式可以将数据可靠地传输到下游的Sink,例如HDFS、HBase或其他Kafka集群。

选择TaildirSource和KafkaChannel,并配置日志校验拦截器。

TailDirSource:用于从指定目录监控新产生的文件。

1.支持断点续传,可以记录并恢复读取位置,即使Flume重启也能继续从上次停止的位置开始读取数据,确保不丢失数据且不重复处理。

2.能够监控指定目录下的多个文件。

更适合复杂的多文件监控和高可用性需求,能够更好地处理多文件监控和保证数据完整性。

KafkaChannel:采用KafkaChannel,省去了Sink,提高了效率。

日志采集Flume配置实操

1、创建Flume配置文件

在主节点的Flume的job目录下创建file_to_kafka.conf

mkdir job

vim  job/file_to_kafka.conf

配置文件内容如下:

#定义组件
a1.sources = r1
a1.channels = c1

#配置source
a1.sources.r1.type = TAILDIR    #使用TailDirSource组件
a1.sources.r1.filegroups = f1
#读取文件的路径
a1.sources.r1.filegroups.f1 = /opt/module/applog/log/app.*
#记录了Flume读取文件的当前位置或偏移量。
#为了确保在Flume重启或发生故障后能够从上次停止的位置继续读取数据,而不是从头开始,从而提高数据的可靠性和传输的连续性。
a1.sources.r1.positionFile = /opt/module/flume/taildir_position.json

#配置channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel   
#定义了Kafka集群的地址,Flume将使用这些地址连接到Kafka集群
a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092
#指定的Kafka主题为topic_log,所有的事件都将被发送到这个主题中
a1.channels.c1.kafka.topic = topic_log
#不将数据封装成event,直接将原来的数据传输给kafka
a1.channels.c1.parseAsFlumeEvent = false

#组装 
#c1 连接Source(数据源)和前面定义的KafkaChannel通道。由Source生成的数据将被发送到名为c1的KafkaChannel中。
a1.sources.r1.channels = c1

2、日志采集Flume测试

1)启动Zookeeper、Kafka集群

2)启动主节点的日志采集Flume(或者使用脚本启动)

bin/flume-ng agent -n a1 -c conf/ -f job/file_to_kafka.conf

Flume脚本:

在主节点的用户目录下的bin目录下创建脚本(/home/用户/bin)

vim f1.sh

脚本内容:

#!/bin/bash

case $1 in
"start"){
    echo " --------启动 节点名称 采集flume-------"
    ssh 节点ip或节点名称 "nohup /opt/module/flume/bin/flume-ng agent -n a1 -c /opt/module/flume/conf/ -f /opt/module/flume/job/file_to_kafka.conf >/dev/null 2>&1 &"
};; 
"stop"){
    echo " --------停止 节点名称 采集flume-------"
    ssh 节点名称 "ps -ef | grep file_to_kafka | grep -v grep |awk  '{print \$2}' | xargs -n1 kill -9 "
};;
esac

4)生成数据

执行集群日志生成脚本

lg.sh test 100

5)观察Kafka消费者是否能消费到数据

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flume是一个分布式的、可靠的、高可用的海量日志采集、聚合和传输的系统。它可以从各种源头(如日志文件、syslog、JMS、HTTP等)采集数据,并将这些数据传输到各种目的地(如HDFS、HBase、Elasticsearch、Kafka等)。 要使用Flume采集日志,首先需要安装和配置Flume。在配置文件中,可以指定要采集的源头、目的地和数据处理器等。以下是一个简单的Flume配置文件示例: ``` # flume.conf agent1.sources = source1 agent1.channels = channel1 agent1.sinks = sink1 agent1.sources.source1.type = exec agent1.sources.source1.command = tail -F /var/log/messages agent1.channels.channel1.type = file agent1.channels.channel1.capacity = 1000 agent1.channels.channel1.transactionCapacity = 100 agent1.sinks.sink1.type = hdfs agent1.sinks.sink1.hdfs.path = hdfs://localhost:9000/flume/%Y-%m-%d/%H%M agent1.sinks.sink1.hdfs.fileType = DataStream agent1.sinks.sink1.hdfs.writeFormat = Text agent1.sinks.sink1.hdfs.rollInterval = 600 agent1.sinks.sink1.hdfs.rollSize = 0 agent1.sinks.sink1.hdfs.rollCount = 10000 agent1.sinks.sink1.hdfs.batchSize = 1000 agent1.sinks.sink1.hdfs.useLocalTimeStamp = true agent1.sources.source1.channels = channel1 agent1.sinks.sink1.channel = channel1 ``` 在上面的配置文件中,我们使用`exec`类型的源头来采集`/var/log/messages`文件中的日志。然后,我们将采集到的日志传输到HDFS中的指定目录,同时指定了一些数据处理器,如`Text`格式的写入、按时间间隔和文件大小滚动等。 要启动Flume,可以使用以下命令: ``` $ bin/flume-ng agent --conf-file /path/to/flume.conf --name agent1 -Dflume.root.logger=INFO,console ``` 其中,`--conf-file`参数指定配置文件的路径,`--name`参数指定代理的名称,`-Dflume.root.logger`参数指定日志级别和输出位置。 这样,就可以使用Flume采集日志了。当然,在实际使用中,还需要根据具体需求来配置Flume,并选择合适的源头、目的地和数据处理器等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值