在一家商業(yè)公司黄虱,采用任何一項(xiàng)新技術(shù)盐捷,包括開源技術(shù),都有一定的風(fēng)險(xiǎn)滞诺,即使這項(xiàng)技術(shù)具有顯著的技術(shù)優(yōu)勢(shì)。Apache Pulsar 的引入經(jīng)過了我們的深思熟慮和充分調(diào)研。我想跟大家分享一下我們使用和調(diào)研 Apache Pulsar 的經(jīng)驗(yàn)。因?yàn)槲覀兿嘈趴隙ㄓ衅渌臀覀冾愃频墓疽部梢詮?Pulsar 中受益斟湃。
Apache Pulsar 是我們?yōu)榱酥С?STICORP 客戶應(yīng)用而采用的一項(xiàng)關(guān)鍵技術(shù)坛缕。STICORP 是一家總部位于巴西的軟件公司陶衅。我們提供軟件解決方案來幫助 7,000 多家客戶管理和自動(dòng)化他們的稅務(wù)報(bào)告,幫助他們確保稅務(wù)報(bào)告的合規(guī)性焚刺,避免處罰屯远,并確定可以節(jié)省稅收的地方坡脐。這需要管理大量的稅務(wù)文檔,以及大量由客戶行為觸發(fā)產(chǎn)生的工作流程。這些稅務(wù)文檔包括發(fā)票,發(fā)貨和付款等瞪讼。在一天內(nèi)嫡霞,單個(gè)客戶可能就會(huì)產(chǎn)生超過 200,000 個(gè)需要我們進(jìn)行處理的稅務(wù)文檔。
歡迎工作一到五年的Java工程師朋友們加入Java技術(shù)交流:611481448
群內(nèi)提供免費(fèi)的Java架構(gòu)學(xué)習(xí)資料(里面有高可用、高并發(fā)装悲、高性能及分布式、Jvm性能調(diào)優(yōu)、Spring源碼,MyBatis溜畅,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個(gè)知識(shí)點(diǎn)的架構(gòu)資料)合理利用自己每一分每一秒的時(shí)間來學(xué)習(xí)提升自己浴捆,不要再用"沒有時(shí)間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個(gè)交代碌奉!
我們的系統(tǒng)通過與客戶和政府系統(tǒng)進(jìn)行集成自動(dòng)獲取這些稅務(wù)文檔哩都,并以便于客戶分析這些文檔背后的數(shù)據(jù)價(jià)值的方式組織它們盖呼。這些文檔的內(nèi)容和復(fù)雜性取決于需要解決的特定業(yè)務(wù)流程侯谁。例如墙贱,有些文檔是基于發(fā)票魁衙,發(fā)貨訂單,和客戶與供應(yīng)商之間的付款記錄等捌刮,而另外一些文檔是用于記錄這些活動(dòng)完成時(shí)的附加文檔堕扶。
處理這些文檔中的所有不同信息需要一個(gè)包含多個(gè)步驟的工作流程钾埂。文件通常以加密形式到達(dá),因此第一步是解密它們儡炼。然后將文檔中的 XML 格式的原始消息內(nèi)容轉(zhuǎn)換為 JSON 格式唬党。從那之后,這些文檔會(huì)被劃分到多個(gè)主題(Topic)并被丟到事件總線(Event Bus)上。其他工作流程會(huì)監(jiān)聽事件總線凌蔬,并處理這些文檔坎弯,最終將處理結(jié)構(gòu)匯總到下游的 Couchbase NoSQL 數(shù)據(jù)庫中,供其他應(yīng)用程序訪問。
性能和可擴(kuò)展性對(duì)我們來說至關(guān)重要愉择。因?yàn)樯蛇@些文檔的交易的天然性質(zhì),我們可以看到單個(gè)客戶在突發(fā)高峰時(shí)刻可能就會(huì)產(chǎn)生每秒 25,000 條消息。能夠支持大量主題對(duì)我們來說也很重要 - 能夠?qū)⑽臋n中的信息分解為多個(gè)主題峭梳,可以幫助我們更加輕松地組織和管理數(shù)據(jù),將數(shù)據(jù)正確的分發(fā)和連接到相應(yīng)的工作流進(jìn)行處理踱侣;但這也意味著我們對(duì)于單個(gè)客戶可能就需要使用 30 個(gè)不同的主題流济。
為什么我們需要新技術(shù)
我們最初使用 Apache Kafka 來實(shí)現(xiàn)事件總線。雖然我們有一個(gè)穩(wěn)定的 Kafka 基礎(chǔ)設(shè)施嘲玫,并且決定去做出基礎(chǔ)設(shè)施的改變通常并不容易,但我們意識(shí)到 Kafka 不是滿足我們需求的最佳技術(shù) -?Kafka 并不是為我們今天生活的云原生(Cloud Native)世界所設(shè)計(jì)的乔遮,因此我們需要花費(fèi)大量時(shí)間才能使其適用于我們的應(yīng)用程序坯辩。?我們使用 Kafka 面臨的主要挑戰(zhàn)是它不善于處理大量主題。此外,Kafka 的架構(gòu)讓我們感到痛苦 -因?yàn)?Kafka Broker 是綁定存儲(chǔ)狀態(tài)的资昧,擴(kuò)展或縮小 Kafka 集群需要重新平衡分區(qū)东揣,這會(huì)影響我們的性能和請(qǐng)求時(shí)延,并限制我們對(duì)工作負(fù)載變化做出反應(yīng)的方式和速度钟鸵。
部署 Apache Pulsar
在尋找替代方案時(shí)棺耍,我們了解了 Apache Pulsar 并決定對(duì)其進(jìn)行評(píng)估害幅。由于 Apache Kafka 和 Apache Pulsar 使用類似的消息概念,因此我們看到?所有的 Kafka 用例可以使用 Pulsar 實(shí)現(xiàn),其方式與使用與 Kafka 完全相同。兼容是促使我們切換到 Pulsar 的原因之一。
我們還注意到了 Pulsar 在架構(gòu)設(shè)計(jì)上與 Kafka 的一些重要差異箫踩。一個(gè)關(guān)鍵的區(qū)別是?存儲(chǔ)和計(jì)算的分離?- Pulsar Broker 是無狀態(tài)的,與存儲(chǔ)相互分離谭贪;而在 Kafka 的數(shù)據(jù)直接存儲(chǔ)在 Broker 上境钟。這是架構(gòu)設(shè)計(jì)差異上的一個(gè)例子,它允許 Pulsar 能夠?qū)崿F(xiàn)一些在 Kafka 上做很困難或不可能的事情俭识。這其中的例子包括:
主題可擴(kuò)展性:我們需要擁有超過 100,000 個(gè)主題(不考慮增長)慨削,這不僅有助于我們管理應(yīng)用程序處理的不同類型的數(shù)據(jù),還允許個(gè)別客戶使用自定義應(yīng)用程序連接到系統(tǒng)中的數(shù)據(jù)套媚。Pulsar 的架構(gòu)可以輕松處理數(shù)百萬個(gè)主題缚态。
性能:由于 Pulsar 的分層架構(gòu),以及 IO 隔離的特性凑阶,讀取和寫入使用不同的物理存儲(chǔ)猿规。因此,讀取的峰值根本不會(huì)影響寫入性能宙橱,反之亦然姨俩。Pulsar 還支持非持久性主題蘸拔,允許非常高的吞吐量,完全不需要持久性的主題环葵,這對(duì)于實(shí)時(shí)應(yīng)用程序非常有用调窍。
消息隊(duì)列: Pulsar 提供了統(tǒng)一的消息模型,不僅支持類似 Kafka 的消費(fèi)模式张遭,也支持消息隊(duì)里的消費(fèi)模式邓萨。在不需要考慮有序性的應(yīng)用場景中,Pulsar 可以直接當(dāng)消息隊(duì)列進(jìn)行使用菊卷。Pulsar 在訂閱(Subscription)級(jí)別而不是主題級(jí)別執(zhí)行此操作缔恳,因?yàn)槟憧梢栽谕粋€(gè)主題中同時(shí)有按序消費(fèi)的消費(fèi)者和不按序消費(fèi)的消費(fèi)者,這對(duì)于很多場景是非常有價(jià)值洁闰。另一個(gè)場景歉甚,如果新的消費(fèi)者需要從頭開始讀取一個(gè)主題里面的所有消息,那么對(duì)于 Kafka 來說扑眉,你將被迫要么犧牲吞吐量纸泄,要么重新平衡分區(qū),或者要么犧牲有序性腰素。而使用 Pulsar聘裁,您只需添加新訂閱,Pulsar 就會(huì)將消息扇出到新增的消費(fèi)者弓千,以增加新消費(fèi)者的吞吐量衡便。
操作更簡單:使用 Apache Kafka,任何容量擴(kuò)展都需要重新平衡分區(qū)计呈,同時(shí)還需要將被平衡的分區(qū)重新拷貝到新添加的 Broker 上砰诵。使用 Pulsar,我們可以輕松添加和刪除節(jié)點(diǎn)捌显,而無需重新平衡整個(gè)集群茁彭。此外,使用 Pulsar扶歪,你永遠(yuǎn)不必?fù)?dān)心一個(gè)分區(qū)是否會(huì)超過 Broker 的物理磁盤空間理肺;但是在 Kafka 中,一個(gè)分區(qū)的容量不能超過一臺(tái) Broker 的物理磁盤空間善镰。
無限的數(shù)據(jù)保留期:我們的一些客戶甚至需要在幾個(gè)月后訪問他們的文檔妹萨。我們希望能夠?qū)?shù)據(jù)保存在 Pulsar 中,而不會(huì)刪除它炫欺,并在以后需要時(shí)使用它乎完。這樣我們不必重新從客戶或者政府部門導(dǎo)入數(shù)據(jù),我們也不必?fù)?dān)心丟失消息品洛。當(dāng)我們需要使用新的一套系統(tǒng)來執(zhí)行一個(gè)新的業(yè)務(wù)流程時(shí)树姨,我們不需要訪問數(shù)據(jù)庫摩桶,我們可以簡單地將文檔從消息總線中拉取出并為新的業(yè)務(wù)流程重新處理它們即可。
由于 Apache Pulsar 提供了太多無法忽視的優(yōu)點(diǎn)帽揪,我們決定實(shí)施并部署了 Apache Pulsar硝清,在使用的過程中也對(duì) Apache Pulsar 非常滿意。我們已經(jīng)將超過 30%的生產(chǎn)數(shù)據(jù)流遷移到 Pulsar转晰,并計(jì)劃在未來六個(gè)月內(nèi)將所有數(shù)據(jù)流都遷移到 Pulsar芦拿。
喜歡小編輕輕點(diǎn)個(gè)關(guān)注吧!