关于flume与kafka的对接问题

在进行flume和kafka的对接之前,我们要知道为什么要让他们这两个系统进行对接:
1.生产环境中,往往是读取日志进行分析,而这往往是多数据源的,如果单单的使用Kafka构建多个生产者使用文件流的方式向主题写入数据再供消费者消费的话,无疑非常的不方便(这里通俗的讲他们对接的好处也就是采集日志文件给多个系统来使用)。
2.Flume可以使用拦截器实时处理数据。这些对数据屏蔽或者过量是很有用的。Kafka需要外部的流处理系统才能做到。
3.如果Flume直接对接实时计算框架,当数据采集速度大于数据处理速度,很容易发生数据堆积或者数据丢失,而kafka可以当做一个消息缓存队列,可以存放一段时间的数据用来削峰

flume和kafka对接的步骤:
1.在hadoop102机器中的/opt/module/flume/job目录下创建文件kafka.conf
这里我们的Source选用的是netcat,Channel选用的是Memory Channel,Sink选用的是kafka Sink. 然后填入如下的内容
注意配置里面的Sink中的 a1.sinks.k1.kafka.topic = xxx,这里写上你自己kafka中的主题。 a1.sinks.k1.kafka.bootstrap.servers =xxx这里写上你集群的主机名,后面的9092是kafka的端口号。

#Name
a1.sources = r1
a1.channels = c1
a1.sinks = k1

#Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444


#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100


#Sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = demo2
a1.sinks.k1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.kafka.producer.linger.ms = 1


#Bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2.以上内容保存以后我们在集群中启动一下kafka和zookeeper.
注意要先启动zk在启动kafka
zk的安装目录执行 bin/zhServer.sh start
kafka的安装目录执行 bin/kafka-server-start.sh -daemon config/server.properties

3.开始在hadoop102上启动一个消费者
在kafka的安装目录下执行bin/kafka-consumer-consumer.sh --zookeeper hadoop102:2181 --topic demo2 这里我用的是demo2主题

然后在Xshell中开启两个hadoop102的窗口,一个用于开启flume,在flume的安装目录下执行[root@hadoop102 flume]# bin/flume-ng agent -c conf/ -f job/kafka.conf -n a1

然后在另一个窗口的输入一下内容[root@hadoop102 ~]# nc localhost 44444

然后我们向里面发送任意内容,可以看到经过flume我们的消息还是可以在kafka中接受到。

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44080445/article/details/107425277