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消费者是否能消费到数据