版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
云原生消息隊列Apache ApacheRocketMQ的ServiceMesh開源之 阿里的RocketMQ如何讓雙十一峰值之下0故 云原生時代RocketMQ運維管控的利器-RocketMQ 基于RocketMQPrometheusExporter打造定制化DevOps平 當RocketMQ遇上Serverless,會碰撞出怎樣的火 PCRocketMQ2015CloudNativeSLADevOps先說結(jié)論,我們認為云原生消息服務是云原生的通信基礎(chǔ)設(shè)施。2015年成立的CNCF基金會大范圍推廣了云原生的技術(shù)理念,并提供了一套完整的實踐技術(shù)工具集,CNCF云原生全景圖,其中消息中間件云原生應用將對消息這種云原生BaaS服務有更高的SLA要求,應用將假設(shè)其依賴的研發(fā)、運維成本。云原生時代的消息服務借助Serverless等彈性技術(shù),無需預先IoTIDC,都能以跟公有云同樣易用的方式接入消息服務,且能輕易地滿足IDC、跨云等互通需求,真正成為應用層的通信基礎(chǔ)設(shè)施。RocketMQ,Kafka,微消息隊列等。APISLA、低成本、易用性、多樣性和標準化幾個方KubernetesKubernetes項目當下絕對是大紅大紫,在容器編排和應用托管領(lǐng)域絕對的事實標云原生消息Kubernetes化是指通過自定義CRD資源將有狀態(tài)的消息集群托管至KubernetesK8S提供的部署、升級、自愈等能力提高運維效率,同K8SRocketMQCRDOperatorRocketMQK8SK8S的能力低成本運維RocketMQPrometheusRocketMQKubernetesKubernetes同時,在商業(yè)化環(huán)境,我們也正在依賴Kubeone將消息隊列系列產(chǎn)品完成KubernetesMQ實例中,可以根2WTPS10WTPSLoadMQ物理資源;在集群縮容的處理上,會比較麻MQPV代表了一個CommitLog,我ASIPVRocketMQCommitLogMesh目前阿里云消息隊列RocketMQ是國內(nèi)第二個成功進入ServiceMesh官方社區(qū)EnvoyEnvoyon-demandCDSMeshApacheRocketMQ的ServiceMesh開源之阿里云消息產(chǎn)品矩陣包含消息隊列RocketMQ、Kafka、AMQP、微消息隊列MQTT、MNSEventBridge,涵蓋互聯(lián)網(wǎng)、大數(shù)據(jù)、移動互聯(lián)網(wǎng)、RocketMQ:阿里巴巴自主研發(fā)及雙11交易核心鏈路消息產(chǎn)品,阿里云Kafka100%融合Kafka開源社區(qū),大數(shù)據(jù)應用微消息隊列MQTT:基于MQTT標準協(xié)議自研,拓展消息產(chǎn)品的領(lǐng)域與邊界,延AMQP100AMQPRabbitMQ消息服務MNS:聚焦云產(chǎn)品生態(tài)集成&消息通知服務(HTTPEndpoint、FunctionCompute、事件通知、移動推送等)。事件總線EventBridge:作為我們下一代的消息產(chǎn)品形態(tài),原生支持CloudEvents標準,提供中心化事件服務能力,加速云原生生態(tài)集成,EDA在阿里云消息商業(yè)化生態(tài)中,消息隊列產(chǎn)品線已經(jīng)支持11BU,30+云產(chǎn)品或者解RocketMQKnative事件源,PrometheusExporter,K8SOperatorDubbo、SpringCloudOpenWhiskConnectorSinkSourceELK、Flume、Flink、Hadoop在消息領(lǐng)域,無論是接口還是協(xié)議,社區(qū)一直有很多事實上的“標準”,比如Kafka提供的API和協(xié)議,JMSAPI,CloudEvents規(guī)范,MQTT中的協(xié)議和模型,AMQP的協(xié)議和模型等,阿里云消息隊列產(chǎn)品線對這些事實標準都提供了相應的接入方事實上的“標準”如果太多,其實就沒有標準,開源方面一直在推動自建標準OpenMessagingOMS將提供六大核心特性:多領(lǐng)域、流、平臺無關(guān)、標準的Benchmark,面向云,線路層可插拔。目前,國內(nèi)有很多云提供商都接入了OMS標準。接入&消費&Pub/Sub模式,廣播/集群消費模式,消費過TagSQL1210SLA99.9589。高性能:雙11消息收發(fā)TPS3低延遲:在雙1199.996%在毫秒級響應;消息發(fā)布平均響應時間不超過3毫秒。RocketMQRocketMQRocketMQushul以及op也就是RocketMQ開發(fā)者熟知的NameServer,以簡單可靠的方式提供集群管理、元數(shù)據(jù)管理、Topic路由和發(fā)現(xiàn)等功能,節(jié)點無狀態(tài),最終一致的語義確保NameServer日志與索引分離:整個存儲層將消息以AppendOnly的方式集中式存儲在CommitLogMaster-SlaveRaftDlegerRTOCodeReview、單元測試、集成測試、性能測試以及容災50JVM在消息產(chǎn)品矩陣小節(jié)中提到,EventBridge是作為我們下一代的消息產(chǎn)品形態(tài),該EventBridgeEventBridgeEventBridgeSaaS事件源:事件源可以是阿里云服務,比如對象存儲、ECS、數(shù)據(jù)庫等,也可以是用aaS資源管理:EventBridgeSchema事件目標:事件最終投遞的目標服務包羅萬象,既可以觸發(fā)一個Serverless的EventBridge:EDAEventBridgeEDASchemaEDAEventBridgeCQRSEventSouringIoTEventStreamingAPIRequestEventAPIsRESTAPIsEDAGartnerEDAEDACentralizedEDAEDAEDAAdvanced:EDAAI,以及APIEDA阿里云消息團隊在EDA ApacheRocketMQServiceMeshApacheRocketMQApacheRocketMQ的ServiceMesh開源之 ApacheRocketMQServiceMesh|19年底開始,支持ApacheRocketMQ的NetworkFilter歷時4個月的CodeReview(PullRequest),于本月正式合入CNCFEnvoy官方社區(qū)(RocketMQProxyFilter官方文檔),這使得RocketMQ成為繼Dubbo之后,國內(nèi)第二個成功進入ServiceMesh官方社區(qū)的中間件產(chǎn)品。導讀:自19年底開始,支持ApacheRocketMQ的NetworkFilter歷時4個月的CodeReview(PullRequest),于本月正式合入CNCFEnvoy官方社區(qū)(RocketMQProxyFilter官方文檔),這使得RocketMQ成為繼Dubbo之后,國內(nèi)第二個成功進入ServiceMesh官方社區(qū)的中間件產(chǎn)品。一、ServiceMesh簡述一下ServiceMesh下RocketMQPilot獲取到Topic的路由信息并通過xDS的形式下發(fā)給數(shù)據(jù)平面/Envoy,Envoy會代理SDK向Broker/Nameserver發(fā)送的所有的網(wǎng)絡請求;發(fā)送時,Envoyrequestcode判斷出請求為發(fā)送,并根據(jù)topicrequestcode選出對應的CDSEnvoyBroker并發(fā)送,這里會使用數(shù)據(jù)平面的subset機制來確保選出的Broker是可寫的;消費時,Envoyrequestcodetopicrequestcode選出對應的CDS,然后和發(fā)送一樣選出對應的Broker進行消費(與發(fā)送類似,這里也會使用subset來確保選出的Broker是可讀的),并記錄相應的元數(shù)據(jù),當消息消費SDK發(fā)出ACK請求時會取出相應的元數(shù)據(jù)信息進行比對,再通過路由來準確將ACK請求發(fā)往上次消費時所使用的Broker。二、RocketMQMeshServiceMesh常常被稱為下一代微服務,這一方面揭示了在早期Mesh化浪潮中微服務是絕對的主力軍,另一方面,微服務的Mesh化也相對更加便利,而隨著消息隊ServiceMesh各個產(chǎn)品在這個過程中也會有各自的問題亟需解決,RocketMQ也沒有例外。RocketMQ的網(wǎng)絡模型比RPC更加復雜,是一套有狀態(tài)的網(wǎng)絡交互,這主要體現(xiàn)RocketMQ目前的網(wǎng)絡調(diào)用高度依賴于有狀態(tài)的原生SDK對于前者,使得現(xiàn)有的SDK完全無法使用分區(qū)順序消息,因為發(fā)送請求和消費請求RPC的內(nèi)容中并不包含IP/(BrokerName+BrokerId)等信息,導致使用了MeshSDKQueueBrokerBroker身在Mesh化的過程中被抹除了。當然這一點,對于只有一臺Broker的全局順序消息而言是不存在的,因為數(shù)據(jù)平面在負載均衡的時候并沒有其他Broker的選擇,因此在對于后者,RocketMQ的Pull/PushConsumer中Queue是負載均衡的基本單Consumer中其實是要感知與自己處于同一ConsumerGroup下消費同一Topic的Consumer數(shù)目的,每個Consumer根據(jù)自己的位置來選擇相應的Queue來進行消費,這些Queue在一個Topic-ConsumerGroup映射下是被每個Consumer法做到Queue粒度,這使得RocketMQ中的負載均衡策略已經(jīng)不再適用于ServiceMesh體系下。此時我們將目光投向了RocketMQ為支持HTTP而開發(fā)的Pop消費接口,在Pop接口下,每個Queue可以不再是被當前Topic-ConsumerGroup的Consumer獨占的,不同的消費者可以同時消費一個Queue里的數(shù)據(jù),這為我們使用Envoy中2ServiceMeshPopConsumerEnvoy會忽略掉SDK傳來的Queue信息。Topic在集團內(nèi)部,NameserverGBTopicMesh們將這部分抽象成CDS,這使得對于無法預先知道應用所使用的Topic的情形而言,控制平面只能全量推送CDS,這無疑會給控制平面帶來巨大的穩(wěn)定性壓力。在Envoy更早期,是完全的全量推送,在數(shù)據(jù)平面剛啟動時,控制平面會下發(fā)全量的xDS信息,之后控制平面則可以主動控制數(shù)據(jù)的下發(fā)頻率,但是無疑下發(fā)的數(shù)據(jù)依舊是全量的。后續(xù)Envoy支持了部分的deltaxDSAPI,即可以下發(fā)增量的xDS據(jù)給數(shù)據(jù)平面,這當然使得對于已有的sidecar,新下發(fā)的數(shù)據(jù)量大大降低,但是sidecarxDSRocketMQCDS都放在內(nèi)存中,這是我們不可接受的。于是我們希望能夠有on-demandCDS的方式使得sidecar可以僅僅獲取自己想要的CDS。而此時正好Envoy支持了deltaCDS,并僅支持了這一種deltaxDSdeltaCDS的xDS協(xié)議本身已經(jīng)提供了on-demandCDS的能力,但是無論是控制平面還是數(shù)據(jù)平面并沒有暴露這種能力,于是在這里對Envoy進行了修改并暴露了相關(guān)接口使得數(shù)據(jù)平面可以主動向控制平面發(fā)起對指定CDS的請求,并基于deltagRPC的方式實現(xiàn)了一個簡單的控制平面。Envoy會主動發(fā)起對指定CDS資源的請求,并提供了相應的回調(diào)接口供資源返回時進對于on-demandCDS的敘述對應到RocketMQ的流程中是這樣的,當GetTopicRoute或者SendMessage的請求到達Envoy時,Envoy會hang住這個流程并發(fā)起向控制平面中相應CDS資源的請求并直到資源返回后重啟這個流程。關(guān)于on-demandCDS的修改,之前還向社區(qū)發(fā)起了PullRequest,現(xiàn)在看來當時的想法還是太不成熟了。原因是我們這樣的做法完全忽略了RDS的存在,而將CDS和Topic實現(xiàn)了強綁定,甚至名稱也一模一樣,關(guān)于這一點,社區(qū)的SeniorMaintainer@htuchCDS資源名可Topic名,更重要的是社區(qū)賦予CDS本身的定義是脫離于業(yè)務的,而我們這樣的做法過于tricky,是與社區(qū)的初衷背道而馳的。因此我們就需要加上RDS來進行抽象,RDS通過topic和其他信息來定位到具體所需要的CDSCDSCDSon-demandCDSname:default_route-exact:mesh-name:codeexact_match:105cluster:foo-v145-acme-tau-beta-上面可以看到對于topic名為mesh的請求會被RDS路由到foo-v145-acme-tau-beta-lambda這個CDS上,事先我們只知道topic名,無法知道被匹配到的CDS如今站在更高的視角,發(fā)現(xiàn)這個錯誤很簡單,但是其實這個問題我們直到后續(xù)codereview時才及時糾正,確實可以更早就做得更好。不過從目前社區(qū)的動態(tài)來看,on-demandxDS或許已經(jīng)是一個roadmap,起碼目前xDS已經(jīng)全系支持delta,VHDS更是首度支持了on-demand的特性。五、Mesh為RocketMQAservicemeshisadedicatedinfrastructurelayerforhandlingservice-to-servicecommunication.It’sresponsibleforthereliabledeliveryofrequeststhroughthecomplextopologyofservicesthatcompriseamodern,cloudnativeapplication.Inpractice,theservicemeshistypicallyimplementedasanarrayoflightweightnetworkproxiesthataredeployedalongsideapplicationcode,withouttheapplicationneedingtobeaware.這是ServiceMesh這個詞的創(chuàng)造者WilliamMorgan對其做出的定義,概括一RocketMQ中包括服務發(fā)現(xiàn)、負載均衡、流量監(jiān)控等職責,使得調(diào)用當然目前的RocketMQFilter為了保證兼容性做出了很多讓步,比如為了保證SDK可以成功獲取到路由,將路由信息聚合包裝成了TopicRouteData返回給SDK,但是在理想情況下,SDK本身已經(jīng)不需要關(guān)心路由了,純?yōu)镸esh情景設(shè)計的SDK更加精簡的,不再會有消費側(cè)Rebalance,發(fā)送和消費的服務發(fā)現(xiàn),甚至在未來像消息體壓縮和schema校驗這些功能SDK和Broker/消費,發(fā)送/消費完就走或許才是RocketMQMesh的終極形態(tài)。六、What'sNextRocketMQFilterPop消費能力,但是如果想要具PullEnvoyProxy只接收Pop類型的消費請求,之后會考慮支PullEnvoyPullPop支持全局順序消息:目前在Mesh體系下,雖然全局順序消息的路由不存在問題,但是如果多個Consumer同時消費全局順序消息,其中一個消費者突然下線導致消息沒有ACKEnvoy中進BrokerProxyBroker起初,RocketMQFilterPullRequest就包含了當前幾乎全部的功能,導8KPR,感謝@CodeReview另外,Envoy社區(qū)的CI實在太嚴格了,嚴格要求97%以上的單測行覆蓋率,Bazel源碼級依賴,純靜態(tài)鏈接,本身無cache編譯24邏輯核心CPU和load均打滿至少半個小時才能編完,社區(qū)的各種CI跑完一次則少說兩三個小時,多則六七個小時,并對新提交的代碼有著極其嚴苛的語法和format要求,這使得在PR中修改一小部分代碼就可能帶來大量的單測變動和format需求,不過好的是單測可以很方便地幫助我們發(fā)現(xiàn)一些內(nèi)存case??陀^上來說,官方社區(qū)以這么高的標準來要求現(xiàn)并解決了不少自身的問題,總得來說還是有一定必要的,畢竟對于C++代碼而言,最后,RocketMQFilter@OfficialdocsforRocketMQPullrequestofRocketMQOn-demandCDSpullrequestforFirstversionofRocketMQfilter's阿里的RocketMQ阿里的RocketMQ如何讓雙十一峰值之下0故 阿里的RocketMQ0阿里的RocketMQ如何讓雙十一峰值之下0故障PCRocketMQ2020年雙十一交易峰值達到58.3WRocketMQ繼續(xù)數(shù)年0間件RocketMQ發(fā)生了以下幾個方面的變化:Kubernetes性能優(yōu)化。消息過濾優(yōu)化交易集群性能提升30Kubernetes作為目前云原生化技術(shù)棧實踐中重要的一環(huán),其生態(tài)已經(jīng)逐步建立并RoketMQ20162016上,就是各應用自己的定制化了。中間件部署平臺的開發(fā)也不完全了解集團內(nèi)RocketMQ的部署過程是怎樣的。因此在2016年的時候,部署平臺需要我們?nèi)ビH自實現(xiàn)消息中間件的應用發(fā)布代Kubernetes來實現(xiàn)消息中間件自己的operator。我們同樣希望利用云化后云整體的實現(xiàn)方案如上圖所示,通過自定義的CRD對消息中間件的業(yè)務模型進行抽Kubernetes平臺上。該平臺負責所有的容器生產(chǎn)、初始化以及集團內(nèi)一切線上環(huán)境的基線部署,屏蔽掉IaaS層的所有細節(jié)。Operator承擔了所有的新建集群、擴容、縮容、遷移的全部邏輯,包括每個pod對應的brokerName自動生成、配置文件,根據(jù)集群不同功能而配置的各種開關(guān),元operator中。當我們有需求重新修改各種運維邏輯的時候,也再也不用去依賴通用的具體實現(xiàn),修改自己的operator即可。replicaKubernetes嚴格的順序要求,這種部署模式在Kubernetes的體系下是并不提倡的。若依然采用以Kubernetes的運維理念。云化后的ECS使用的是高速云盤,底層將對數(shù)據(jù)做了多備份,因此數(shù)據(jù)的可用性MQ同步刷盤,因此,此時就可以把之前Kubernetes的技術(shù),可實現(xiàn)任何實例掛掉(包含宕機只有broker的概念,再無主備之分。上圖是Kubernetes上線后雙十一大促當天的發(fā)送RT統(tǒng)計,可見大促期間的發(fā)送RT較為平穩(wěn),整體符合預期,云原生化實踐完成了關(guān)鍵性的里程碑。RocketMQ至今已經(jīng)連續(xù)七年0故障支持集團的雙十一大促。自從RocketMQ誕RocketMQ時充分享受了更為穩(wěn)定和強大的RocketMQ消息中間件的各類特性。過濾),部分使用RocketMQ特有的SQL過濾。目前集團內(nèi)部RocketMQ了額外CPU過濾計算邏輯,交易集群都是大促中機器成本增長最大的地方。由于歷史原因,大部分的業(yè)務方主要還是使用Header過濾,內(nèi)部實現(xiàn)其實是aviator表達式(/killme2008/aviatorscript)MessageType==MessageType==aviatorJava由于交易消息包括大量不同業(yè)務的MessageType,光是有記錄的起碼有幾千個,隨著交易業(yè)務流程復雜化,MessageType的增長更是繁多。隨著交易峰值的提高,交易消group結(jié)果。為了加快查詢結(jié)果,可以選擇MessageType作為一個索引字段進行索引化,每次查詢變?yōu)橄绕ヅ銶essageType主索引,然后把匹配上主索引的記錄再進行其它條件如何抽取每個表達式中的MessageType字段?如何對MessageType字段進行索引化?1aviatorhookaviator可以發(fā)現(xiàn)aviator的編譯是典型的Recursivedescent:在編譯過程中針對messageType==XXX這種類型進行提取后,把原有的messageType=='200-trade-paid-done'&&buyerId==1234561(messageType==200-trade-paid-圖所示(為方便理解,綠色方框的是token,其它框表示表達式的具體條件組合):提取了messageType,有兩種情況:情況一:messageType=='200-trade-paid-done',則把之前token的位置合并true,然后進行表達式短路計算,最后優(yōu)化成buyerId==123456,具體如下:情況二:messageType200-trade-paid-donetokenfalsefalse這樣就完成messageType的提取。這里可能有人就有一個疑問,為什么要考慮到上面的情況二,messageType!='200-trade-paid-done',這是因為必須要考慮到多個(messageType=='200-trade-paid-done'&&buyerId==123456)||12,考慮到高效過濾,直接使用HashMap結(jié)構(gòu)進行索引化即可,即把messageType的值作為HashMap的key,把提取后的子表達式作為HashMap的value,這樣每次過濾直接通過一次hash計算即可過濾掉該優(yōu)化最主要降低了CPU計算邏輯,根據(jù)優(yōu)化前后的性能情況對比,我們發(fā)現(xiàn)不期的,其中最大的CPU優(yōu)化有32%的提升,大大降低了本年度RocketMQ的部署機三、全新的消費模型——POP消費RocketMQPULLhanghang住,但處于半死不活的狀態(tài),與broker的心跳沒有斷掉的時候,客戶端rebalance嚴重的紅色堆積。對于此,我們增加了一種新的消費模型——POP消費,能夠解決此類POPrebalancePOPClientPopClient2hang,但PopClient1PopClient2hangPOP消費和原來PULL消費對比,最大的一點就是弱化了隊列這個概念,PULLrebalancebroker隊列,新的POP消費中,客戶端的機器會直接到每個broker的隊列進行請求消費,brokerAck結(jié)果通知broker,broker再標記消息消費結(jié)果,如果超時沒響應或者消費失敗,再會進行POP消費的架構(gòu)圖如上圖所示。Broker對于每次POP的請求,都會有以下三個然后寫入CK消息,表明獲取的消息要被POP消費;CK消息實際上是記錄了POP消息具體位點的定時消息,當客戶端超時沒響應的時候,CKbroker消費,然后把CK消息的位點的消息寫入重試隊列。如果broker收到客戶端的消費結(jié)果的Ack,刪除對應的CK消息,然后根據(jù)具體結(jié)從整體流程可見,POP消費并不需要reblance,可以避免rebalance帶來的消brokerhang而導致云原生時代RocketMQ云原生時代RocketMQ運維管控的利器-RocketMQ RocketMQRocketMQ云原生時代RocketMQ運維管控的利器|PCRocketMQ導讀:RocketMQOperator現(xiàn)已加入OperatorHub,正式進入Operator社區(qū)。本文將從實踐出發(fā),結(jié)合案例來說明,如何通過RocketMQOperator在Kubernetes上快速搭建一個RocketMQ集群,并提供一些RocketMQ集群管理功能包括Broker擴首先簡單介紹一下RocketMQOperator的相關(guān)知識;然后結(jié)合案例詳細介紹RocketMQOperator最后介紹Operator社區(qū)目前的情況并展望RocketMQOperator下一步的發(fā)展2012~2013年期間,阿里巴巴中間件團隊自主研發(fā)并對外開源了第三代分布式消息RocketMQ11萬億級數(shù)據(jù)洪峰業(yè)務,其云產(chǎn)品AliwareMQ在微服務、流計算、IoT、異步解耦、數(shù)據(jù)同步2016年,阿里巴巴向Apache軟件基金會捐贈了RocketMQ。次年,RocketMQ順利從基金會畢業(yè),成為Apache頂級開源項目,與ApacheHadoop,ApacheSpark一起為全球分布式、大數(shù)據(jù)領(lǐng)域的開發(fā)者帶來福音。然而,在云原生時代的今天,RocketMQ作為有狀態(tài)的分布式服務系統(tǒng),如何在大規(guī)模集群上做到極簡運維,則是一RocketMQRocketMQ7RocketMQ3nameserver2masterbroker2slavebroker開始集成和使用基于Kubernetes的云原生生態(tài)。使用Kubernetes提供的Deployment和StatefulSet等原生資源可以很好地解RocketMQ限性。例如對RocketMQ來說擴容不僅僅是拉起新的實例Pod就完成了,還需要同步復制Broker的狀態(tài)信息包括Topic信息和訂閱關(guān)系這些元數(shù)據(jù),同時要正確配置新Broker的config參數(shù),包括brokerName和NameServerIPList等,才能使得新BrokerStatefulSetsizereplicas后apply是無法做到的。實際上Kubernetes開發(fā)人員也發(fā)現(xiàn)了這些問題,因此引入了自定義資源和控制器的概念,讓開發(fā)人員可以直接用Go語言調(diào)用KubernetesAPI,編寫自定義資源和對這類代碼組件稱之為Operator。由具備RocketMQ領(lǐng)域知識的專家編寫Operator,KubernetesAPIKubernetesOperator是在Kubernetes基礎(chǔ)上通過擴展KubernetesAPI,用來創(chuàng)建、配置和管理復雜的有狀態(tài)應用,如分布式數(shù)據(jù)庫等。OperatorKubernetes1.7OperatorCRD(自定義資源)Controller(控Operator站在Kubernetes內(nèi)部視角,為應用的云原生化打開了新世界的大門。管理任務,這些自定義的控制器就像Kubernetes原生的組件一樣,Operator可以直KubernetesAPI進行開發(fā),也就是說他們可以根據(jù)這些控制器編寫的自定義規(guī)則來創(chuàng)建和更改Pods/Services、對正在運行的應用進行擴縮容。本文使用RocketMQOperator0.2.1版本,展示如何使用RocketMQOperator在Kubernetes上快速創(chuàng)建部署一個RocketMQ服務集群。準備好K8s環(huán)境,可以使用dockerdesktop自帶的K8s,或者克隆rocketmq-operatorK8s運行腳本安裝RocketMQ$$./install-檢查下RocketMQOperator是否安裝成功:$kubectlgetrocketmq-operator-564b5d75d-成功安裝時,rocketmq-operatorpod處于類似上面例子的running應用Broker和NameService自定義資源,創(chuàng)建RocketMQ集群;rocketmq-operatorexamplerocketmq_v1alpha1_rocketmq_cluster.yaml文件,快速部署一個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:注意到這個例子中storageMode:EmptyDir,表示存儲使用的是EmptyDir,數(shù)據(jù)會隨著Pod的刪除而抹去,因此該方式僅供開發(fā)測試時使用。一般使用HostPath或StorageClass來對數(shù)據(jù)進行持久化存儲。使用HostPath時,需要配置hostPath,聲明宿主機上掛載的目錄。使用storageClass時,需要配置volumeClaimTemplates,聲明PVC模版。具體可參考RocketMQOperator文檔。應用上面的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- 使用默認的rocketmq_v1alpha1_rocketmq_cluster.yaml文件配置,我們看到集1nameserver(name-service-0)2broker(11從)。好啦!到這里你已經(jīng)成功通過Operator提供的自定義資源部署了一個RocketMQ訪問這個RocketMQ集群中的Pod使用RocketMQ的tools.sh腳本運行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在另一個節(jié)點上運行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服務集群實例:清除RocketMQ$$./purge-三、按照OperatorHub官網(wǎng)指導安裝RocketMQ在OperatorHub.io網(wǎng)頁搜索RocketMQStreaming&MessagingRocketMQRocketMQOperatorInstall按照說明安裝OLM和RocketMQOLM(OperatorLifecycleManager參考:OLM安裝文檔UI訪問http://localhost:9000搜索RocketMQ或點擊AllItems分類中的Streaming&Messaging,找到RocketMQOperator并進行安裝;安裝完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實例。OperatorHubOLMRocketMQOperator將持續(xù)推送和維護新版本的RocketMQOperator至該平臺,方便用戶獲取最新更新或選擇合適的Operator版本。RocketMQOperator是Apache社區(qū)的開源項目,服務于阿里巴巴SaaS類交付們更好地完善RocketMQOperator。目前,RocketMQOperatorv0.2.1的PR已合并進入community-operators倉庫,RocketMQOperator進入OperatorHub.io后,用戶可以通過使用OLM(OperatorLifecycleManager)來安裝、訂閱RocketMQOperator,獲得持續(xù)的服務支RocketMQOperatorv0.2.1支持的功能主要包括:NameServer和Broker集群的自動創(chuàng)建,NameServer集群的無縫擴容(自動通知Broker集群更新NameServerIP列表),非順序消息下的Broker集群無縫擴容(新Broker實例會從BrokerCRD指定的源BrokerPod中同步元數(shù)據(jù),包括Topic信息和訂閱信息),以及Topic遷移等。下一步我們希望和社區(qū)一起進一步完善RocketMQOperator項目,包括灰度發(fā)最終實現(xiàn)通過Operator可以覆蓋RocketMQ服務全生命周期的管理。 RocketMQPrometheusExporterDevOps基于RocketMQ基于RocketMQPrometheusExporter打造定制化DevOps平 基于RocketMQPrometheusExporter打造定制化DevOps平臺|PCRocketMQ和落地、DevOps和監(jiān)控平臺有比較深入的研究。本文將對RocketMQ-Exporter的設(shè)計實現(xiàn)做一個簡單的介紹,讀者可以通過本文了解到RocketMQ-ExporterRocketMQ-Exporter來搭建自己的RocketMQ監(jiān)控系統(tǒng)。RocketMQ介紹Prometheus簡介RocketMQ-Exporter的具體實現(xiàn)RocketMQ-ExporterRocketMQ-Exporter使用示例一、RocketMQ介紹RocketMQ是一個分布式消息和流數(shù)據(jù)平臺,具有低延遲、高性能、高可靠性、萬億級容量和靈活的可擴展性。簡單的來說,它由Broker服務器和客戶端兩部分組成,ProducerBroker另外一個是消息的消費者客戶端(Consumer),多個消費者可以組成一個消費組,來訂閱和拉取消費Broker服務器上存儲的消息。正由于它具有高性能、高可靠性和高實時性的特點,與其他協(xié)議組件在MQTT等各種消息場景中的結(jié)合也越來越多,應用越來理平臺。而當前在開源界,使用最廣泛監(jiān)控解決方案的就是Prometheus。與其它傳統(tǒng)監(jiān)控系統(tǒng)相比較,Prometheus具有易于管理,監(jiān)控服務的內(nèi)部運行狀態(tài),強大的數(shù)據(jù)模型,強大的查詢語言PromQL,高效的數(shù)據(jù)處理,可擴展,易于集成,可視化,開放性等優(yōu)點。并且借助于Prometheus可以很快速的構(gòu)建出一個能夠監(jiān)控RocketMQ的二、Prometheus下圖展示了Prometheus的基本架構(gòu):PrometheusPrometheusServer是Prometheus組件中的核心部分,負責實現(xiàn)對監(jiān)控數(shù)據(jù)的獲取,存儲以及查詢。PrometheusServer可以通過靜態(tài)配置管理監(jiān)控目標,也可以ServiceDiscovery其次PrometheusServer需要對采集到的監(jiān)控數(shù)據(jù)進行存儲,PrometheusServer本最后PrometheusServer對外提供了自定義的PromQLExporter將監(jiān)控數(shù)據(jù)采集的端點通過HTTP服務的形式暴露給PrometheusServer,PrometheusServerExporterEndpoint端點,即可獲取到需要采集的監(jiān)控數(shù)據(jù)。RocketMQ-Exporter就是這樣一個Exporter,它首先從RocketMQ集群采集數(shù)據(jù),然后借助Prometheus提供的第三方客戶端庫將采集的數(shù)據(jù)規(guī)范化成符合Prometheus系統(tǒng)要求的數(shù)據(jù),Prometheus定時去從Exporter拉取數(shù)據(jù)即可。當前RocketMQExporter已被Prometheus官方收錄,其地址為//apache/rocketmq-三、RocketMQ-Exporter的具體實現(xiàn)整個系統(tǒng)基于springboot框架來實現(xiàn)。由于MQ內(nèi)部本身提供了比較全面的數(shù)ExporterMQ集群提供的統(tǒng)計信息取出然后進行加工而已。所以RocketMQ-Exporter的基本邏輯是內(nèi)部啟動多個定時任務周期性的從MQ集群拉取數(shù)據(jù),然后將數(shù)據(jù)規(guī)范化后通過端點暴露給Prometheus即可。其中MQAdminExt模塊通過封裝MQ系統(tǒng)客戶端提供的接口來獲取MQ集群內(nèi)部的MetricService負責將MQ集群返回的結(jié)果數(shù)據(jù)進行加工,使其符合PrometheusCollectPrometheus定時從Exporter拉取數(shù)據(jù)的時候,Exporter就將Collector收集的數(shù)據(jù)通過HTTP的形式在四、RocketMQ-Exporter的監(jiān)控指標和告警指標RocketMQ-Exporter主要是配合Prometheus來做監(jiān)控,下面來看看當前在Expoter中定義了哪些監(jiān)控指標和告警指標。topicucer_offset-消息堆積量(生產(chǎn)進度-消費進rocketmq_message_accumulation是一個聚合指標,需要根據(jù)其它上報指標聚合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>消費者堆積告警指標也是一個聚合指標,它根據(jù)消費堆積的聚合指標生成,value這個閾值對每個消費者是不固定的,當前是根據(jù)過去5分鐘生產(chǎn)者生產(chǎn)的消息數(shù)量來RoketMQ者堆積告警指標,在以往的監(jiān)控系統(tǒng)中,由于沒有像Prometheus那樣有強大的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這一條語句不僅可以實現(xiàn)為任意一個消費者創(chuàng)建消費告警堆積告五、RocketMQ-Exporter使用示例啟動NameServer和要驗證RocketMQ的Spring-Boot客戶端,首先要確保RocketMQ服務正確的下載并啟動??梢詤⒖糝ocketMQ主站的快速開始來進行操作。確保啟動NameServer和Broker已經(jīng)正確啟動。編譯RocketMQ-cdrocketmq-exportermvncleanRocketMQ-ExporterMQnameSrvHTTPjavajava-jarrocketmq-exporter-0.0.1-SNAPSHOT.jar[--9876"首先到Prometheus官方下載地址去下載Prometheus安裝包,當前以過如下的操作步驟就可以啟動prometheus進程。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默認監(jiān)聽端口號為9090,為了不與系統(tǒng)上的其它進程監(jiān)聽端口沖突,5555http://<服務器IP地址>:5555,就可以驗證Prometheus是否已成功安裝,顯示界面如下:由于RocketMQ-Exporter進程已啟動,這個時候可以通過Prometheus來抓取RocketMQ-Exporter的數(shù)據(jù),這個時候只需要更改Prometheus## 15s#Setthescrapeintervaltoevery15seconds.Defaultisevery1minute.#Loadrulesonceandperiodicallyevaluatethemaccordingtotheglobal'evaluation_#-#-job_name:'prometheus'targets:targets:更改配置文件后,重啟服務即可。重啟后就可以在Prometheus界面查詢RocketMQ-Exporter上報的指標,例如查詢rocketmq_broker_tps在Prometheus可以展示RocketMQ-Exporter的指標后,就可以在Prometheus中配置RocketMQ的告警指標了。在Prometheus的配置文件中添加如下的告警配置項,*.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的看一下告警展示效果,紅色表示當前處于告警狀態(tài)的Prometheus自身的指標展示平臺沒有當前流行的展示平臺Grafana好,為了更好的展示RocketMQ的指標,可以使用Grafana來展示Prometheus獲取的指標。首先到官網(wǎng)去下載/grafana/download,這里仍以二進制文件安wget/oss/release/grafana-6.2.5.lin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年外研銜接版八年級生物下冊月考試卷含答案
- 2025年滬科版八年級物理上冊階段測試試卷含答案
- 二零二五年度商業(yè)地產(chǎn)存量房轉(zhuǎn)讓合同模板4篇
- 2025年冀教版八年級英語下冊階段測試試卷
- 顏料制備工藝改進-洞察分析
- 2025年浙教版七年級科學上冊階段測試試卷
- 遺傳密碼解析-洞察分析
- 2025年人教新課標七年級化學上冊階段測試試卷含答案
- 特色農(nóng)產(chǎn)品加工節(jié)能減排-洞察分析
- 2025年度瓷磚生產(chǎn)設(shè)備進出口代理及清關(guān)服務合同4篇
- T-SDLPA 0001-2024 研究型病房建設(shè)和配置標準
- (人教PEP2024版)英語一年級上冊Unit 1 教學課件(新教材)
- 全國職業(yè)院校技能大賽高職組(市政管線(道)數(shù)字化施工賽項)考試題庫(含答案)
- 2024胃腸間質(zhì)瘤(GIST)診療指南更新解讀 2
- 光儲電站儲能系統(tǒng)調(diào)試方案
- 2024年二級建造師繼續(xù)教育題庫及答案(500題)
- 小學數(shù)學二年級100以內(nèi)連加連減口算題
- 建設(shè)單位如何做好項目管理
- 三年級上遞等式計算400題
- 一次性餐具配送投標方案
- 《中華民族多元一體格局》
評論
0/150
提交評論