版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
云原生消息隊(duì)列Apache ApacheRocketMQ的ServiceMesh開源之 阿里的RocketMQ如何讓雙十一峰值之下0故 云原生時(shí)代RocketMQ運(yùn)維管控的利器-RocketMQ 基于RocketMQPrometheusExporter打造定制化DevOps平 當(dāng)RocketMQ遇上Serverless,會(huì)碰撞出怎樣的火 PCRocketMQ2015CloudNativeSLADevOps先說結(jié)論,我們認(rèn)為云原生消息服務(wù)是云原生的通信基礎(chǔ)設(shè)施。2015年成立的CNCF基金會(huì)大范圍推廣了云原生的技術(shù)理念,并提供了一套完整的實(shí)踐技術(shù)工具集,CNCF云原生全景圖,其中消息中間件云原生應(yīng)用將對(duì)消息這種云原生BaaS服務(wù)有更高的SLA要求,應(yīng)用將假設(shè)其依賴的研發(fā)、運(yùn)維成本。云原生時(shí)代的消息服務(wù)借助Serverless等彈性技術(shù),無需預(yù)先IoTIDC,都能以跟公有云同樣易用的方式接入消息服務(wù),且能輕易地滿足IDC、跨云等互通需求,真正成為應(yīng)用層的通信基礎(chǔ)設(shè)施。RocketMQ,Kafka,微消息隊(duì)列等。APISLA、低成本、易用性、多樣性和標(biāo)準(zhǔn)化幾個(gè)方KubernetesKubernetes項(xiàng)目當(dāng)下絕對(duì)是大紅大紫,在容器編排和應(yīng)用托管領(lǐng)域絕對(duì)的事實(shí)標(biāo)云原生消息Kubernetes化是指通過自定義CRD資源將有狀態(tài)的消息集群托管至KubernetesK8S提供的部署、升級(jí)、自愈等能力提高運(yùn)維效率,同K8SRocketMQCRDOperatorRocketMQK8SK8S的能力低成本運(yùn)維RocketMQPrometheusRocketMQKubernetesKubernetes同時(shí),在商業(yè)化環(huán)境,我們也正在依賴Kubeone將消息隊(duì)列系列產(chǎn)品完成KubernetesMQ實(shí)例中,可以根2WTPS10WTPSLoadMQ物理資源;在集群縮容的處理上,會(huì)比較麻MQPV代表了一個(gè)CommitLog,我ASIPVRocketMQCommitLogMesh目前阿里云消息隊(duì)列RocketMQ是國(guó)內(nèi)第二個(gè)成功進(jìn)入ServiceMesh官方社區(qū)EnvoyEnvoyon-demandCDSMeshApacheRocketMQ的ServiceMesh開源之阿里云消息產(chǎn)品矩陣包含消息隊(duì)列RocketMQ、Kafka、AMQP、微消息隊(duì)列MQTT、MNSEventBridge,涵蓋互聯(lián)網(wǎng)、大數(shù)據(jù)、移動(dòng)互聯(lián)網(wǎng)、RocketMQ:阿里巴巴自主研發(fā)及雙11交易核心鏈路消息產(chǎn)品,阿里云Kafka100%融合Kafka開源社區(qū),大數(shù)據(jù)應(yīng)用微消息隊(duì)列MQTT:基于MQTT標(biāo)準(zhǔn)協(xié)議自研,拓展消息產(chǎn)品的領(lǐng)域與邊界,延AMQP100AMQPRabbitMQ消息服務(wù)MNS:聚焦云產(chǎn)品生態(tài)集成&消息通知服務(wù)(HTTPEndpoint、FunctionCompute、事件通知、移動(dòng)推送等)。事件總線EventBridge:作為我們下一代的消息產(chǎn)品形態(tài),原生支持CloudEvents標(biāo)準(zhǔn),提供中心化事件服務(wù)能力,加速云原生生態(tài)集成,EDA在阿里云消息商業(yè)化生態(tài)中,消息隊(duì)列產(chǎn)品線已經(jīng)支持11BU,30+云產(chǎn)品或者解RocketMQKnative事件源,PrometheusExporter,K8SOperatorDubbo、SpringCloudOpenWhiskConnectorSinkSourceELK、Flume、Flink、Hadoop在消息領(lǐng)域,無論是接口還是協(xié)議,社區(qū)一直有很多事實(shí)上的“標(biāo)準(zhǔn)”,比如Kafka提供的API和協(xié)議,JMSAPI,CloudEvents規(guī)范,MQTT中的協(xié)議和模型,AMQP的協(xié)議和模型等,阿里云消息隊(duì)列產(chǎn)品線對(duì)這些事實(shí)標(biāo)準(zhǔn)都提供了相應(yīng)的接入方事實(shí)上的“標(biāo)準(zhǔn)”如果太多,其實(shí)就沒有標(biāo)準(zhǔn),開源方面一直在推動(dòng)自建標(biāo)準(zhǔn)OpenMessagingOMS將提供六大核心特性:多領(lǐng)域、流、平臺(tái)無關(guān)、標(biāo)準(zhǔn)的Benchmark,面向云,線路層可插拔。目前,國(guó)內(nèi)有很多云提供商都接入了OMS標(biāo)準(zhǔn)。接入&消費(fèi)&Pub/Sub模式,廣播/集群消費(fèi)模式,消費(fèi)過TagSQL1210SLA99.9589。高性能:雙11消息收發(fā)TPS3低延遲:在雙1199.996%在毫秒級(jí)響應(yīng);消息發(fā)布平均響應(yīng)時(shí)間不超過3毫秒。RocketMQRocketMQRocketMQushul以及op也就是RocketMQ開發(fā)者熟知的NameServer,以簡(jiǎn)單可靠的方式提供集群管理、元數(shù)據(jù)管理、Topic路由和發(fā)現(xiàn)等功能,節(jié)點(diǎn)無狀態(tài),最終一致的語義確保NameServer日志與索引分離:整個(gè)存儲(chǔ)層將消息以AppendOnly的方式集中式存儲(chǔ)在CommitLogMaster-SlaveRaftDlegerRTOCodeReview、單元測(cè)試、集成測(cè)試、性能測(cè)試以及容災(zāi)50JVM在消息產(chǎn)品矩陣小節(jié)中提到,EventBridge是作為我們下一代的消息產(chǎn)品形態(tài),該EventBridgeEventBridgeEventBridgeSaaS事件源:事件源可以是阿里云服務(wù),比如對(duì)象存儲(chǔ)、ECS、數(shù)據(jù)庫等,也可以是用aaS資源管理:EventBridgeSchema事件目標(biāo):事件最終投遞的目標(biāo)服務(wù)包羅萬象,既可以觸發(fā)一個(gè)Serverless的EventBridge:EDAEventBridgeEDASchemaEDAEventBridgeCQRSEventSouringIoTEventStreamingAPIRequestEventAPIsRESTAPIsEDAGartnerEDAEDACentralizedEDAEDAEDAAdvanced:EDAAI,以及APIEDA阿里云消息團(tuán)隊(duì)在EDA ApacheRocketMQServiceMeshApacheRocketMQApacheRocketMQ的ServiceMesh開源之 ApacheRocketMQServiceMesh|19年底開始,支持ApacheRocketMQ的NetworkFilter歷時(shí)4個(gè)月的CodeReview(PullRequest),于本月正式合入CNCFEnvoy官方社區(qū)(RocketMQProxyFilter官方文檔),這使得RocketMQ成為繼Dubbo之后,國(guó)內(nèi)第二個(gè)成功進(jìn)入ServiceMesh官方社區(qū)的中間件產(chǎn)品。導(dǎo)讀:自19年底開始,支持ApacheRocketMQ的NetworkFilter歷時(shí)4個(gè)月的CodeReview(PullRequest),于本月正式合入CNCFEnvoy官方社區(qū)(RocketMQProxyFilter官方文檔),這使得RocketMQ成為繼Dubbo之后,國(guó)內(nèi)第二個(gè)成功進(jìn)入ServiceMesh官方社區(qū)的中間件產(chǎn)品。一、ServiceMesh簡(jiǎn)述一下ServiceMesh下RocketMQPilot獲取到Topic的路由信息并通過xDS的形式下發(fā)給數(shù)據(jù)平面/Envoy,Envoy會(huì)代理SDK向Broker/Nameserver發(fā)送的所有的網(wǎng)絡(luò)請(qǐng)求;發(fā)送時(shí),Envoyrequestcode判斷出請(qǐng)求為發(fā)送,并根據(jù)topicrequestcode選出對(duì)應(yīng)的CDSEnvoyBroker并發(fā)送,這里會(huì)使用數(shù)據(jù)平面的subset機(jī)制來確保選出的Broker是可寫的;消費(fèi)時(shí),Envoyrequestcodetopicrequestcode選出對(duì)應(yīng)的CDS,然后和發(fā)送一樣選出對(duì)應(yīng)的Broker進(jìn)行消費(fèi)(與發(fā)送類似,這里也會(huì)使用subset來確保選出的Broker是可讀的),并記錄相應(yīng)的元數(shù)據(jù),當(dāng)消息消費(fèi)SDK發(fā)出ACK請(qǐng)求時(shí)會(huì)取出相應(yīng)的元數(shù)據(jù)信息進(jìn)行比對(duì),再通過路由來準(zhǔn)確將ACK請(qǐng)求發(fā)往上次消費(fèi)時(shí)所使用的Broker。二、RocketMQMeshServiceMesh常常被稱為下一代微服務(wù),這一方面揭示了在早期Mesh化浪潮中微服務(wù)是絕對(duì)的主力軍,另一方面,微服務(wù)的Mesh化也相對(duì)更加便利,而隨著消息隊(duì)ServiceMesh各個(gè)產(chǎn)品在這個(gè)過程中也會(huì)有各自的問題亟需解決,RocketMQ也沒有例外。RocketMQ的網(wǎng)絡(luò)模型比RPC更加復(fù)雜,是一套有狀態(tài)的網(wǎng)絡(luò)交互,這主要體現(xiàn)RocketMQ目前的網(wǎng)絡(luò)調(diào)用高度依賴于有狀態(tài)的原生SDK對(duì)于前者,使得現(xiàn)有的SDK完全無法使用分區(qū)順序消息,因?yàn)榘l(fā)送請(qǐng)求和消費(fèi)請(qǐng)求RPC的內(nèi)容中并不包含IP/(BrokerName+BrokerId)等信息,導(dǎo)致使用了MeshSDKQueueBrokerBroker身在Mesh化的過程中被抹除了。當(dāng)然這一點(diǎn),對(duì)于只有一臺(tái)Broker的全局順序消息而言是不存在的,因?yàn)閿?shù)據(jù)平面在負(fù)載均衡的時(shí)候并沒有其他Broker的選擇,因此在對(duì)于后者,RocketMQ的Pull/PushConsumer中Queue是負(fù)載均衡的基本單Consumer中其實(shí)是要感知與自己處于同一ConsumerGroup下消費(fèi)同一Topic的Consumer數(shù)目的,每個(gè)Consumer根據(jù)自己的位置來選擇相應(yīng)的Queue來進(jìn)行消費(fèi),這些Queue在一個(gè)Topic-ConsumerGroup映射下是被每個(gè)Consumer法做到Queue粒度,這使得RocketMQ中的負(fù)載均衡策略已經(jīng)不再適用于ServiceMesh體系下。此時(shí)我們將目光投向了RocketMQ為支持HTTP而開發(fā)的Pop消費(fèi)接口,在Pop接口下,每個(gè)Queue可以不再是被當(dāng)前Topic-ConsumerGroup的Consumer獨(dú)占的,不同的消費(fèi)者可以同時(shí)消費(fèi)一個(gè)Queue里的數(shù)據(jù),這為我們使用Envoy中2ServiceMeshPopConsumerEnvoy會(huì)忽略掉SDK傳來的Queue信息。Topic在集團(tuán)內(nèi)部,NameserverGBTopicMesh們將這部分抽象成CDS,這使得對(duì)于無法預(yù)先知道應(yīng)用所使用的Topic的情形而言,控制平面只能全量推送CDS,這無疑會(huì)給控制平面帶來巨大的穩(wěn)定性壓力。在Envoy更早期,是完全的全量推送,在數(shù)據(jù)平面剛啟動(dòng)時(shí),控制平面會(huì)下發(fā)全量的xDS信息,之后控制平面則可以主動(dòng)控制數(shù)據(jù)的下發(fā)頻率,但是無疑下發(fā)的數(shù)據(jù)依舊是全量的。后續(xù)Envoy支持了部分的deltaxDSAPI,即可以下發(fā)增量的xDS據(jù)給數(shù)據(jù)平面,這當(dāng)然使得對(duì)于已有的sidecar,新下發(fā)的數(shù)據(jù)量大大降低,但是sidecarxDSRocketMQCDS都放在內(nèi)存中,這是我們不可接受的。于是我們希望能夠有on-demandCDS的方式使得sidecar可以僅僅獲取自己想要的CDS。而此時(shí)正好Envoy支持了deltaCDS,并僅支持了這一種deltaxDSdeltaCDS的xDS協(xié)議本身已經(jīng)提供了on-demandCDS的能力,但是無論是控制平面還是數(shù)據(jù)平面并沒有暴露這種能力,于是在這里對(duì)Envoy進(jìn)行了修改并暴露了相關(guān)接口使得數(shù)據(jù)平面可以主動(dòng)向控制平面發(fā)起對(duì)指定CDS的請(qǐng)求,并基于deltagRPC的方式實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的控制平面。Envoy會(huì)主動(dòng)發(fā)起對(duì)指定CDS資源的請(qǐng)求,并提供了相應(yīng)的回調(diào)接口供資源返回時(shí)進(jìn)對(duì)于on-demandCDS的敘述對(duì)應(yīng)到RocketMQ的流程中是這樣的,當(dāng)GetTopicRoute或者SendMessage的請(qǐng)求到達(dá)Envoy時(shí),Envoy會(huì)hang住這個(gè)流程并發(fā)起向控制平面中相應(yīng)CDS資源的請(qǐng)求并直到資源返回后重啟這個(gè)流程。關(guān)于on-demandCDS的修改,之前還向社區(qū)發(fā)起了PullRequest,現(xiàn)在看來當(dāng)時(shí)的想法還是太不成熟了。原因是我們這樣的做法完全忽略了RDS的存在,而將CDS和Topic實(shí)現(xiàn)了強(qiáng)綁定,甚至名稱也一模一樣,關(guān)于這一點(diǎn),社區(qū)的SeniorMaintainer@htuchCDS資源名可Topic名,更重要的是社區(qū)賦予CDS本身的定義是脫離于業(yè)務(wù)的,而我們這樣的做法過于tricky,是與社區(qū)的初衷背道而馳的。因此我們就需要加上RDS來進(jìn)行抽象,RDS通過topic和其他信息來定位到具體所需要的CDSCDSCDSon-demandCDSname:default_route-exact:mesh-name:codeexact_match:105cluster:foo-v145-acme-tau-beta-上面可以看到對(duì)于topic名為mesh的請(qǐng)求會(huì)被RDS路由到foo-v145-acme-tau-beta-lambda這個(gè)CDS上,事先我們只知道topic名,無法知道被匹配到的CDS如今站在更高的視角,發(fā)現(xiàn)這個(gè)錯(cuò)誤很簡(jiǎn)單,但是其實(shí)這個(gè)問題我們直到后續(xù)codereview時(shí)才及時(shí)糾正,確實(shí)可以更早就做得更好。不過從目前社區(qū)的動(dòng)態(tài)來看,on-demandxDS或許已經(jīng)是一個(gè)roadmap,起碼目前xDS已經(jīng)全系支持delta,VHDS更是首度支持了on-demand的特性。五、Mesh為RocketMQAservicemeshisadedicatedinfrastructurelayerforhandlingservice-to-servicecommunication.It’sresponsibleforthereliabledeliveryofrequeststhroughthecomplextopologyofservicesthatcompriseamodern,cloudnativeapplication.Inpractice,theservicemeshistypicallyimplementedasanarrayoflightweightnetworkproxiesthataredeployedalongsideapplicationcode,withouttheapplicationneedingtobeaware.這是ServiceMesh這個(gè)詞的創(chuàng)造者WilliamMorgan對(duì)其做出的定義,概括一RocketMQ中包括服務(wù)發(fā)現(xiàn)、負(fù)載均衡、流量監(jiān)控等職責(zé),使得調(diào)用當(dāng)然目前的RocketMQFilter為了保證兼容性做出了很多讓步,比如為了保證SDK可以成功獲取到路由,將路由信息聚合包裝成了TopicRouteData返回給SDK,但是在理想情況下,SDK本身已經(jīng)不需要關(guān)心路由了,純?yōu)镸esh情景設(shè)計(jì)的SDK更加精簡(jiǎn)的,不再會(huì)有消費(fèi)側(cè)Rebalance,發(fā)送和消費(fèi)的服務(wù)發(fā)現(xiàn),甚至在未來像消息體壓縮和schema校驗(yàn)這些功能SDK和Broker/消費(fèi),發(fā)送/消費(fèi)完就走或許才是RocketMQMesh的終極形態(tài)。六、What'sNextRocketMQFilterPop消費(fèi)能力,但是如果想要具PullEnvoyProxy只接收Pop類型的消費(fèi)請(qǐng)求,之后會(huì)考慮支PullEnvoyPullPop支持全局順序消息:目前在Mesh體系下,雖然全局順序消息的路由不存在問題,但是如果多個(gè)Consumer同時(shí)消費(fèi)全局順序消息,其中一個(gè)消費(fèi)者突然下線導(dǎo)致消息沒有ACKEnvoy中進(jìn)BrokerProxyBroker起初,RocketMQFilterPullRequest就包含了當(dāng)前幾乎全部的功能,導(dǎo)8KPR,感謝@CodeReview另外,Envoy社區(qū)的CI實(shí)在太嚴(yán)格了,嚴(yán)格要求97%以上的單測(cè)行覆蓋率,Bazel源碼級(jí)依賴,純靜態(tài)鏈接,本身無cache編譯24邏輯核心CPU和load均打滿至少半個(gè)小時(shí)才能編完,社區(qū)的各種CI跑完一次則少說兩三個(gè)小時(shí),多則六七個(gè)小時(shí),并對(duì)新提交的代碼有著極其嚴(yán)苛的語法和format要求,這使得在PR中修改一小部分代碼就可能帶來大量的單測(cè)變動(dòng)和format需求,不過好的是單測(cè)可以很方便地幫助我們發(fā)現(xiàn)一些內(nèi)存case??陀^上來說,官方社區(qū)以這么高的標(biāo)準(zhǔn)來要求現(xiàn)并解決了不少自身的問題,總得來說還是有一定必要的,畢竟對(duì)于C++代碼而言,最后,RocketMQFilter@OfficialdocsforRocketMQPullrequestofRocketMQOn-demandCDSpullrequestforFirstversionofRocketMQfilter's阿里的RocketMQ阿里的RocketMQ如何讓雙十一峰值之下0故 阿里的RocketMQ0阿里的RocketMQ如何讓雙十一峰值之下0故障PCRocketMQ2020年雙十一交易峰值達(dá)到58.3WRocketMQ繼續(xù)數(shù)年0間件RocketMQ發(fā)生了以下幾個(gè)方面的變化:Kubernetes性能優(yōu)化。消息過濾優(yōu)化交易集群性能提升30Kubernetes作為目前云原生化技術(shù)棧實(shí)踐中重要的一環(huán),其生態(tài)已經(jīng)逐步建立并RoketMQ20162016上,就是各應(yīng)用自己的定制化了。中間件部署平臺(tái)的開發(fā)也不完全了解集團(tuán)內(nèi)RocketMQ的部署過程是怎樣的。因此在2016年的時(shí)候,部署平臺(tái)需要我們?nèi)ビH自實(shí)現(xiàn)消息中間件的應(yīng)用發(fā)布代Kubernetes來實(shí)現(xiàn)消息中間件自己的operator。我們同樣希望利用云化后云整體的實(shí)現(xiàn)方案如上圖所示,通過自定義的CRD對(duì)消息中間件的業(yè)務(wù)模型進(jìn)行抽Kubernetes平臺(tái)上。該平臺(tái)負(fù)責(zé)所有的容器生產(chǎn)、初始化以及集團(tuán)內(nèi)一切線上環(huán)境的基線部署,屏蔽掉IaaS層的所有細(xì)節(jié)。Operator承擔(dān)了所有的新建集群、擴(kuò)容、縮容、遷移的全部邏輯,包括每個(gè)pod對(duì)應(yīng)的brokerName自動(dòng)生成、配置文件,根據(jù)集群不同功能而配置的各種開關(guān),元operator中。當(dāng)我們有需求重新修改各種運(yùn)維邏輯的時(shí)候,也再也不用去依賴通用的具體實(shí)現(xiàn),修改自己的operator即可。replicaKubernetes嚴(yán)格的順序要求,這種部署模式在Kubernetes的體系下是并不提倡的。若依然采用以Kubernetes的運(yùn)維理念。云化后的ECS使用的是高速云盤,底層將對(duì)數(shù)據(jù)做了多備份,因此數(shù)據(jù)的可用性MQ同步刷盤,因此,此時(shí)就可以把之前Kubernetes的技術(shù),可實(shí)現(xiàn)任何實(shí)例掛掉(包含宕機(jī)只有broker的概念,再無主備之分。上圖是Kubernetes上線后雙十一大促當(dāng)天的發(fā)送RT統(tǒng)計(jì),可見大促期間的發(fā)送RT較為平穩(wěn),整體符合預(yù)期,云原生化實(shí)踐完成了關(guān)鍵性的里程碑。RocketMQ至今已經(jīng)連續(xù)七年0故障支持集團(tuán)的雙十一大促。自從RocketMQ誕RocketMQ時(shí)充分享受了更為穩(wěn)定和強(qiáng)大的RocketMQ消息中間件的各類特性。過濾),部分使用RocketMQ特有的SQL過濾。目前集團(tuán)內(nèi)部RocketMQ了額外CPU過濾計(jì)算邏輯,交易集群都是大促中機(jī)器成本增長(zhǎng)最大的地方。由于歷史原因,大部分的業(yè)務(wù)方主要還是使用Header過濾,內(nèi)部實(shí)現(xiàn)其實(shí)是aviator表達(dá)式(/killme2008/aviatorscript)MessageType==MessageType==aviatorJava由于交易消息包括大量不同業(yè)務(wù)的MessageType,光是有記錄的起碼有幾千個(gè),隨著交易業(yè)務(wù)流程復(fù)雜化,MessageType的增長(zhǎng)更是繁多。隨著交易峰值的提高,交易消group結(jié)果。為了加快查詢結(jié)果,可以選擇MessageType作為一個(gè)索引字段進(jìn)行索引化,每次查詢變?yōu)橄绕ヅ銶essageType主索引,然后把匹配上主索引的記錄再進(jìn)行其它條件如何抽取每個(gè)表達(dá)式中的MessageType字段?如何對(duì)MessageType字段進(jìn)行索引化?1aviatorhookaviator可以發(fā)現(xiàn)aviator的編譯是典型的Recursivedescent:在編譯過程中針對(duì)messageType==XXX這種類型進(jìn)行提取后,把原有的messageType=='200-trade-paid-done'&&buyerId==1234561(messageType==200-trade-paid-圖所示(為方便理解,綠色方框的是token,其它框表示表達(dá)式的具體條件組合):提取了messageType,有兩種情況:情況一:messageType=='200-trade-paid-done',則把之前token的位置合并true,然后進(jìn)行表達(dá)式短路計(jì)算,最后優(yōu)化成buyerId==123456,具體如下:情況二:messageType200-trade-paid-donetokenfalsefalse這樣就完成messageType的提取。這里可能有人就有一個(gè)疑問,為什么要考慮到上面的情況二,messageType!='200-trade-paid-done',這是因?yàn)楸仨氁紤]到多個(gè)(messageType=='200-trade-paid-done'&&buyerId==123456)||12,考慮到高效過濾,直接使用HashMap結(jié)構(gòu)進(jìn)行索引化即可,即把messageType的值作為HashMap的key,把提取后的子表達(dá)式作為HashMap的value,這樣每次過濾直接通過一次hash計(jì)算即可過濾掉該優(yōu)化最主要降低了CPU計(jì)算邏輯,根據(jù)優(yōu)化前后的性能情況對(duì)比,我們發(fā)現(xiàn)不期的,其中最大的CPU優(yōu)化有32%的提升,大大降低了本年度RocketMQ的部署機(jī)三、全新的消費(fèi)模型——POP消費(fèi)RocketMQPULLhanghang住,但處于半死不活的狀態(tài),與broker的心跳沒有斷掉的時(shí)候,客戶端rebalance嚴(yán)重的紅色堆積。對(duì)于此,我們?cè)黾恿艘环N新的消費(fèi)模型——POP消費(fèi),能夠解決此類POPrebalancePOPClientPopClient2hang,但PopClient1PopClient2hangPOP消費(fèi)和原來PULL消費(fèi)對(duì)比,最大的一點(diǎn)就是弱化了隊(duì)列這個(gè)概念,PULLrebalancebroker隊(duì)列,新的POP消費(fèi)中,客戶端的機(jī)器會(huì)直接到每個(gè)broker的隊(duì)列進(jìn)行請(qǐng)求消費(fèi),brokerAck結(jié)果通知broker,broker再標(biāo)記消息消費(fèi)結(jié)果,如果超時(shí)沒響應(yīng)或者消費(fèi)失敗,再會(huì)進(jìn)行POP消費(fèi)的架構(gòu)圖如上圖所示。Broker對(duì)于每次POP的請(qǐng)求,都會(huì)有以下三個(gè)然后寫入CK消息,表明獲取的消息要被POP消費(fèi);CK消息實(shí)際上是記錄了POP消息具體位點(diǎn)的定時(shí)消息,當(dāng)客戶端超時(shí)沒響應(yīng)的時(shí)候,CKbroker消費(fèi),然后把CK消息的位點(diǎn)的消息寫入重試隊(duì)列。如果broker收到客戶端的消費(fèi)結(jié)果的Ack,刪除對(duì)應(yīng)的CK消息,然后根據(jù)具體結(jié)從整體流程可見,POP消費(fèi)并不需要reblance,可以避免rebalance帶來的消brokerhang而導(dǎo)致云原生時(shí)代RocketMQ云原生時(shí)代RocketMQ運(yùn)維管控的利器-RocketMQ RocketMQRocketMQ云原生時(shí)代RocketMQ運(yùn)維管控的利器|PCRocketMQ導(dǎo)讀:RocketMQOperator現(xiàn)已加入OperatorHub,正式進(jìn)入Operator社區(qū)。本文將從實(shí)踐出發(fā),結(jié)合案例來說明,如何通過RocketMQOperator在Kubernetes上快速搭建一個(gè)RocketMQ集群,并提供一些RocketMQ集群管理功能包括Broker擴(kuò)首先簡(jiǎn)單介紹一下RocketMQOperator的相關(guān)知識(shí);然后結(jié)合案例詳細(xì)介紹RocketMQOperator最后介紹Operator社區(qū)目前的情況并展望RocketMQOperator下一步的發(fā)展2012~2013年期間,阿里巴巴中間件團(tuán)隊(duì)自主研發(fā)并對(duì)外開源了第三代分布式消息RocketMQ11萬億級(jí)數(shù)據(jù)洪峰業(yè)務(wù),其云產(chǎn)品AliwareMQ在微服務(wù)、流計(jì)算、IoT、異步解耦、數(shù)據(jù)同步2016年,阿里巴巴向Apache軟件基金會(huì)捐贈(zèng)了RocketMQ。次年,RocketMQ順利從基金會(huì)畢業(yè),成為Apache頂級(jí)開源項(xiàng)目,與ApacheHadoop,ApacheSpark一起為全球分布式、大數(shù)據(jù)領(lǐng)域的開發(fā)者帶來福音。然而,在云原生時(shí)代的今天,RocketMQ作為有狀態(tài)的分布式服務(wù)系統(tǒng),如何在大規(guī)模集群上做到極簡(jiǎn)運(yùn)維,則是一RocketMQRocketMQ7RocketMQ3nameserver2masterbroker2slavebroker開始集成和使用基于Kubernetes的云原生生態(tài)。使用Kubernetes提供的Deployment和StatefulSet等原生資源可以很好地解RocketMQ限性。例如對(duì)RocketMQ來說擴(kuò)容不僅僅是拉起新的實(shí)例Pod就完成了,還需要同步復(fù)制Broker的狀態(tài)信息包括Topic信息和訂閱關(guān)系這些元數(shù)據(jù),同時(shí)要正確配置新Broker的config參數(shù),包括brokerName和NameServerIPList等,才能使得新BrokerStatefulSetsizereplicas后apply是無法做到的。實(shí)際上Kubernetes開發(fā)人員也發(fā)現(xiàn)了這些問題,因此引入了自定義資源和控制器的概念,讓開發(fā)人員可以直接用Go語言調(diào)用KubernetesAPI,編寫自定義資源和對(duì)這類代碼組件稱之為Operator。由具備RocketMQ領(lǐng)域知識(shí)的專家編寫Operator,KubernetesAPIKubernetesOperator是在Kubernetes基礎(chǔ)上通過擴(kuò)展KubernetesAPI,用來創(chuàng)建、配置和管理復(fù)雜的有狀態(tài)應(yīng)用,如分布式數(shù)據(jù)庫等。OperatorKubernetes1.7OperatorCRD(自定義資源)Controller(控Operator站在Kubernetes內(nèi)部視角,為應(yīng)用的云原生化打開了新世界的大門。管理任務(wù),這些自定義的控制器就像Kubernetes原生的組件一樣,Operator可以直KubernetesAPI進(jìn)行開發(fā),也就是說他們可以根據(jù)這些控制器編寫的自定義規(guī)則來創(chuàng)建和更改Pods/Services、對(duì)正在運(yùn)行的應(yīng)用進(jìn)行擴(kuò)縮容。本文使用RocketMQOperator0.2.1版本,展示如何使用RocketMQOperator在Kubernetes上快速創(chuàng)建部署一個(gè)RocketMQ服務(wù)集群。準(zhǔn)備好K8s環(huán)境,可以使用dockerdesktop自帶的K8s,或者克隆rocketmq-operatorK8s運(yùn)行腳本安裝RocketMQ$$./install-檢查下RocketMQOperator是否安裝成功:$kubectlgetrocketmq-operator-564b5d75d-成功安裝時(shí),rocketmq-operatorpod處于類似上面例子的running應(yīng)用Broker和NameService自定義資源,創(chuàng)建RocketMQ集群;rocketmq-operatorexamplerocketmq_v1alpha1_rocketmq_cluster.yaml文件,快速部署一個(gè)RocketMQ集群。rocketmq_v1alpha1_rocketmq_cluster.yaml文件內(nèi)容如下:kind:Broker#nameofbrokerclustername:broker#sizeisthenumberofthebrokercluster,eachbrokerclustercontainsamasterbrokerand[replicaPerGroup]replicabrokers.size:nameServers:""#replicationModeisthebrokerreplicasyncmode,canbeASYNCorSYNCreplicationMode:ASYNC#replicaPerGroupisthenumberofeachbrokerclusterreplicaPerGroup:1#brokerImageisthecustomizeddockerimagerepooftheRocketMQbrokerbrokerImage:apacherocketmq/rocketmq-broker:4.5.0-alpineimagePullPolicy:Always#resourcesdescribesthecomputeresourcerequirementsandlimitsmemory:"2048Mi"cpu:"250m"memory:cpu:cpu:#allowRestartdefineswhetherallowpodrestartallowRestart:truestorageMode:EmptyDir#hostPathisthelocalpathtostoredatahostPath:/data/rocketmq/broker#scalePodNameisbroker-[brokergroupnumber]-master-0scalePodName:broker-0-master-0#volumeClaimTemplatesdefinesthestorageClass-name:broker-storage-ReadWriteOncestorageClassName:rocketmq-storagestorage:--kind:NameServicename:name-service#sizeisthethenameserviceinstancenumberofthenameservicesize:##nameServiceImageisthecustomizeddockerimagerepooftheRocketMQnamenameServiceImage:apacherocketmq/rocketmq-nameserver:4.5.0-alpine#imagePullPolicyistheimagepullpolicyimagePullPolicy:#hostNetworkcanbetrueorfalsehostNetwork:true#SetDNSpolicyforthepod.#Defaultsto"ClusterFirst".#Validvaluesare'ClusterFirstWithHostNet','ClusterFirst','Default'or#DNSparametersgiveninDNSConfigwillbemergedwiththepolicyselectedwith#TohaveDNSoptionssetalongwithhostNetwork,youhavetospecifyDNS#explicitlyto'ClusterFirstWithHostNet'.dnsPolicy:ClusterFirstWithHostNet#resourcesdescribesthecomputeresourcerequirementsandlimitsmemory:"512Mi"cpu:"250m"memory:"1024Mi"cpu:"500m"storageMode:EmptyDir#hostPathisthelocalpathtostore#volumeClaimTemplatesdefinesthestorageClass#volumeClaimTemplatesdefinesthestorageClassstorageClassName:rocketmq-storagestorage:注意到這個(gè)例子中storageMode:EmptyDir,表示存儲(chǔ)使用的是EmptyDir,數(shù)據(jù)會(huì)隨著Pod的刪除而抹去,因此該方式僅供開發(fā)測(cè)試時(shí)使用。一般使用HostPath或StorageClass來對(duì)數(shù)據(jù)進(jìn)行持久化存儲(chǔ)。使用HostPath時(shí),需要配置hostPath,聲明宿主機(jī)上掛載的目錄。使用storageClass時(shí),需要配置volumeClaimTemplates,聲明PVC模版。具體可參考RocketMQOperator文檔。應(yīng)用上面的yaml$kubectlapply-fexample/rocketmq_v1alpha1_rocketmq_cluster.yaml/brokercreated$kubectlapply-fexample/rocketmq_v1alpha1_rocketmq_cluster.yaml/brokercreated查看集群Pod狀態(tài):$$kubectlgetpods- NOMINATED 1/1 7docker-desktopbroker-0-replica-1-0 Running 8docker-desktop 027sdocker-desktoprocketmq-operator-76b4b9f4db- 使用默認(rèn)的rocketmq_v1alpha1_rocketmq_cluster.yaml文件配置,我們看到集1nameserver(name-service-0)2broker(11從)。好啦!到這里你已經(jīng)成功通過Operator提供的自定義資源部署了一個(gè)RocketMQ訪問這個(gè)RocketMQ集群中的Pod使用RocketMQ的tools.sh腳本運(yùn)行Producerbash-4.4#sh./tools.shOpenJDK64-BitServerVMwarning:ignoringoptionPermSize=128m;supportwasremovedin8.0OpenJDK64-BitServerVMwarning:ignoringoptionMaxPermSize=128m;supportwasremovedin8.0ggingframeworkSendResult[sendStatus=SEND_OK,msgId=0A0102CF007778308DB1206383920000,offsetMsgId=0A0102CF00002A9F0000000000000000,messageQueue=MessageQueue[topic=TopicTest,brokerName=broker-0,queueId=0],queueOffset=0]06:56:51.120[NettyClientSelector_1]INFORocketmqRemoting-closeChannel:closetheconnectiontoremoteaddress[07:10909]result:true在另一個(gè)節(jié)點(diǎn)上運(yùn)行Consumerbash-4.4#sh./tools.shOpenJDK64-BitServerVMwarning:ignoringoptionPermSize=128m;supportwasremovedin8.0OpenJDK64-BitServerVMwarning:ignoringoptionMaxPermSize=128m;supportwasremovedin8.0ggingframeworkConsumerConsumeMessageThread_1ReceiveNewMessages:[MessageExt[queueId=0,3,queueOffset=19845,sysFlag=0,bornTimestamp=1596768410268,50,storeTimestamp=1596768410282,storeHost=/4:10911,F000014F96A0D6C65,commitLogOffset=23061458676837,bodyCRC=532471758,s=0,preparedTransactionOffset=0,toString()=Message{topic='TopicTest',flag=0,N_OFFSET=19844,TRACE_ON=true,eagleTraceId=1e04a5cc15967684102641001d0db0,E04A5CC0DB0135FBAA421365A5F0000,WAIT=true,TAGS=TagA,eagleRpcId=9.1},body=[72,108,108,111,32,77,101,116,97,81,32,48],ConsumeMessageThread_4ReceiveNewMessages:[MessageExt[queueId=1,3,queueOffset=19637,sysFlag=0,bornTimestamp=1596768410296,50,storeTimestamp=1596768410298,storeHost=/4:10911,F000014F96A0D7141,commitLogOffset=23061458678081,bodyCRC=1757146968,es=0,preparedTransactionOffset=0,toString()=Message{topic='TopicTest',flag=0,N_OFFSET=19636,TRACE_ON=true,eagleTraceId=1e04a5cc15967684102961002d0db0,E04A5CC0DB0135FBAA421365AB80001,WAIT=true,TAGS=TagA,eagleRpcId=9.1},body=[72,108,108,111,32,77,101,116,97,81,32,49],清除RocketMQ服務(wù)集群實(shí)例:清除RocketMQ$$./purge-三、按照OperatorHub官網(wǎng)指導(dǎo)安裝RocketMQ在OperatorHub.io網(wǎng)頁搜索RocketMQStreaming&MessagingRocketMQRocketMQOperatorInstall按照說明安裝OLM和RocketMQOLM(OperatorLifecycleManager參考:OLM安裝文檔UI訪問http://localhost:9000搜索RocketMQ或點(diǎn)擊AllItems分類中的Streaming&Messaging,找到RocketMQOperator并進(jìn)行安裝;安裝完RocketMQOperator后可以在InstalledOperators中找到RocketMQOperatorsRocketMQOperator介紹界面通過UI界面創(chuàng)建NameService自定義資源$kubectlgetpods-$kubectlgetpods- kube- kube-controller-manager-docker-desktop1/1Runningkube- rocketmq-operator-0.2.1-c9fffb5f-cztcl1/1 rocketmq-operator-84c7bb4ddc-7rvqr1/1 upstream-community-operators-5b79db455f- 1/1Running 1/1 dockercompose-78f95d4f8c- dockercompose-api-6ffb89dc58- kube-systemcoredns-5644d7b6d9-hv6r5 kube-systemcoredns-5644d7b6d9-mkqb6 kube- kube- kube-apiserver-docker-desktop1/1 kube-kube-scheduler-docker-desktopkube-storage- kube-vpnkit- broker-0-replica-1- marketplacenamespacenameserver和broker實(shí)例。OperatorHubOLMRocketMQOperator將持續(xù)推送和維護(hù)新版本的RocketMQOperator至該平臺(tái),方便用戶獲取最新更新或選擇合適的Operator版本。RocketMQOperator是Apache社區(qū)的開源項(xiàng)目,服務(wù)于阿里巴巴SaaS類交付們更好地完善RocketMQOperator。目前,RocketMQOperatorv0.2.1的PR已合并進(jìn)入community-operators倉庫,RocketMQOperator進(jìn)入OperatorHub.io后,用戶可以通過使用OLM(OperatorLifecycleManager)來安裝、訂閱RocketMQOperator,獲得持續(xù)的服務(wù)支RocketMQOperatorv0.2.1支持的功能主要包括:NameServer和Broker集群的自動(dòng)創(chuàng)建,NameServer集群的無縫擴(kuò)容(自動(dòng)通知Broker集群更新NameServerIP列表),非順序消息下的Broker集群無縫擴(kuò)容(新Broker實(shí)例會(huì)從BrokerCRD指定的源BrokerPod中同步元數(shù)據(jù),包括Topic信息和訂閱信息),以及Topic遷移等。下一步我們希望和社區(qū)一起進(jìn)一步完善RocketMQOperator項(xiàng)目,包括灰度發(fā)最終實(shí)現(xiàn)通過Operator可以覆蓋RocketMQ服務(wù)全生命周期的管理。 RocketMQPrometheusExporterDevOps基于RocketMQ基于RocketMQPrometheusExporter打造定制化DevOps平 基于RocketMQPrometheusExporter打造定制化DevOps平臺(tái)|PCRocketMQ和落地、DevOps和監(jiān)控平臺(tái)有比較深入的研究。本文將對(duì)RocketMQ-Exporter的設(shè)計(jì)實(shí)現(xiàn)做一個(gè)簡(jiǎn)單的介紹,讀者可以通過本文了解到RocketMQ-ExporterRocketMQ-Exporter來搭建自己的RocketMQ監(jiān)控系統(tǒng)。RocketMQ介紹Prometheus簡(jiǎn)介RocketMQ-Exporter的具體實(shí)現(xiàn)RocketMQ-ExporterRocketMQ-Exporter使用示例一、RocketMQ介紹RocketMQ是一個(gè)分布式消息和流數(shù)據(jù)平臺(tái),具有低延遲、高性能、高可靠性、萬億級(jí)容量和靈活的可擴(kuò)展性。簡(jiǎn)單的來說,它由Broker服務(wù)器和客戶端兩部分組成,ProducerBroker另外一個(gè)是消息的消費(fèi)者客戶端(Consumer),多個(gè)消費(fèi)者可以組成一個(gè)消費(fèi)組,來訂閱和拉取消費(fèi)Broker服務(wù)器上存儲(chǔ)的消息。正由于它具有高性能、高可靠性和高實(shí)時(shí)性的特點(diǎn),與其他協(xié)議組件在MQTT等各種消息場(chǎng)景中的結(jié)合也越來越多,應(yīng)用越來理平臺(tái)。而當(dāng)前在開源界,使用最廣泛監(jiān)控解決方案的就是Prometheus。與其它傳統(tǒng)監(jiān)控系統(tǒng)相比較,Prometheus具有易于管理,監(jiān)控服務(wù)的內(nèi)部運(yùn)行狀態(tài),強(qiáng)大的數(shù)據(jù)模型,強(qiáng)大的查詢語言PromQL,高效的數(shù)據(jù)處理,可擴(kuò)展,易于集成,可視化,開放性等優(yōu)點(diǎn)。并且借助于Prometheus可以很快速的構(gòu)建出一個(gè)能夠監(jiān)控RocketMQ的二、Prometheus下圖展示了Prometheus的基本架構(gòu):PrometheusPrometheusServer是Prometheus組件中的核心部分,負(fù)責(zé)實(shí)現(xiàn)對(duì)監(jiān)控?cái)?shù)據(jù)的獲取,存儲(chǔ)以及查詢。PrometheusServer可以通過靜態(tài)配置管理監(jiān)控目標(biāo),也可以ServiceDiscovery其次PrometheusServer需要對(duì)采集到的監(jiān)控?cái)?shù)據(jù)進(jìn)行存儲(chǔ),PrometheusServer本最后PrometheusServer對(duì)外提供了自定義的PromQLExporter將監(jiān)控?cái)?shù)據(jù)采集的端點(diǎn)通過HTTP服務(wù)的形式暴露給PrometheusServer,PrometheusServerExporterEndpoint端點(diǎn),即可獲取到需要采集的監(jiān)控?cái)?shù)據(jù)。RocketMQ-Exporter就是這樣一個(gè)Exporter,它首先從RocketMQ集群采集數(shù)據(jù),然后借助Prometheus提供的第三方客戶端庫將采集的數(shù)據(jù)規(guī)范化成符合Prometheus系統(tǒng)要求的數(shù)據(jù),Prometheus定時(shí)去從Exporter拉取數(shù)據(jù)即可。當(dāng)前RocketMQExporter已被Prometheus官方收錄,其地址為//apache/rocketmq-三、RocketMQ-Exporter的具體實(shí)現(xiàn)整個(gè)系統(tǒng)基于springboot框架來實(shí)現(xiàn)。由于MQ內(nèi)部本身提供了比較全面的數(shù)ExporterMQ集群提供的統(tǒng)計(jì)信息取出然后進(jìn)行加工而已。所以RocketMQ-Exporter的基本邏輯是內(nèi)部啟動(dòng)多個(gè)定時(shí)任務(wù)周期性的從MQ集群拉取數(shù)據(jù),然后將數(shù)據(jù)規(guī)范化后通過端點(diǎn)暴露給Prometheus即可。其中MQAdminExt模塊通過封裝MQ系統(tǒng)客戶端提供的接口來獲取MQ集群內(nèi)部的MetricService負(fù)責(zé)將MQ集群返回的結(jié)果數(shù)據(jù)進(jìn)行加工,使其符合PrometheusCollectPrometheus定時(shí)從Exporter拉取數(shù)據(jù)的時(shí)候,Exporter就將Collector收集的數(shù)據(jù)通過HTTP的形式在四、RocketMQ-Exporter的監(jiān)控指標(biāo)和告警指標(biāo)RocketMQ-Exporter主要是配合Prometheus來做監(jiān)控,下面來看看當(dāng)前在Expoter中定義了哪些監(jiān)控指標(biāo)和告警指標(biāo)。topicucer_offset-消息堆積量(生產(chǎn)進(jìn)度-消費(fèi)進(jìn)rocketmq_message_accumulation是一個(gè)聚合指標(biāo),需要根據(jù)其它上報(bào)指標(biāo)聚合sum(rocketmq_producer_tps)by(cluster)>=tpssum(rocketmq_producer_tps)by(cluster)<tpssum(rocketmq_consumer_tps)by(cluster)>=tpssum(rocketmq_consumer_tps)by(cluster)<tpsrocketmq_group_get_latency_by_storetime>rocketmq_message_accumulation>消費(fèi)者堆積告警指標(biāo)也是一個(gè)聚合指標(biāo),它根據(jù)消費(fèi)堆積的聚合指標(biāo)生成,value這個(gè)閾值對(duì)每個(gè)消費(fèi)者是不固定的,當(dāng)前是根據(jù)過去5分鐘生產(chǎn)者生產(chǎn)的消息數(shù)量來RoketMQ者堆積告警指標(biāo),在以往的監(jiān)控系統(tǒng)中,由于沒有像Prometheus那樣有強(qiáng)大的romQLcketMQometeus(sum(rocketmq_producer_offset)by(topic)(sum(rocketmq_producer_offset)by(topic)-on(topic)group_rightsum(rocketmq_conumer_offset)by(group,topic))-ignoring(group)group_leftsum(avg_over_time(rocketmq_producer_tps[5m]))by*5*60>借助PromQL這一條語句不僅可以實(shí)現(xiàn)為任意一個(gè)消費(fèi)者創(chuàng)建消費(fèi)告警堆積告五、RocketMQ-Exporter使用示例啟動(dòng)NameServer和要驗(yàn)證RocketMQ的Spring-Boot客戶端,首先要確保RocketMQ服務(wù)正確的下載并啟動(dòng)??梢詤⒖糝ocketMQ主站的快速開始來進(jìn)行操作。確保啟動(dòng)NameServer和Broker已經(jīng)正確啟動(dòng)。編譯RocketMQ-cdrocketmq-exportermvncleanRocketMQ-ExporterMQnameSrvHTTPjavajava-jarrocketmq-exporter-0.0.1-SNAPSHOT.jar[--9876"首先到Prometheus官方下載地址去下載Prometheus安裝包,當(dāng)前以過如下的操作步驟就可以啟動(dòng)prometheus進(jìn)程。tar-xzfprometheus-2.7.0-rc.1.linux-amd64.tar.gztar-xzfprometheus-2.7.0-rc.1.linux-amd64.tar.gzcdprometheus-2.7.0-rc.1.linux-amd64/./prometheus--config.file=prometheus.yml--web.listen-Prometheus默認(rèn)監(jiān)聽端口號(hào)為9090,為了不與系統(tǒng)上的其它進(jìn)程監(jiān)聽端口沖突,5555http://<服務(wù)器IP地址>:5555,就可以驗(yàn)證Prometheus是否已成功安裝,顯示界面如下:由于RocketMQ-Exporter進(jìn)程已啟動(dòng),這個(gè)時(shí)候可以通過Prometheus來抓取RocketMQ-Exporter的數(shù)據(jù),這個(gè)時(shí)候只需要更改Prometheus## 15s#Setthescrapeintervaltoevery15seconds.Defaultisevery1minute.#Loadrulesonceandperiodicallyevaluatethemaccordingtotheglobal'evaluation_#-#-job_name:'prometheus'targets:targets:更改配置文件后,重啟服務(wù)即可。重啟后就可以在Prometheus界面查詢RocketMQ-Exporter上報(bào)的指標(biāo),例如查詢r(jià)ocketmq_broker_tps在Prometheus可以展示RocketMQ-Exporter的指標(biāo)后,就可以在Prometheus中配置RocketMQ的告警指標(biāo)了。在Prometheus的配置文件中添加如下的告警配置項(xiàng),*.rulesrules#-#-#Sampleprometheusrules/alertsforrocketmq.#Galeraalert:expr:sum(rocketmq_producer_tps)by(cluster)>=10for:3mseverity:description:'{{$labels.cluster}}Sendingtpstoosummary:clustersendtpstoo-alert:expr:sum(rocketmq_producer_tps)by(cluster)<for:description:'{{$labels.cluster}}Sendingtpstoo-alert:expr:sum(rocketmq_consumer_tps)by(cluster)>=for:severity:description:'{{$labels.cluster}}consumingtpstoosummary:clusterconsumetpstoo-alert:expr:sum(rocketmq_consumer_tps)by(cluster)<for:description:'{{$labels.cluster}}consumingtpstoosummary:clusterconsumetpstoo-alert:expr:expr:(sum(rocketmq_producer_offset)by(topic)-on(topic)group_rightsum(rocketmq_consumer_offset)by(group,topic))-ignoring(group)group_leftsum(avg_over_time(rocketmq_producer_tps[5m]))by(topic)*5*60>0for:3mseverity:warningdescription:'consumer{{$labels.group}}on{{$labels.topic}}lagbehindsummary:consumerlag-alert:expr:rocketmq_group_get_latency_by_storetime>1000for:3mseverity:warningdescription:'consumer{{$labels.group}}on{{$labels.broker}},{{$labels.topic}}consumetmelagbehindmessagestoretimeand(behindvalueissummary:messageconsumestimelagbehindmessagestoretimetoo最終,可以在Prometheus的看一下告警展示效果,紅色表示當(dāng)前處于告警狀態(tài)的Prometheus自身的指標(biāo)展示平臺(tái)沒有當(dāng)前流行的展示平臺(tái)Grafana好,為了更好的展示RocketMQ的指標(biāo),可以使用Grafana來展示Prometheus獲取的指標(biāo)。首先到官網(wǎng)去下載/grafana/download,這里仍以二進(jìn)制文件安wget/oss/release/grafana-6.2.5.lin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 浙江宇翔職業(yè)技術(shù)學(xué)院《公路工程定額原理與計(jì)價(jià)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江工業(yè)職業(yè)技術(shù)學(xué)院《采購過程演練》2023-2024學(xué)年第一學(xué)期期末試卷
- 反諧振阻抗比較小的原因
- 中國(guó)傳媒大學(xué)《計(jì)算機(jī)電子電路基礎(chǔ)》2023-2024學(xué)年第一學(xué)期期末試卷
- 長(zhǎng)治醫(yī)學(xué)院《劇場(chǎng)品牌管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 云南司法警官職業(yè)學(xué)院《體育-臺(tái)球》2023-2024學(xué)年第一學(xué)期期末試卷
- 企業(yè)內(nèi)部知識(shí)分享平臺(tái)構(gòu)建方案
- 保險(xiǎn)行業(yè)數(shù)字營(yíng)銷模板
- 拿破侖歷史名人人物介紹
- 中考誓師大會(huì)學(xué)生發(fā)言稿
- 小學(xué)數(shù)學(xué)二年級(jí)100以內(nèi)連加連減口算題
- 建設(shè)單位如何做好項(xiàng)目管理
- 三年級(jí)上遞等式計(jì)算400題
- 一次性餐具配送投標(biāo)方案
- 2024年原發(fā)性肝癌中醫(yī)診療指南
- 2024醫(yī)療建筑韌性設(shè)計(jì)導(dǎo)則
- 軍隊(duì)文職半年述職報(bào)告
- 鑄牢中華民族共同體意識(shí)-考試復(fù)習(xí)題庫(含答案)
- 2024年浙江首考高考選考生物試卷試題真題(含答案詳解)
- 天津市紅橋區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末地理試題
- 西門子數(shù)字化工廠-數(shù)字化車間-先進(jìn)制造技術(shù)
評(píng)論
0/150
提交評(píng)論