首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2-网站日志分析案例-日志采集:Flume-Kafka-Flume-HDFS

2-网站日志分析案例-日志采集:Flume-Kafka-Flume-HDFS

作者头像
IT从业者张某某
发布于 2022-11-12 08:34:38
发布于 2022-11-12 08:34:38
38700
代码可运行
举报
文章被收录于专栏:IT从业者张某某IT从业者张某某
运行总次数:0
代码可运行

文章目录

2-网站日志分析案例-日志采集:Flume-Kafka-Flume-HDFS

hadoop2.7.3+ kafka_2.11-2.1.0

环境安装

虚拟机安装

安装hadoop

参考:https://blog.csdn.net/m0_38139250/article/details/121155903

安装zookeeper

参考:https://blog.csdn.net/m0_38139250/article/details/121284886

安装过程

1.下载:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.7/apache-zookeeper-3.5.7-bin.tar.gz 

2.解压

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz -C /opt/apps

3.创建软连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ln -s apache-zookeeper-3.5.7-bin zookeeper

4.修改文件夹权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chown -R root:root /opt/apps/apache-zookeeper-3.5.7-bin
chmod -R 700 /opt/apps/apache-zookeeper-3.5.7-bin

5.配置环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/profile 
#添加zookeeper环境变量
export ZOOKEEPER_HOME=/opt/apps/zookeeper
export PATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/sbin:$PATH

# 生效配置文件
source /etc/profile

6.创建zk的data0目录,并修改zk的zoo.cfg配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt/apps/zookeeper/
mkdir data
touch data/myid
echo 1 > data/myid
cd conf/
cp zoo_sample.cfg zoo.cfg

vi zoo.cfg
# 修改配置文件如下:
# dataDir=/tmp/zookeeper 注释掉这句默认配置,然后添加下面的配置
dataDir=/home/hadoop/opt/app/zookeeper/data
基本命令

7.启动命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
zkServer.sh start /opt/apps/zookeeper/conf/zoo.cfg #启动zk启动状态
zkServer.sh status /opt/apps/zookeeper/conf/zoo.cfg #查看zk启动状态


zkCli.sh -server localhost:2181 # 通过客户端访问zkServer

安装flume

参考:https://blog.csdn.net/m0_38139250/article/details/121392150

安装过程

1.下载flume

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget http://archive.apache.org/dist/flume/1.7.0/apache-flume-1.7.0-bin.tar.gz

2.解压

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxf apache-flume-1.7.0-bin.tar.gz -C /opt/apps

3.添加配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt/apps/apache-flume-1.7.0-bin/conf
vi netcat2logger.conf

内容如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 6666

# Describe the sink
a1.sinks.k1.type = logger

# 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

上面的配置文件定义了一个agent的name为a1,a1的source监听6666端口,并且读取6666端口传过来的数据, a1的channel 采用内存作为缓存,a1的sink 类型为logs,具体含义可以参考官网,或是留言。

基本命令

在flume的安装目录下执行如下命令,即可使用flume采集数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ bin/flume-ng agent -n a1 -c conf -f conf/netcat2logger.conf -Dflume.root.logger=INFO,console

flume-ng agent :表示flume的启动一个agent,ng是表示这是new的版本命令 -n a1:-n 表示name ,a1表示agent的名字为a1 对应配置文件中的a1 -c conf :表示flume的配置文件目录所在位置 -f conf/netcat2logger.conf: 表示自定义的数据采集配置文件位置。 -Dflume.root.logger=INFO,console:表示我们制定flume的日志格式,并且输出到控制台。

我们再开启一个新的终端,通过telnet 或 nc命令发送socket数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
telnet 127.0.0.1 6666
或
nc 127.0.0.1 6666

,然后输入hello world,会看到反馈的信息ok。

安装kafka

安装过程

1.下载kafka安装包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://archive.apache.org/dist/kafka/2.0.0/kafka_2.11-2.0.0.tgz

