貴州有網(wǎng)站的企業(yè)杭州seo推廣服務(wù)
elk的架構(gòu)
es數(shù)據(jù)庫(kù):非關(guān)系型數(shù)據(jù)庫(kù),json格式
logstash:收集日志
kibana:圖形化的工具
↓
以上三種結(jié)合起來(lái)即為日志收集系統(tǒng)
filebeat
- 作用:filebeat是一款輕量級(jí)的日志收集工具,不依賴(lài)java環(huán)境,用來(lái)替代在機(jī)器上沒(méi)有java環(huán)境的情況下進(jìn)行日志收集
filebeat啟動(dòng)收集日志,只要10m左右的內(nèi)存
filebeat.inputs:type: logenabled: truepaths:- /var/log/nginx/access.log- /var/log/nginx/error.logtags: ["nginx"]#標(biāo)簽,為了后續(xù)logstash進(jìn)行識(shí)別的fields:service_name: 192.168.233.21 nginx#設(shè)定顯示的索引名稱(chēng)log_type: nginxfrom: 192.168.233.21
type: logenabled: truepaths:- /usr/local/mysql/data/mysql_general.logtags: ["mysql"]fields:service_name: 192.168.233.21_mysqllog_type: mysqlfrom: 192.168.233.21
zookeeper + kafka
zookeeper :開(kāi)源的分布式框架協(xié)調(diào)服務(wù)
zookeeper的工作機(jī)制:
1、基于觀(guān)察者模式設(shè)計(jì)的分布式結(jié)構(gòu),負(fù)責(zé)存儲(chǔ)和管理架構(gòu)當(dāng)中的元信息,架構(gòu)當(dāng)中的應(yīng)用接受觀(guān)察者的監(jiān)控,一旦數(shù)據(jù)有變化,它會(huì)通知對(duì)應(yīng)的zookeeper,保存變化的信息
特點(diǎn):
-
1、最少要有3臺(tái)機(jī)器,一個(gè)領(lǐng)導(dǎo)者(leader),多個(gè)跟隨者(follower)組成
-
2、zookeeper要有半數(shù)以上的節(jié)點(diǎn)存活,集群就可正常工作,所以都是奇數(shù)臺(tái)部署
-
3、全局?jǐn)?shù)據(jù)一致
-
4、數(shù)據(jù)更新的原子性:要么都成功,要么都失敗
-
5、實(shí)時(shí)性
zookeeper的數(shù)據(jù)架構(gòu):
1、統(tǒng)一命名服務(wù),不是以ip來(lái)記錄,可以用域名也可以用主機(jī)名來(lái)記錄信息
2、統(tǒng)一配置管理,所有節(jié)點(diǎn)信息的配置要一致
3、統(tǒng)一集群管理,在整個(gè)分布式的環(huán)境中,必須實(shí)時(shí)的掌握每個(gè)節(jié)點(diǎn)的狀態(tài),如果狀態(tài)發(fā)生變化,要及時(shí)更新
kafka消息隊(duì)列
服務(wù)端向客戶(hù)端發(fā)送一個(gè)指令,客戶(hù)端收到指令并且通過(guò)這個(gè)指令反饋到服務(wù)端,完成一個(gè)異步方式的通信的流程
kafka消息隊(duì)列 -----------》大數(shù)據(jù)場(chǎng)景非常合適
rabbitMQ ------------》適合處理小場(chǎng)景的數(shù)據(jù)請(qǐng)求
activeMQ -------------》適合處理小場(chǎng)景的數(shù)據(jù)請(qǐng)求
消息隊(duì)列的應(yīng)用場(chǎng)景:
1、異步處理
- 用戶(hù)的短信驗(yàn)證碼,郵件通知
2、系統(tǒng)解耦
-
微服務(wù)架構(gòu)中的服務(wù)之間的通信
-
降低各個(gè)組件之間的依賴(lài)程度(耦合度),提高組件的靈活性和可維護(hù)性
3、負(fù)載均衡
- 高并發(fā)系統(tǒng)中的任務(wù)處理
4、流量控制和限流
-
根據(jù)api請(qǐng)求來(lái)進(jìn)行處理,通過(guò)控制消息的生產(chǎn)速度和消費(fèi)的處理速度來(lái)完成限流
-
端口:應(yīng)用和應(yīng)用之間通信
-
api接口:應(yīng)用程序內(nèi)部各個(gè)組件之間通信的方式
5、任務(wù)調(diào)度和定時(shí)任務(wù):
- 消息隊(duì)列可以定時(shí)的進(jìn)行任務(wù)調(diào)度,按照消費(fèi)者的計(jì)劃生成對(duì)應(yīng)的數(shù)據(jù)
6、數(shù)據(jù)同步和分發(fā):
-
日志收集和數(shù)據(jù)收集
-
遠(yuǎn)程的實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一管理
7、實(shí)時(shí)數(shù)據(jù)處理
8、備份和恢復(fù)
消息隊(duì)列的模式:
1、點(diǎn)對(duì)點(diǎn)(1對(duì)1),生產(chǎn)者生產(chǎn)消息,消費(fèi)者消費(fèi)
2、發(fā)布/訂閱模式
消息的生產(chǎn)者發(fā)布一個(gè)主題,其他的消費(fèi)者訂閱這個(gè)主題,從而實(shí)現(xiàn)一對(duì)多
主題:topic
kafka組件的名稱(chēng):
1、主題 topic,主題是kafka數(shù)據(jù)流的一個(gè)基本的單元,類(lèi)似于數(shù)據(jù)的管道,生產(chǎn)者將消息發(fā)布到主題,其他的消費(fèi)者訂閱主題,來(lái)消費(fèi)消息,主題可以被分區(qū),分區(qū)有偏移量
2、生產(chǎn)者:將消息寫(xiě)入主題和分區(qū)
3、消費(fèi)者:從主題和分區(qū)當(dāng)中消費(fèi)發(fā)布的消息,一個(gè)消費(fèi)者可以訂閱多個(gè)主題
4、分區(qū):一個(gè)主題可以被分為多個(gè)分區(qū),每個(gè)分區(qū)都是數(shù)據(jù)的有序的子集,分區(qū)越多,消費(fèi)者消費(fèi)的速度就越快,可以避免生產(chǎn)者的消費(fèi)堆積,分區(qū)當(dāng)中有偏移量,按照偏移量進(jìn)行有序存儲(chǔ),消費(fèi)者可以獨(dú)立的讀寫(xiě)每個(gè)分區(qū)的數(shù)據(jù),一般是不考慮的,只有在消息出現(xiàn)堆積的時(shí)候,會(huì)考慮擴(kuò)展分區(qū)數(shù)
kafka的消費(fèi)堆積出現(xiàn),應(yīng)該如何處理:
消費(fèi)者沒(méi)有及時(shí)處理生產(chǎn)者發(fā)布的消息,導(dǎo)致消息堆積
1、擴(kuò)展分區(qū)數(shù)
5、偏移量:消息在分區(qū)當(dāng)中的唯一標(biāo)識(shí)
test1 test2 test3 分區(qū)1
0 1 2
6、經(jīng)紀(jì)人:zookeeper,存儲(chǔ)分區(qū)的信息,kafka集群的元數(shù)據(jù)
log.retention.hours=168
(單位為小時(shí),即7天,默認(rèn)是7天)
消費(fèi)隊(duì)列當(dāng)中,數(shù)據(jù)保存的最大時(shí)間
./kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
kafka-topics.sh --create --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --replication-factor 2 --partitions 3 --topic test1
-bootstrap-server
:這里的地址一般是一個(gè)集群當(dāng)中的地址即可,默認(rèn)為包含所有
-replication-factor 2
:定義主題的副本數(shù) 2個(gè)副本,不宜超過(guò)6個(gè),影響性能,副本數(shù)必須是偶數(shù)
–partitions 3:定義分區(qū)數(shù)
./kafka-topics.sh --list --bootstrap-server 192.168.233.61:9092
:查看主題數(shù)
kafka-console-consumer.sh --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1 --from-beginning
(消費(fèi))
kafka-console-producer.sh --broker-list 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1
(生產(chǎn))
- 修改主題的分區(qū)數(shù):
kafka-topics.sh --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --alter --topic test1 --partitions 6
Topic: test1 TopicId: 2vuwpY75Qj2bk2e9EYS4Vg PartitionCount: 3 ReplicationFactor: 2 Configs:Topic: test1 Partition: 0 Leader: 1 Replicas: 1,0 Isr: 1,0
Topic: test1 Partition: 1 Leader: 0 Replicas: 0,2 Isr: 0,2
Topic: test1 Partition: 2 Leader: 2 Replicas: 2,1 Isr: 2,1
leader: 每一個(gè)分區(qū)都有一個(gè)leader
領(lǐng)導(dǎo)者負(fù)責(zé)處理分區(qū)的讀寫(xiě)操作
Replicas: 副本數(shù)0 1 2分別對(duì)應(yīng)每個(gè)leader
Isr: 表示和哪個(gè)leader進(jìn)行同步
Partition: 分區(qū)的數(shù)量
- 刪除topic:
kafka-topics.sh --delete --bootstrap-server 192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092 --topic test1
filebeat在kafka集群上創(chuàng)建主題
kafka {bootstrap_servers => "192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092"topics => "nginx_mysql"type => "nginx_kafka"codec => "json"指定數(shù)據(jù)的格式是jsonauto_offset_reset => "latest"latest:從尾部開(kāi)始earliest: 從頭部開(kāi)始decorate_events => true傳遞給es的數(shù)據(jù)額外的附加kafka的屬性數(shù)據(jù)
}
input {kafka {bootstrap_servers => "192.168.233.61:9092,192.168.233.62:9092,192.168.233.63:9092"topics => "nginx_mysql"type => "nginx_kakfa"codec => "json"auto_offset_reset => "latest"decorate_events => true
}
}
output {if "nginx-1" in [tags] {elasticsearch {hosts => ["192.168.233.10:9200","192.168.233.20:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}}if "mysql-1" in [tags] {elasticsearch {hosts => ["192.168.233.10:9200","192.168.233.20:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}}
}