本篇文章為大家展示了如何進(jìn)行Apache Pulsar 與 Kafka的延遲性比較,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
在羅平等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專(zhuān)注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制開(kāi)發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷(xiāo)推廣,外貿(mào)網(wǎng)站建設(shè),羅平網(wǎng)站建設(shè)費(fèi)用合理。
重點(diǎn)討論 Pulsar 與 Kafka 的延遲性
下面將詳細(xì)介紹 Pulsar 與 Kafka 的測(cè)試結(jié)果(下圖紅色內(nèi)容)。Fsync 狀態(tài)是實(shí)驗(yàn)中的一個(gè)變量,此外,為了更好地對(duì)比二者,測(cè)試者還調(diào)整了分區(qū)的數(shù)量。
Apache Pulsar 的測(cè)試結(jié)果
小編將詳細(xì)介紹 Apache Pulsar 延遲性的測(cè)試結(jié)果。我們會(huì)先介紹開(kāi)啟 fsync 的測(cè)試結(jié)果(Pulsar 默認(rèn)的工作方式),再介紹關(guān)閉消息 flush 的測(cè)試結(jié)果。
對(duì)于每個(gè)工作負(fù)載,有兩張圖可供參考:一張圖是測(cè)試期間發(fā)布延遲的 p99,另一張圖是平均端到端延遲。另外,這兩張圖后附有在測(cè)試期間匯總延遲測(cè)量值并整理成的表格,提供延遲分布數(shù)據(jù)。
發(fā)布延遲的百分比計(jì)算比端到端延遲更準(zhǔn)確,因?yàn)槎说蕉搜舆t使用的是自動(dòng)設(shè)置在消息頭中的時(shí)間戳,并且該時(shí)間戳的精度為毫秒,而發(fā)布延遲的精度為納秒。
所有測(cè)試均使用 100 字節(jié)的消息。在 15 分鐘測(cè)試期間,僅使用兩個(gè)客戶端(生產(chǎn)與消費(fèi))服務(wù)器,且生產(chǎn)速率和消費(fèi)速率恒定為每秒 5 萬(wàn)條消息。測(cè)試使用的 Apache Pulsar 版本為 2.4.0。
開(kāi)啟 fsync 時(shí)的延遲測(cè)試
測(cè)試 1:1 個(gè) topic,1 個(gè)分區(qū)
測(cè)試 2:1 個(gè) topic,6 個(gè)分區(qū)
測(cè)試 3:1 個(gè) topic,16 個(gè)分區(qū)
討論
由于在 Pulsar 和 Kafka 中,分區(qū)都是并行單位,我們期待在分區(qū)數(shù)量增加時(shí),延遲減小,實(shí)際測(cè)試結(jié)果也的確如此。總體而言,分區(qū)數(shù)量增加,發(fā)布延遲和端到端延遲都減小了。
每次測(cè)試中都有異常值,但是延遲最大值始終不超過(guò) 267 毫秒。發(fā)布延遲比端到端延遲數(shù)值波動(dòng)更小。在所有測(cè)試中,發(fā)布延遲的 p9999 始終沒(méi)有超過(guò) 11.6 毫秒。在 16 個(gè)分區(qū)的端到端延遲測(cè)試中,分區(qū)對(duì)延遲的影響最為明顯。16 個(gè)分區(qū)測(cè)試的平均延遲(3 毫秒)是 1 個(gè)分區(qū)測(cè)試(9 毫秒)的三分之一。Pulsar 的發(fā)布延遲不隨時(shí)間而變化。所有測(cè)試運(yùn)行時(shí)間均為 15 分鐘。如圖所示,測(cè)試期間平均發(fā)布延遲波動(dòng)很小。端到端延遲隨時(shí)間發(fā)生變化,在 90 秒內(nèi),平均延遲波動(dòng)為 2 毫秒,并且延遲波動(dòng)值幾乎恒定。例如,端到端延遲的平均值為 1 個(gè)分區(qū) 9 毫秒,16 個(gè)分區(qū) 3 毫秒,但是變化值始終不超過(guò) 2 毫秒(9 毫秒增至 11 毫秒,3 毫秒變?yōu)?5 毫秒)。?????♂?關(guān)閉 fsync 時(shí)的延遲測(cè)試除了通過(guò)在 bookkeeper.conf 文件中設(shè)置 journalSyncData=false,以禁用刷新每條消息到磁盤(pán),并重啟 Pulsar broker 和 BookKeeper 外,其他測(cè)試條件均相同。測(cè)試 4:1 個(gè) topic,1 個(gè)分區(qū)測(cè)試 5 :1 個(gè) topic,6 個(gè)分區(qū)
測(cè)試 6:1 個(gè) topic,16 個(gè)分區(qū)
討論
和預(yù)想的一樣,不啟用 Flush 時(shí),延遲減小,但不會(huì)減小太多。例如,1 個(gè)分區(qū)開(kāi)啟 Flush 時(shí),p99 的發(fā)布延遲為 4.129 毫秒,而在不開(kāi)啟 Flush 時(shí),發(fā)布延遲為 3.928 毫秒。在 16 個(gè)分區(qū)測(cè)試中,是否開(kāi)啟 Flush 對(duì)延遲幾乎沒(méi)有影響。在相同時(shí)間間隔內(nèi),端到端延遲周期性 2 毫秒的變化值和之前測(cè)試中一樣(圖中的波峰處)。禁用 Flush 會(huì)損失一些持久性,因此在使用 Apache Pulsar 時(shí),從延遲角度來(lái)看,禁用 Flush 并無(wú)益處。
Apache Kafka 的測(cè)試結(jié)果
由于 Kafka 默認(rèn)關(guān)閉 Flush,所以我們先進(jìn)行此項(xiàng)測(cè)試。與 Pulsar 測(cè)試一樣,所有測(cè)試都使用 100 字節(jié)的消息,消息速率為每秒 5 萬(wàn)條,僅使用兩個(gè)客戶端。在測(cè)試期間記錄延遲,并整理成表格。
測(cè)試使用的 Apache Kafka 版本為 2.11-2.3.0。
?????♂?關(guān)閉 fsync 時(shí)的延遲測(cè)試測(cè)試 7:1 個(gè) topic,1 個(gè)分區(qū)測(cè)試 8:1 個(gè) topic,6 個(gè)分區(qū)
測(cè)試 9:1 個(gè) topic,16 個(gè)分區(qū)
討論
首先看一下 1 個(gè)分區(qū)情況下的發(fā)布延遲,Kafka 對(duì)消息關(guān)閉 Flush 時(shí),延遲小于 Pulsar(刷新時(shí)延遲為 2.969 毫秒,不刷新時(shí)延遲為 2.72 毫秒)。但是,在延遲分布中,可以看到 Pulsar 和 Kafka 的主要區(qū)別。
Pulsar 的延遲分布更集中,從 p50 到 p999,延遲從 2.916 毫秒增至 4.095 毫秒),而 Kafka 的延遲在 p999 達(dá)到 149.616 毫秒,結(jié)果相差很多。在 1 個(gè)分區(qū)的 p99,Pulsar 的延遲為 52.958 毫秒,而 Kafka 的延遲幾乎是 Pulsar 延遲的 4 倍,為 201.701 毫秒。我們?cè)诒容^默認(rèn)模式下的不同,因此對(duì) Pulsar 啟用 Flush,Kafka 不啟用 Flush。如果禁用 Pulsar 的磁盤(pán) Flush,則 p999的延遲降為僅 4.508 毫秒。觀察 p99 的發(fā)布延遲就會(huì)發(fā)現(xiàn),Kafka 測(cè)試中出現(xiàn)大量異常值的原因很明顯。當(dāng)發(fā)布延遲從個(gè)位數(shù)躍升至 100 毫秒以上時(shí),Kafka 出現(xiàn)了周期性峰值。分區(qū)數(shù)量增加,發(fā)布延遲的變化減小,但仍然存在。將其與 Pulsar 進(jìn)行比較就會(huì)發(fā)現(xiàn),整個(gè)測(cè)試期間,p99 的發(fā)布延遲基本上是一條直線。Pulsar 與 Kafka 之間的另一個(gè)不同點(diǎn)在于,分區(qū)數(shù)量增加,Pulsar 的發(fā)布延遲減小,而 Kafka 的發(fā)布延遲增大。雖然在 1 個(gè)分區(qū)測(cè)試中,Kafka 的平均發(fā)布延遲比 Pulsar 低,但在 6 個(gè)分區(qū)和 16 個(gè)分區(qū)測(cè)試中,Pulsar 的發(fā)布延遲更低。在 16 個(gè)分區(qū)測(cè)試中,Pulsar 的平均發(fā)布延遲小于 3 毫秒,而 Kafka 的平均發(fā)布延遲則約為 8.5 毫秒。再看平均端到端延遲,1 個(gè)分區(qū)測(cè)試中,Kafka 的測(cè)試結(jié)果更好,但在分區(qū)數(shù)量增加時(shí),端到端延遲與發(fā)布延遲相似,都隨之增大。在 16 個(gè)分區(qū)測(cè)試中,Kafka 的平均端到端延遲為 11 毫秒,而 Pulsar 的平均值則接近 3 毫秒。在 Pulsar 測(cè)試中,可以觀察到周期性 2 毫秒的峰值。在 Kafka 測(cè)試中,可以看到峰值更為頻繁,且數(shù)值更高,通常在 5 毫秒以上。?????♂?
開(kāi)啟 fsync 時(shí)的延遲測(cè)試除了啟用每條消息刷新(fsync),對(duì)測(cè)試中的每個(gè) topic 進(jìn)行配置(flush.messages=1, flush.ms=0),測(cè)試條件與之前完全相同。測(cè)試 10:1 個(gè) topic,1 個(gè)分區(qū)測(cè)試 11:1 個(gè) topic,6 個(gè)分區(qū)
測(cè)試 12:1 個(gè) topic,16 個(gè)分區(qū)
討論
Pulsar 的默認(rèn)模式為啟用 Flush,這組對(duì)比測(cè)試結(jié)果顯示 Pulsar 表現(xiàn)更好。在 1 個(gè)分區(qū)測(cè)試中,不啟用 Flush 時(shí),Kafka 表現(xiàn)更好,當(dāng)都設(shè)置為啟用 Flush 時(shí),Pulsar 的平均延遲為 2.969 毫秒,而 Kafka 的平均延遲則超出 Pulsar 的兩倍,為 6.652 毫秒。分區(qū)數(shù)量增加,Kafka 的延遲增大,在 16 個(gè)分區(qū)測(cè)試中,Pulsar 的延遲為 2.72 毫秒,而 Kafka 的延遲為 18.454 毫秒,超出 Pulsar 測(cè)試結(jié)果的 6 倍。當(dāng)配置 Kafka 為啟用 Flush 時(shí),仍然會(huì)出現(xiàn)較大的發(fā)布延遲峰值,不過(guò)發(fā)生頻率不高。在 Kafka 中,啟用 Flush 會(huì)增加端到端延遲。Kafka 在 1 個(gè)分區(qū)中表現(xiàn)更好(7.129毫秒 vs 9.052 毫秒),而 Pulsar 在 6 個(gè)分區(qū)和 16 個(gè)分區(qū)中表現(xiàn)更好。隨著時(shí)間的推移,Kafka 的端到端延遲會(huì)出現(xiàn)高達(dá) 5 毫秒的峰值。基于以上測(cè)試結(jié)果,總結(jié)如下:1. 隨著時(shí)間的推移,Pulsar 延遲的可預(yù)測(cè)性更高。與 Kafka 相比,Pulsar 延遲隨時(shí)間變化的曲線更平滑。對(duì)比圖表(6 個(gè)分區(qū),平均端到端延遲,不刷新)顯示,Kafka 的延遲低于 Pulsar,但是 Pulsar 的延遲值更為穩(wěn)定。
2. Pulsar 的延遲變化不大。Kafka 測(cè)試顯示,大多數(shù)情況下,p999 延遲增加。而在 Pulsar 測(cè)試中,只有極少數(shù)情況下,延遲的 p999 會(huì)增加。對(duì)比圖表(6 個(gè)分區(qū),p99 的發(fā)布延遲,開(kāi)啟 fsync)顯示,與 Kafka 相比,Pulsar 的延遲值更穩(wěn)定。3. 在使用單一 producer 和單一 consumer 時(shí),Pulsar topic 分區(qū)數(shù)量增加,延遲減??;Kafka topic 分區(qū)數(shù)量增加,延遲增大。
4. 在最高的要求消息要持久化的前提下(保證不丟消息),Pulsar 的延遲低于 Kafka。
5. 關(guān)閉 fsync,Pulsar 會(huì)有更小的延遲,不能保證消息的持久性
對(duì)于延遲敏感工作負(fù)載而言,Pulsar 整體表現(xiàn)更好。Pulsar 可以保證一致的低延遲與強(qiáng)持久性。當(dāng)然,并不是所有的工作負(fù)載都對(duì)延遲敏感。為提高吞吐量,可能需要承擔(dān)延遲性更高的代價(jià)。上述內(nèi)容就是如何進(jìn)行Apache Pulsar 與 Kafka的延遲性比較,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標(biāo)題:如何進(jìn)行ApachePulsar與Kafka的延遲性比較
當(dāng)前鏈接:
http://weahome.cn/article/ipjedg.html