2.解压kafka

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tar -zxvf kafka_2.11-2.0.0.tgz
mv kafka_2.11-2.0.0 /opt/apps
cd /opt/apps

3.配置软连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt/apps
ln -s kafka_2.11-2.0.0 kafka

4.配置环境变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vi /etc/profile 
#添加zookeeper环境变量
export KAFKA_HOME=/opt/apps/kafka
export PATH=$PATH:$KAFKA_HOME/bin

# 生效配置文件
source /etc/profile

5.修改配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd kafka/config
vi server.properties

修改内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# borker的编号,如果集群中有多个,则每个borker需设置不同的编号
broker.id=0

#broker对外提供服务入口的端口(默认9092)
listeners=PLAINTEXT://localhost:9092

#存放消息日志文件地址
log.dirs=/opt/apps/kafka/kafkaData/kafka-logs

# kafka所需zookeeper集群地址
zookeeper.connect=localhost:2181

# 添加
delete.topic.enable=true
常用命令

6.在kafka安装目录下执行启动命令

6.1启动关闭

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 启动kafka
bin/kafka-server-start.sh config/server.properties
# 后台启动
JMX_PORT=9991 kafka-server-start.sh -daemon /opt/apps/kafka/config/server.properties

# 关闭kafka
kafka-server-stop.sh

6.2topic相关

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看Kafka Topic列表
bin/kafka-topics.sh --zookeeper localhost:2181 --list
# 创建Kafka Topic列表
bin/kafka-topics.sh --zookeeper localhost:2181 --create --replication-factor 1 --partitions 1 --topic test
# 描述topic
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
# 查看Kafka Topic列表
bin/kafka-topics.sh --zookeeper localhost:2181 --list
# 增加分区数
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic test --partitions 5 

# 删除Kafka Topic
bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
# 查看 topic 指定分区 offset 的最大值或最小值 time 为 -1 时表示最大值,为 -2 时表示最小值:
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic test --time -1 --broker-list 127.0.0.1:9092 --partitions 0 

6.3生成消息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 

6.4消费消息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从头开始消费
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
# 从尾部开始取数据,必需要指定分区
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0

# 指定分区
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0

# 取指定个数
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --offset latest --partition 0 --max-messages 1 

6.5 消费者 Group

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#指定 Group
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test -group test_group --from-beginning
# 消费者 Group 列表
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list
# 查看 Group 详情
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group test_group --describe
# 删除 Group 中 Topic
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group test_group --topic test --delete
# 删除 Group
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group test_group --delete

6.6 平衡 leader

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-preferred-replica-election.sh --bootstrap-server localhost:9092

6.7自带压测工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/kafka-producer-perf-test.sh --topic test --num-records 100 --record-size 1 --throughput 100 --producer-props bootstrap.servers=localhost:9092 

案例过程

总体架构

flume配置

把日志放在指定位置

在/tmp/logs下生成文件

/tmp/logs/app-2022-01-02.log

追加数据到该文件中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for ((i=0; i<=1000; i++))
do
echo "toms" >> /tmp/logs/app-2022-01-02.log
sleep 2
done
第1个flume-把数据从linux采集到kafka中

文件名 file-flume-kafka.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /opt/apps/apache-flume-1.7.0-bin/conf
vi file-flume-kafka.conf

编辑内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#describe component
a1.sources=r1
a1.channels=c1
a1.sinks=k1
#config component source,we choose the taildir source,because it can breakpoint continuation
a1.sources.r1.type = exec
#监控文件夹下的test.log文件
a1.sources.r1.command = tail -F /tmp/logs/app-2022-01-02.log
#component bind
a1.sources.r1.channels = c1

#对于sink的配置描述 使用kafka做数据的消费
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.topic = flume_kafka
a1.sinks.k1.brokerList = localhost:9092
a1.sinks.k1.requiredAcks = 1
a1.sinks.k1.batchSize = 20
a1.sinks.k1.channel = c1


# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/flume-ng agent --name a1 --conf-file conf/file-flume-kafka.conf

kafka消费者观看数据

到kafka目录下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kafka-topics.sh --zookeeper localhost:2181 --list

kafka-console-cosumer --bootstrap-server localhost:9092 --topic flume_kafka --from-beginning
第2个flume-把数据从kafka采集到hdfs中

采集event日志:文件名 kafka-flume-hdfs.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a1.sources=r1
a1.channels=c1
a1.sinks=k1
#config source
a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.batchSize = 5000
a1.sources.r1.batchDurationMillis = 2000
a1.sources.r1.kafka.bootstrap.servers =localhost:9092
a1.sources.r1.kafka.topics=flume_kafka 
#config channel
a1.channels.c1.type = memory


#config sink
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /origin_data/gmall/log/topic_event/%Y-%m-%d
a1.sinks.k1.hdfs.filePrefix = logeventa1.sinks.k1.hdfs.rollInterval = 10
a1.sinks.k1.hdfs.rollSize = 134217728
a1.sinks.k1.hdfs.rollCount = 0
#bind component
a1.sources.r1.channels = c1
a1.sinks.k1.channel= c1

启动命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bin/flume-ng agent --name a1 --conf-file conf/kafka-flume-hdfs.conf
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
uni-app弹窗多选样式分享
分享一个uniapp弹层多选样式 *弹层依赖uniapp-popup组件 html <uni-popup :show="show" type="bottom" :custom="true" :mask-click="false"> <view class="pop"> <view class="btns"> <view class="pop-button cancel" @click="cancel()">取消</view> <view class="pop-butt
薛定喵君
2020/03/26
2.2K2
uni-app弹窗多选样式分享
【Uni-App社区小程序】011-flex布局
参考教程(阮一峰的flex教程):http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
訾博ZiBo
2025/01/06
2090
【Uni-App社区小程序】011-flex布局
【说站】css中justify-content属性是什么
2、应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。该操作发生在弹性长度以及自动边距被确定后。
很酷的站长
2022/11/24
7390
【说站】css中justify-content属性是什么
【Uni-App社区小程序】010-uni-app的css3选择器
https://uniapp.dcloud.net.cn/frame?id=%e9%80%89%e6%8b%a9%e5%99%a8
訾博ZiBo
2025/01/06
1150
【Uni-App社区小程序】010-uni-app的css3选择器
uni-app实战之社区交友APP(3)Vue.js和uni-app基础
本文主要介绍了uni-app和Vue的基础使用: 基础组件的使用,CSS选择器的类型,flex布局的常见用法; 数据渲染、条件渲染、列表渲染,class和style的动态绑定; 事件处理的绑定,属性的监听和计算属性。
cutercorley
2021/01/29
2.6K0
【Uni-App社区小程序】014-条件渲染
v-if是一个条件判断,当条件为true的时候就会渲染当前标签,也就是条件渲染的的意思;
訾博ZiBo
2025/01/06
1390
【Uni-App社区小程序】014-条件渲染
uni-app(3.flex布局)
在pages下新建页面flex-direction,并在pages.json中将flex-direction页面设为首页
玩蛇的胖纸
2021/06/24
1.8K0
6.页面绘制-帖子列表页和前端路由
在pages/shequ目录下新建页面tiezi。然后在pages.json中将tiezi配置为首页,方便观察调试。
玩蛇的胖纸
2021/07/13
5370
【Uni-App社区小程序】013-Class 与 Style 绑定
https://uniapp.dcloud.net.cn/use?id=class-%e4%b8%8e-style-%e7%bb%91%e5%ae%9a
訾博ZiBo
2025/01/06
1770
【Uni-App社区小程序】013-Class 与 Style 绑定
微信小程序----Maide List(图文列表)(flex布局实现MUI的图文列表)
1、使用flex进行布局要注意兼容性,所以采用:display: -webkit-flex;display: flex; 2、为了保证每排三个图标的两对对齐,采用:justify-content: space-between; 3、order的值的大小,决定着该子元素的位置; 4、每个子元素设置flex: 0 0 auto;否则某个子元素超出,会改变其他元素大小!
Rattenking
2021/02/01
1.2K0
微信小程序----Maide List(图文列表)(flex布局实现MUI的图文列表)
flex的兼容性处理问题
flex 很好用但是有兼容性问题。 .flex { display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebK
用户4344670
2019/11/05
1.4K0
vue消息提示组件封装
代码已上传至github github代码地址:https://github.com/Miofly/mio.git
用户10106350
2022/10/28
4180
uni-app学习
1. 学习uni-app 1.1. 概述 号称一次编写多端运行的前端框架,架构图如下 对某些不同平台的特殊功能,可以通过条件进行自动编译,也就是写两套代码,不同的环境会选择不同代码编译 1.2. 推荐
老梁
2019/09/10
1.7K0
uni-app学习
Flexbox布局指南
本文翻译来自https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Helloted
2022/06/07
1.5K0
Flexbox布局指南
微信支付成功后,页面被关闭?你少了这个步骤!
大概意思是,以后就不能用这个方式了。如果接入了“点金计划”,你的网页不会被关闭,反之会直接把网页“帮”你关了。
大风写全栈
2024/11/05
1K0
微信支付成功后,页面被关闭?你少了这个步骤!
4.页面绘制-脚本页面和个人中心页面
加入输入框按钮和承载生成小说文本的input框,同时加入一些Gap间隔槽,提升结构美观,构成了脚本页面jiaoben.vue:
玩蛇的胖纸
2021/06/29
1K0
CSS/CSS3常用Style
IE 9 及其之前的版本不支持 flex 属性。IE 10 需要前缀 -ms- 才支持该属性。
White feathe
2021/12/08
4340
CSS/CSS3常用Style
CSS3的flex布局
flex的一些属性 CSS3中引入了另一种框--flexbox,flexbox有一些block和inline不同的性质,比如: 自适应子元素(flex item,又称伸缩项目)的宽度 伸缩项目的float,clear,vertical-align属性失效 不能继承flex框,但可以依次设置 可以修改flex流的方向以及布置规则          现在就大体讲述下这个具体属性的表示含义。 设置flexbox的兼容性   将一个容器设置为flexbox(又称伸缩容器)很简单,但是却存在一些兼容性的问题,比如
欲休
2018/03/15
1.5K0
CSS3的flex布局
微信小程序----Gallery Table(图文表格)(flex布局实现MUI的图文表格)
1、使用flex进行布局要注意兼容性,所以采用:display: -webkit-flex;display: flex; 2、为了保证每排三个图标的两对对齐,采用:justify-content: space-between; 3、父元素必须设置flex-wrap: wrap;进行换行,否则会在一排展示; 4、每个子元素的宽度width: 50%;必须写出,否则会按照其占位大小分配; 5、每个子元素设置flex: 0 0 auto;否则某个子元素超出,会改变其他元素大小!
Rattenking
2021/02/01
1.4K0
微信小程序----Gallery Table(图文表格)(flex布局实现MUI的图文表格)
uni-app首页样式分享
分享一张首页样式 # 首页涉及内容 城市选择、轮播、一些列表 # 预览效果 # 代码 index.vue <template> <view class="page"> <uni-popup :
薛定喵君
2020/08/27
1K0
uni-app首页样式分享
相关推荐
uni-app弹窗多选样式分享
更多 >
LV.3
这个人很懒,什么都没有留下~
目录
  • 文章目录
  • 2-网站日志分析案例-日志采集:Flume-Kafka-Flume-HDFS
    • 环境安装
      • 虚拟机安装
      • 安装hadoop
      • 安装zookeeper
      • 安装flume
      • 安装kafka
    • 案例过程
      • 总体架构
      • flume配置
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档