(七)Kafka集群安装配置、Flume整合Kafka实现日志采集

内容简介

数据可视化课程设计上课案例项目、使用简易商城项目产生用户访问日志,使用nginx记录访问日志、使用Flume +kafka完成日志采集到HDFS、使用Spark 完成日志离线分析、使用Sqoop将分析结果抽取到MySQL,最终使用SSM后端项目完成数据可视化展示。

一、Hadoop分布式集群安装
二 、Nginx安装配置、部署前端项目
三 、MySQL安装
四 、Tomcat安装、部署后端项目
五 、Flume安装、配置、实现日志定时复制、采集
六 、Hadoop实现简单的日志分析
七 、Kafka集群安装配置、Flume整合Kafka实现日志采集
八 、Spark集群安装、配置
九 、使用Spark进行日志分析
十 、Sqoop安装配置、抽取分析结果到MySQL数据库
十 一、使用Echarts展示分析结果

Kafka集群安装配置、Flume整合Kafka实现日志采集

Kafka要使用zookeeper,所以先搭建zookeeper的集群

1、zookeeper集群安装

Master节点先安装,配置,然后使用scp复制到另外两个节点
1)下载apache-zookeeper-3.7.0-bin.tar.gz,并上传到 /mnt/tools文件夹
下载地址:https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz
2) 解压

cd /mnt/tools
tar -vxzf apache-zookeeper-3.7.0-bin.tar.gz -C /mnt/training/

3)设置环境变量

vi /etc/profile

# 添加以下代码
export ZOOKEEPER_HOME=/mnt/training/apache-zookeeper-3.7.0-bin
export PATH=$PATH:$ZOOKEEPER_HOME/bin


source /etc/profile

4)修改配置文件

cd /mnt/training/apache-zookeeper-3.7.0-bin

# 创建data文件夹
mkdir data

# 进入data文件夹 创建mypid文件
cd data

# 编辑myid文件 输入 0(三台机器的集群,master:0,slave1:1,slave2:2)
vi myid
输入 0
保存退出(:wq)

# 修改配置文件
# 复制一份自带的sample文件
cp zoo_sample.cfg zoo.cfg

# 修改以下内容

server.0=master:2888:3888
server.1=slave1:2888:3888
server.2=slave2:2888:3888
admin.serverPort=8001

PS:
1)这里的0,1,2是为了区分三台机器
2)对应的master,slave1,slave2是三台机器的机器名称
3)serverPort 这里是因为新版的zookeeper会占用8080端口,跟Tomcat端口冲突,我这里指定为8001

4)复制到另外两台电脑

scp -r /mnt/training/apache-zookeeper-3.7.0-bin root@slave1:/mnt/training/
scp -r /mnt/training/apache-zookeeper-3.7.0-bin root@slave2:/mnt/training/

5)然后按照上面步骤3设置slave1和slave2的环境变量
6)分别修改/mnt/training/apache-zookeeper-3.7.0-bin/data/myid的值
slave1的 myid修改为1
slave2的myid修改为2
7) 分别启动三台机器的zookeeper

	 zkServer.sh start

8)jps确认,三个机器都有QuorumPeerMain进程

2、Kafka集群安装

1)下载kafka_2.12-3.0.0.tgz到 /mnt/tools目录
2)解压

cd /mnt/tools
tar -vxzf kafka_2.12-3.0.0.tgz -C /mnt/training

3)修改配置文件

cd /mnt/training/kafka_2.12-3.0.0/config
vi server.properties
# 修改以下内容
broker.id=0
# 指定zookeeper集群
zookeeper.connect=master:2181,slave1:2181,slave2:2181

4)scp 复制到另外两台机器

  cd /mnt/training/
  
  scp -r kafka_2.12-3.0.0 root@slave1:/mnt/training/
  scp -r kafka_2.12-3.0.0 root@slave2:/mnt/training/

5)分别修改slave1和slave2机器上的server.properties文件。
将brokerid分别修改1,2
6)设置master机器的环境变量

	vi /etc/profile
	# 添加以下内容
	export KAFKA_HOME=/mnt/training/kafka_2.12-3.0.0/
	export PATH=$PATH:$KAFKA_HOME/bin
	
	source /etc/profile

7)分别测试启动三台机器的kafka程序

cd /mnt/training/kafka_2.12-3.0.0/bin

./kafka-server-start.sh  ../config/server.properties

但是这样启动,一旦关闭远程连接窗口,进程就会关闭,我们可以做一些改进:

  1. 将Kafka程序启动为后台进程形式运行
  2. 编写脚本统一启动启动和关闭kafka集群
    在 master机器的/mnt/training/kafka_2.12-3.0.0/bin目录下编写 kf.sh脚本
#!/bin/bash
case $1 in
"start"){
    for i in master slave1 slave2
    do
        echo " --------启动 $i Kafka-------"
        ssh $i "/mnt/training/kafka_2.12-3.0.0/bin/kafka-server-start.sh -daemon /mnt/training/kafka_2.12-3.0.0/config/server.properties"
    done
};;
"stop"){
    for i in master slave1 slave2
    do
        echo " --------停止 $i Kafka-------"
        ssh $i "/mnt/training/kafka_2.12-3.0.0/bin/kafka-server-stop.sh stop"
    done
};;
esac

使用方式:
启动:kf.sh start
停止:kf.sh stop

测试:

./kafka-topics.sh --create --bootstrap-server master:9092 --replication-factor 3 --partitions 7 --topic test1

./kafka-console-producer.sh --broker-list master:9092 --topic test

./kafka-console-consumer.sh --bootstrap-server slave1:9092  --topic test --from-beginning

3、Flume整合Kafka

flume安装设计图:

masterslave1slave2
Flume-Flume
采集日志写入kafka-从kafka读取日志写入HDFS

1)Flume生产者端配置
复制一个新的flume配置文件:

cd /mnt/training/apache-flume-1.9.0-bin/conf/
cp flume-hdfs.conf flume-kafka.conf

修改flume-kafka.conf内容:

#为各组件命名
a1.sources =r1
a1.channels =c1

#描述source
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 =/usr/local/nginx/logs/flumeLogs/access.*
a1.sources.r1.positionFile =/usr/local/nginx/logs/flumeLogs/taildir_position.json

#Kafka Channel 不需要配置Sink
a1.channels.c1.type =org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = master:9092
# kafka的topic
a1.channels.c1.kafka.topic = topic_log
a1.channels.c1.parseAsFlumeEvent = false
#绑定source 和channel 以及sink 和channel 的关系
a1.sources.r1.channels = c1

2)复制master节点的Flume到slave2节点

scp -r /mnt/training/apache-flume-1.9.0-bin root@slave2:/mnt/training

3)Flume消费者端(slave2的flume)配置

cd /mnt/training/apache-flume-1.9.0-bin/conf/
vi flume-kafka.conf

修改之后的文件内容为:

## 组件
a1.sources=r1
a1.channels=c1
a1.sinks=k1

## source1
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 =master:9092,slave1:9092,slave2:9092
a1.sources.r1.kafka.topics=topic_log

## channel1
a1.channels.c1.type = file
a1.channels.c1.checkpointDir =/mnt/flume/checkpoint/behavior1
a1.channels.c1.dataDirs = /mnt//flume/data/behavior1/
a1.channels.c1.maxFileSize = 2146435071
a1.channels.c1.capacity = 1000000
a1.channels.c1.keep-alive = 6

## sink1
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path =hdfs://master:9000/flumeLogs/%y-%m-%d/%H-%M
处理完的文件前缀
a1.sinks.k1.hdfs.filePrefix = access
sinks.k1.hdfs.round = false
a1.sinks.k1.hdfs.rollInterval = 10
a1.sinks.k1.hdfs.rollSize = 134217728
a1.sinks.k1.hdfs.rollCount = 0

## 拼装
a1.sources.r1.channels = c1
a1.sinks.k1.channel= c1

3)修改master节点的 /root/flume_start.sh文件

#!/bin/bash
/mnt/training/apache-flume-1.9.0-bin/bin/flume-ng agent -c /mnt/training/apache-flume-1.9.0-bin/conf/ -f /mnt/training/apache-flume-1.9.0-bin/conf/flume-kafka.conf -n a1 -Dflume.root.logger=INFO,console &

4)复制master节点的/root/flume_start.sh文件到 slave2目录

cd /root
scp flume_* root@slave2:~

5)分别启动master和slave2的flume

cd /root
./flume_start.sh

6)测试,进入master节点 /root下依次执行下面两个脚本完成模拟日志生成和日志复制,

./ab_test.sh
./rollingLog.sh

7)查看HDFS目录 有新的采集文件夹目录生成,文件不为空,即为成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩亮老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值