貴州有網(wǎng)站的企業(yè)杭州seo推廣服務(wù)
elk的架構(gòu)
es數(shù)據(jù)庫:非關(guān)系型數(shù)據(jù)庫,json格式
logstash:收集日志
kibana:圖形化的工具
↓
以上三種結(jié)合起來即為日志收集系統(tǒng)
filebeat
- 作用:filebeat是一款輕量級的日志收集工具,不依賴java環(huán)境,用來替代在機(jī)器上沒有java環(huán)境的情況下進(jìn)行日志收集
filebeat啟動收集日志,只要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)行識別的fields:service_name: 192.168.233.21 nginx#設(shè)定顯示的索引名稱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 :開源的分布式框架協(xié)調(diào)服務(wù)
zookeeper的工作機(jī)制:
1、基于觀察者模式設(shè)計(jì)的分布式結(jié)構(gòu),負(fù)責(zé)存儲和管理架構(gòu)當(dāng)中的元信息,架構(gòu)當(dāng)中的應(yīng)用接受觀察者的監(jiān)控,一旦數(shù)據(jù)有變化,它會通知對應(yīng)的zookeeper,保存變化的信息
特點(diǎn):
-
1、最少要有3臺機(jī)器,一個領(lǐng)導(dǎo)者(leader),多個跟隨者(follower)組成
-
2、zookeeper要有半數(shù)以上的節(jié)點(diǎn)存活,集群就可正常工作,所以都是奇數(shù)臺部署
-
3、全局?jǐn)?shù)據(jù)一致
-
4、數(shù)據(jù)更新的原子性:要么都成功,要么都失敗
-
5、實(shí)時性
zookeeper的數(shù)據(jù)架構(gòu):
1、統(tǒng)一命名服務(wù),不是以ip來記錄,可以用域名也可以用主機(jī)名來記錄信息
2、統(tǒng)一配置管理,所有節(jié)點(diǎn)信息的配置要一致
3、統(tǒng)一集群管理,在整個分布式的環(huán)境中,必須實(shí)時的掌握每個節(jié)點(diǎn)的狀態(tài),如果狀態(tài)發(fā)生變化,要及時更新
kafka消息隊(duì)列
服務(wù)端向客戶端發(fā)送一個指令,客戶端收到指令并且通過這個指令反饋到服務(wù)端,完成一個異步方式的通信的流程
kafka消息隊(duì)列 -----------》大數(shù)據(jù)場景非常合適
rabbitMQ ------------》適合處理小場景的數(shù)據(jù)請求
activeMQ -------------》適合處理小場景的數(shù)據(jù)請求
消息隊(duì)列的應(yīng)用場景:
1、異步處理
- 用戶的短信驗(yàn)證碼,郵件通知
2、系統(tǒng)解耦
-
微服務(wù)架構(gòu)中的服務(wù)之間的通信
-
降低各個組件之間的依賴程度(耦合度),提高組件的靈活性和可維護(hù)性
3、負(fù)載均衡
- 高并發(fā)系統(tǒng)中的任務(wù)處理
4、流量控制和限流
-
根據(jù)api請求來進(jìn)行處理,通過控制消息的生產(chǎn)速度和消費(fèi)的處理速度來完成限流
-
端口:應(yīng)用和應(yīng)用之間通信
-
api接口:應(yīng)用程序內(nèi)部各個組件之間通信的方式
5、任務(wù)調(diào)度和定時任務(wù):
- 消息隊(duì)列可以定時的進(jìn)行任務(wù)調(diào)度,按照消費(fèi)者的計(jì)劃生成對應(yīng)的數(shù)據(jù)
6、數(shù)據(jù)同步和分發(fā):
-
日志收集和數(shù)據(jù)收集
-
遠(yuǎn)程的實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一管理
7、實(shí)時數(shù)據(jù)處理
8、備份和恢復(fù)
消息隊(duì)列的模式:
1、點(diǎn)對點(diǎn)(1對1),生產(chǎn)者生產(chǎn)消息,消費(fèi)者消費(fèi)
2、發(fā)布/訂閱模式
消息的生產(chǎn)者發(fā)布一個主題,其他的消費(fèi)者訂閱這個主題,從而實(shí)現(xiàn)一對多
主題:topic
kafka組件的名稱:
1、主題 topic,主題是kafka數(shù)據(jù)流的一個基本的單元,類似于數(shù)據(jù)的管道,生產(chǎn)者將消息發(fā)布到主題,其他的消費(fèi)者訂閱主題,來消費(fèi)消息,主題可以被分區(qū),分區(qū)有偏移量
2、生產(chǎn)者:將消息寫入主題和分區(qū)
3、消費(fèi)者:從主題和分區(qū)當(dāng)中消費(fèi)發(fā)布的消息,一個消費(fèi)者可以訂閱多個主題
4、分區(qū):一個主題可以被分為多個分區(qū),每個分區(qū)都是數(shù)據(jù)的有序的子集,分區(qū)越多,消費(fèi)者消費(fèi)的速度就越快,可以避免生產(chǎn)者的消費(fèi)堆積,分區(qū)當(dāng)中有偏移量,按照偏移量進(jìn)行有序存儲,消費(fèi)者可以獨(dú)立的讀寫每個分區(qū)的數(shù)據(jù),一般是不考慮的,只有在消息出現(xiàn)堆積的時候,會考慮擴(kuò)展分區(qū)數(shù)
kafka的消費(fèi)堆積出現(xiàn),應(yīng)該如何處理:
消費(fèi)者沒有及時處理生產(chǎn)者發(fā)布的消息,導(dǎo)致消息堆積
1、擴(kuò)展分區(qū)數(shù)
5、偏移量:消息在分區(qū)當(dāng)中的唯一標(biāo)識
test1 test2 test3 分區(qū)1
0 1 2
6、經(jīng)紀(jì)人:zookeeper,存儲分區(qū)的信息,kafka集群的元數(shù)據(jù)
log.retention.hours=168
(單位為小時,即7天,默認(rèn)是7天)
消費(fèi)隊(duì)列當(dāng)中,數(shù)據(jù)保存的最大時間
./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
:這里的地址一般是一個集群當(dāng)中的地址即可,默認(rèn)為包含所有
-replication-factor 2
:定義主題的副本數(shù) 2個副本,不宜超過6個,影響性能,副本數(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: 每一個分區(qū)都有一個leader
領(lǐng)導(dǎo)者負(fù)責(zé)處理分區(qū)的讀寫操作
Replicas: 副本數(shù)0 1 2分別對應(yīng)每個leader
Isr: 表示和哪個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:從尾部開始earliest: 從頭部開始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}"}}
}