kafka+ELK+filebeat

Kafka(消息队列)

kafka是一个分布式的消息发布—订阅系统

在这里插入图片描述

1. 特性

  • 可以实时的处理大量数据
  • 低延迟,高并发

2. 组件

  • 话题(Topic):是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名。(每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的)。
  • 生产者(Producer):是能够发布消息到话题的任何对象(发布消息到 kafka 集群的终端或服务).
  • 服务代理(Broker):已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群。
  • 消费者(Consumer):可以订阅一个或多个话题,并从- Broker拉数据,从而消费这些已发布的消息。
  • partition(区):partition 是物理上的概念,每个 topic 包含一个或多个 partition。每一个topic将被分为多个partition(区)。

在这里插入图片描述

3.kafka集群部署

1). 安装Jdk,部署java环境.

[root@up2 /]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@up2 /]# mv /usr/local/jdk* /usr/local/java
[root@up2 /]# cat >> /etc/profile << EOF
> JAVA_HOME=/usr/local/java
> PATH=\$JAVA_HOME/bin:\$PATH
> export JAVA_HOME PATH
> EOF
[root@up2 /]# source /etc/profile
[root@up2 /]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

2). 部署kafka.(依赖->zookeeper)

kafka的拓扑结构图

在这里插入图片描述

[root@up2 /]# tar zxvf kafka_2.11-2.1.0.tgz -C /usr/local/

=======1. 将不以开头的行替换为\#开头,也就是注释所有行==============
[root@up2 kafka]# sed -i 's/^[^#]/#&/' config/zookeeper.properties 

=====================2. 修改kafka配置文件======================
[root@up2 kafka]# vim config/zookeeper.properties
	dataDir=/opt/data/zookeeper/data 
	dataLogDir=/opt/data/zookeeper/logs
	##kafka的客户端访问端口
	clientPort=2181 
	tickTime=2000 
	initLimit=20 
	syncLimit=10 
	##kafka集群的IP:port,2888为集群服务间通信的端口,3888是master挂了后通信的端口
	server.1=10.30.161.196:2888:3888 
	server.2=10.30.161.14:2888:3888 

===============3. 创建ZK的数据存放目录和日志目录================
[root@up2 kafka]# mkdir -p /opt/data/zookeeper/{data,logs}
 
======4.创建myid文件,集群各服务器的IP要独立区分开,不能一致=======
[root@up2 kafka]# echo 1 > /opt/data/zookeeper/data/myid 

======================5. 配置kafka=========================
[root@up2 kafka]# sed -i 's/^[^#]/#&/' /usr/local/kafka/config/server.properties
[root@up2 kafka]# vim  /usr/local/kafka/config/server.properties
	##服务器的在集群中的ID标识,同一台服务器与myid相同无所谓,但是要区别于别的SERVER
	broker.id=1  
	##本台服务器本身的IP
	listeners=PLAINTEXT://10.30.161.196:9092 
	num.network.threads=3
	num.io.threads=8
	socket.send.buffer.bytes=102400
	socket.receive.buffer.bytes=102400
	##防止ONM内存溢出
	socket.request.max.bytes=104857600 
	log.dirs=/opt/data/kafka/logs
	num.partitions=6     
	num.recovery.threads.per.data.dir=1
	offsets.topic.replication.factor=2
	transaction.state.log.replication.factor=1
	transaction.state.log.min.isr=1
	log.retention.hours=168    
	log.segment.bytes=536870912
	log.retention.check.interval.ms=300000
	##连接ZK的所有主机地址,集群中多台服务器用逗号隔开
	zookeeper.connect=10.30.161.196:2181,10.30.161.14:2181
	zookeeper.connection.timeout.ms=6000
	group.initial.rebalance.delay.ms=0
##创建kafka的日志目录
[root@up2 kafka]# mkdir -p /opt/data/kafka/logs
[root@up2 kafka]# cd /usr/local/kafka

====================多节点依次执行,启动===================
[root@up2 kafka]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties &

==================测试 若是输出服务信息即部署完================
[root@up2 kafka]# yum -y install nmap-ncat
[root@up2 local]# echo conf | nc 10.30.161.196 2181
clientPort=2181
dataDir=/opt/data/zookeeper/data/version-2
dataLogDir=/opt/data/zookeeper/logs/version-2
....
##查看状态
[root@up2 local]# echo stat | nc 10.30.161.14 2181
Zookeeper version: 3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 00:39 GMT
Clients:
 /10.30.161.196:42874[0](queued=0,recved=1,sent=0)
....
======创建topic=====
[root@up2 kafka]# bin/kafka-topics.sh --create --zookeeper 10.30.161.196:2181 --replication-factor 1 --partitions 1 --topic sihye
======查询topic=====
[root@up2 kafka]# bin/kafka-topics.sh --zookeeper 10.30.161.14:2181 --list   
sihye
jiajia
======作为product选择指定的topic发送信息=====
[root@up2 kafka]# bin/kafka-console-producer.sh --broker-list 172.17.0.4:9092 --topic testtopic  
======作为cusumer接收指定的topic信息=====
[root@up2 kafka]# bin/kafka-console-consumer.sh --bootstrap-server  10.30.161.196:9092 --topic jiajia --from-beginning
Hello Woeld
dd
ni shi xiao zhu 
hai zhen shi ne 

3). 部署filebeat.(业务环境)

在这里插入图片描述

a. 部署logstash服务器
  • [ 环境部署在此不再描述 ]
  • 在创建的conf.d下创建编辑logstash启动的配置文件kafka.conf

input {
	kafka {	
		    type => "kafka-logs"
        	group_id => "logstash"
        	auto_offset_reset => "earliest"
        	##在kafka中创建的topic名
        	topics => "kafka_run_log"
        	consumer_threads => 5
	        decorate_events => true
	        ##所有的kafka集群IP:port
  		    bootstrap_servers => "10.30.161.196:9092,10.30.161.14:9092" 
    }
}
output {
        elasticsearch {
           ## ES集群的IP和端口,因此资源有限,此次只部署了一台作为ES
           hosts => ["10.30.161.254:9200"]
           ## 创建的索引名称
           index => "kafka-run-log-%{+YYYY.MM.dd}"    
    }
}

b. 部署filebeat(新机器)
  • java环境(jdk)
  • 解压包
[root@up2 /]# tar xf filebeat-6.5.4-linux-x86_64.tar.gz -C /usr/local
[root@up2 local]# mv filebeat-6.5.4-linux-x86_64/ filebeat
  • 修改配置文件(只修改input和output部分)
    查看非注释行: [root@up2 filebeat]# grep -Evn "^$|#" filebeat.yml
##修改完成的最终行
15:filebeat.inputs:
21:- type: log
24:  enabled: true
27:  paths:
28:    - /var/log/yum.log
68:filebeat.config.modules:
70:  path: ${path.config}/modules.d/*.yml
...
##将数据利用filebeat的代理传给kafka集群,kafka集群利用logstash传给es集群
148:output.kafka:
150:  hosts: ["10.30.161.196:9092","10.30.161.14:9092"]
151:  enabled: true
152:  topic: 'kafka_run_log'
c. 启动(先启动Logstash机器, 再启动filebeat捕获数据)

☝️目的: 确保所有数据都能被接收到.以及服务能够正常启动

##启动logstash
[root@vm-1 conf.d]# /usr/local/logstash/bin/logstash -f /usr/local/logstash/conf.d/kafka.conf &

##启动filebeat
[root@up2 filebeat]# ./filebeat -c filebeat.yml 

?完成,在kibana中创建可视化图表

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值