分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Flume和Kafka完成实时数据的采集

发布时间:2023-09-06 02:20责任编辑:熊小新关键词:暂无标签

Flume和Kafka完成实时数据的采集

写在前面
Flume和Kafka在生产环境中,一般都是结合起来使用的。可以使用它们两者结合起来收集实时产生日志信息,这一点是很重要的。如果,你不了解flume和kafka,你可以先查看我写的关于那两部分的知识。再来学习,这部分的操作,也是可以的。

实时数据的采集,就面临一个问题。我们的实时数据源,怎么产生呢?因为我们可能想直接获取实时的数据流不是那么的方便。我前面写过一篇文章,关于实时数据流的python产生器,文章地址:http://blog.csdn.net/liuge36/article/details/78596876
你可以先看一下,如何生成一个实时的数据...

思路??如何开始呢??

分析:我们可以从数据的流向着手,数据一开始是在webserver的,我们的访问日志是被nginx服务器实时收集到了指定的文件,我们就是从这个文件中把日志数据收集起来,即:webserver=>flume=>kafka

webserver日志存放文件位置
这个文件的位置,一般是我们自己设置的

我们的web日志存放的目录是在:
/home/hadoop/data/project/logs/access.log下面

[hadoop@hadoop000 logs]$ pwd/home/hadoop/data/project/logs[hadoop@hadoop000 logs]$ lsaccess.log[hadoop@hadoop000 logs]$ 

Flume

做flume,其实就是写conf文件,就面临选型的问题
source选型?channel选型?sink选型?

这里我们选择 exec source memory channel kafka sink

怎么写呢?
按照之前说的那样1234步骤

从官网中,我们可以找到我们的选型应该如何书写:
1) 配置Source
exec source

# Describe/configure the sourcea1.sources.r1.type = execa1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.loga1.sources.r1.shell = /bin/sh -c

2) 配置Channel
memory channel

a1.channels.c1.type = memory

3) 配置Sink
kafka sink
flume1.6版本可以参照http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.7.0/FlumeUserGuide.html#kafka-sink

a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSinka1.sinks.k1.brokerList = hadoop000:9092a1.sinks.k1.topic = flume_kafkaa1.sinks.k1.batchSize = 5a1.sinks.k1.requiredAcks =1

4) 把以上三个组件串起来

a1.sources.r1.channels = c1a1.sinks.k1.channel = c1

我们new一个文件叫做test3.conf
把我们自己分析的代码贴进去:

[hadoop@hadoop000 conf]$ vim test3.conf a1.sources.r1.type = execa1.sources.r1.command = tail -F /home/hadoop/data/project/logs/access.loga1.sources.r1.shell = /bin/sh -ca1.channels.c1.type = memorya1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSinka1.sinks.k1.brokerList = hadoop000:9092a1.sinks.k1.topic = flume_kafkaa1.sinks.k1.batchSize = 5a1.sinks.k1.requiredAcks =1a1.sources.r1.channels = c1a1.sinks.k1.channel = c1

这里我们先不启动,因为其中涉及到kafka的东西,必须先把kafka部署起来,,

Kafka的部署

kafka如何部署呢??
参照官网的说法,我们首先启动一个zookeeper进程,接着,才能够启动kafka的server

Step 1: Start the zookeeper

[hadoop@hadoop000 ~]$ [hadoop@hadoop000 ~]$ jps29147 Jps[hadoop@hadoop000 ~]$ zkServer.sh startJMX enabled by defaultUsing config: /home/hadoop/app/zk/bin/../conf/zoo.cfgStarting zookeeper ... STARTED[hadoop@hadoop000 ~]$ jps29172 QuorumPeerMain29189 Jps[hadoop@hadoop000 ~]$ 

Step 2: Start the server

[hadoop@hadoop000 ~]$ kafka-server-start.sh $KAFKA_HOME/config/server.properties#外开一个窗口,查看jps[hadoop@hadoop000 ~]$ jps29330 Jps29172 QuorumPeerMain29229 Kafka[hadoop@hadoop000 ~]$ 

如果,这部分不是很熟悉,可以参考http://blog.csdn.net/liuge36/article/details/78592169

Step 3: Create a topic

[hadoop@hadoop000 ~]$ kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic flume_kafkaWARNING: Due to limitations in metric names, topics with a period (‘.‘) or underscore (‘_‘) could collide. To avoid issues it is best to use either, but not both.Created topic "flume_kafka".[hadoop@hadoop000 ~]$ 

Step 4: 开启之前的agent

 ?[hadoop@hadoop000 conf]$ flume-ng agent --name a1 --conf . --conf-file ./test3.conf -Dflume.root.logger=INFO,console

Step 5: Start a consumer

kafka-console-consumer.sh --zookeeper hadoop000:2181 –topic flume-kafka

上面的第五步执行之后,就会收到刷屏的结果,哈哈哈!!

上面的消费者会一直一直的刷屏,还是很有意思的!!!
这里的消费者是把接收到的数据数据到屏幕上

后面,我们会介绍,使用SparkStreaming作为消费者实时接收数据,并且接收到的数据做简单数据清洗的开发,从随机产生的日志中筛选出我们需要的数据.....

Flume和Kafka完成实时数据的采集

原文地址:https://www.cnblogs.com/liuge36/p/9883008.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved