一、安装后修改flume-env.sh 加入JAVA_HOME
我的版本是flume-1.8.0
二、以spooldir方式启动,写kafka_spool.conf
source、channel、sink概念:
Client:Client生产数据,运行在一个独立的线程。
Event: 一个数据单元,消息头和消息体组成。(Events可以是日志记录、 avro 对象等。)
Flow: Event从源点到达目的点的迁移的抽象。
Agent: 一个独立的Flume进程,包含组件Source、 Channel、 Sink。(Agent使用JVM 运行Flume。每台机器运行一个agent,但是可以在一个agent中包含多个sources和sinks。)
Source: 数据收集组件。(source从Client收集数据,传递给Channel)
Channel: 中转Event的一个临时存储,保存由Source组件传递过来的Event。(Channel连接 sources 和 sinks ,这个有点像一个队列。)
Sink: 从Channel中读取并移除Event, 将Event传递到FlowPipeline中的下一个Agent(如果有的话)(Sink从Channel收集数据,运行在一个独立线程。)
#example.conf: A single-node flume configuration
#test kafka sink with spooldir source
#Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#Describe/configue the source
a1.sources.r1.type = spooldir
a1.sources.r1.channels = c1
a1.sources.r1.spoolDir = /opt/flume-1.8.0/logs
a1.sources.r1.fileHeader = true
#Describe the sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#设置kafka的主题topic
a1.sinks.k1.topic = top4
#设置消费者编码为UTF-8
a1.sinks.k1.custom.encoding=UTF-8
#绑定kafka主机以及端口号
a1.sinks.k1.kafka.bootstrap.servers = master:9092,slave1:9092,slave3:9092
#设置kafka序列化方式
a1.sinks.k1.serializer.class = kafka.serializer.StringEncoder
#use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
三、启动flume
./bin/flume-ng agent -n a1 -c ./conf -f ./conf/kafka_spool.conf -Dflume.root.logger=INFO,console
四、启动sparkstreaming和kafka,注意topic为同一主题
参见之前的工作https://blog.csdn.net/weixin_41684423/article/details/115698206?spm=1001.2014.3001.5501
五、效果
致谢:https://www.cnblogs.com/qingyunzong/p/8994494.html
https://www.aboutyun.com//forum.php/?mod=viewthread&tid=8917&extra=page%3D1&page=1&
https://blog.csdn.net/a_drjiaoda/article/details/85003929