flume读取文件传到kafka

该文详细介绍了如何使用Flume进行文件传输。首先,准备待传输的文件,然后配置events.conf,设定sources、channels和sinks,如从spooldir读取,过滤并传输至Kafka。接着,启动Flumeagent,并创建Kafka主题。最后,将文件复制到指定目录,Kafka消费者开始读取。

一、准备要传输的文件

在这里插入图片描述

二、配置对应的conf文件

在插入图片描述

每个配置conf文件配对相应的文件,这里拿events.conf举例

events.sources=eventsSource
events.channels=eventsChannel
events.sinks=eventsSink

events.sources.eventsSource.type=spooldir
//文件要传输到的目录,在此目录上读取
events.sources.eventsSource.spoolDir=/opt/flumelogfile/events
events.sources.eventsSource.deserializer=LINE
events.sources.eventsSource.deserializer.maxLineLength=320000
//此行表示传入的文件必须满足这种格式才会读取
events.sources.eventsSource.includePattern=events_[0-9]{4}-[0-9]{2}-[0-9]{2}.csv
events.sources.eventsSource.interceptors=head_filter
events.sources.eventsSource.interceptors.head_filter.type=regex_filter
//不包含event_id开头的一行,去除首行
events.sources.eventsSource.interceptors.head_filter.regex=^event_id*
events.sources.eventsSource.interceptors.head_filter.excludeEvents=true

events.channels.eventsChannel.type=file
events.channels.eventsChannel.checkpointDir=/opt/flumelogfile/checkpoint/events
events.channels.eventsChannel.dataDirs=/opt/flumelogfile/data/events

events.sinks.eventsSink.type=org.apache.flume.sink.kafka.KafkaSink
events.sinks.eventsSink.batchSize=640
//kafka对应的broker地址
events.sinks.eventsSink.brokerList=192.168.91.180:9092
//kafka对应的topic主题
events.sinks.eventsSink.topic=events

events.sources.eventsSource.channels=eventsChannel
events.sinks.eventsSink.channel=eventsChannel

三、启动flume

在/opt/soft/flume190目录下启动以下命令

./bin/flume-ng agent --name userfriends --conf ./conf/ --conf-file ./conf/events/uf.conf -Dflume.root.logger=INFO,console

出现以下图片则启动成功

在这里插入图片描述

四、创建topic主题,启动kafka消费者

创建主题
注意:副本数不能大于broker数

kafka-topics.sh --create --zookeeper 192.168.91.180:2181 --topic events --partitions 1 --replication-factor 1

启动消费者

kafka-console-consumer.sh --bootstrap-server 192.168.91.180:9092 --topic events

五、将传输的文件cp到conf配置文件指定的目录

cp ./events.csv /opt/flumelogfile/ea/events_2023-04-02.csv

传输到指定文件后,kafka消费者就会读取到对应的文件

在使用Python将数据从Flume、ZooKeeper和Kafka传输到HBase的过程中,通常会涉及以下几个步骤: 1. **Flume**:Flume是一个分布式、可靠、高可用的数据收集系统。你可以通过Flume的Source(数据源),如JDBC Source(数据库)、HTTP Source(网络请求)等,读取数据。然后创建ChanneL(通道)存储数据,最后通过Sink(数据 sink)如HDFS或Avro sink将数据发送到Kafka。 ```python from flume import Source, Channel, Sink source = Source('jdbc', ...) channel = Channel('memory') sink = Sink('kafka', brokers=['localhost:9092'], topic='your-topic') # 配置并启动Flume source.set_channel(channel) channel.add_sink(sink) ``` 2. **ZooKeeper**: ZooKeeper提供了一个协调服务,用于管理Flume的配置信息。你需要在ZooKeeper中配置Flume的拓扑结构,包括各个组件的位置和连接参数。 3. **Kafka**:Flume发送的数据最终会被推送到Kafka主题。在Python中,可以使用`kafka-python`库操作Kafka,例如生产者(Producer)将数据发布到指定topic。 ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') producer.send('your-topic', key=b'the-key', value=data) ``` 4. **数据路由到HBase**: 数据从Kafka到达后,一般会有一个HBase消费者应用负责监听这个主题,并通过Kafka的消息队列模型消费数据。在Python中,可以用`hbase`库(不是Apache HBase官方提供的,而是基于Thrift接口的客户端)来操作HBase。 ```python from hbase import HBaseClient hbase = HBaseClient(hosts='localhost:9090', table_name='your-table') row_key, column_family, column_qualifier = ..., ..., ... hbase.put(row_key, {column_family: {column_qualifier: data}}) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值