12. kafka壓測:3臺廉價服務(wù)器支撐200萬TPS

這篇文章是關(guān)于LinkedIn如何用kafka作為一個中央發(fā)布-訂閱日志,在應(yīng)用程序,流處理尔苦,hadoop數(shù)據(jù)提取之間集成數(shù)據(jù)。無論如何行施,kafka日志一個好處就是廉價允坚。百萬級別的TPS都不是很大的事情。因為日志比起數(shù)據(jù)庫或者K-V存儲是更簡單的東西蛾号。我們的生產(chǎn)環(huán)境kafka集群每天每秒處理上千萬讀寫請求稠项,并且只是構(gòu)建在一個非常普通的硬件上。

接下來讓我們做一些壓測鲜结,看看kafka究竟多么牛逼展运。

Kafka in 30 seconds

為了幫助理解接下來的壓測活逆,首先讓我們大概了解一下kafka是什么,以及一些kafka工作的細節(jié)拗胜。kafka是LinkedIn開發(fā)一個分布式消息系統(tǒng)蔗候,現(xiàn)在是 Apache Software Foundation的成員之一,并且非常多的公司在使用kafka埂软。

生產(chǎn)者將記錄發(fā)送到kafka集群锈遥,集群保留這些記錄并將其交給消費者;


01-producer_consumer.png

kafka一個最核心的概念就是topic(筆者在這里并不打算翻譯它勘畔,無論翻譯成什么都覺得變味了)所灸。生產(chǎn)者發(fā)布記錄到topic,消費者訂閱一個或多個topic咖杂。kafka的topic實際上就是一個分區(qū)后的write-ahead log庆寺。生產(chǎn)者把需要發(fā)布的記錄追加到這些日志后面。消費者訂閱它們诉字。每一個記錄都是一個K-V對懦尝,key主要用于分配記錄到日志分區(qū)。

下圖是一個簡單的示例圖壤圃,生產(chǎn)者如何寫記錄到一個擁有兩個分區(qū)的topic陵霉,以及消費者如何讀這個topic:


02-partitioned_log_0.png

上圖展示了生產(chǎn)者如何追加日志到兩個分區(qū),以及消費者讀取日志伍绳。日志中每條記錄都有一個相關(guān)的條目編號踊挠,我們把它稱為offset。消費者使用offset來描述其在每個日志中的位置冲杀。

這些分區(qū)分區(qū)在集群的各個服務(wù)器上效床。

需要注意kafka與很多消息系統(tǒng)不一樣,它的日志總是持久化权谁,當接收到消息后剩檀,會立即寫到文件系統(tǒng)。消費者讀消息時消息并不會被刪除旺芽。它的保留策略通過配置來決定沪猴。這就允許在數(shù)據(jù)使用者可能需要重新加載數(shù)據(jù)的情況下使用。并且也能節(jié)省空間采章,無論多少消費者运嗜,日志共享一份。

傳統(tǒng)的消息系統(tǒng)悯舟,常常一個消費者一個隊列担租,因此增加消費者,數(shù)據(jù)空間就會成倍增加抵怎。這使得Kafka非常適合普通消息傳遞系統(tǒng)之外的事物翩活,例如充當離線數(shù)據(jù)系統(tǒng)(如Hadoop)的管道阱洪。 這些離線系統(tǒng)可能僅作為周期性ETL周期的一部分在一定時間間隔加載,或者可能會停機幾個小時進行維護菠镇,在此期間冗荸,如果需要,Kafka能夠緩沖甚至TB量級的未消耗數(shù)據(jù)利耍。

kafka也復(fù)制日志到多臺服務(wù)器上蚌本,為了容錯。復(fù)制實現(xiàn)是kafka一個非常重要的架構(gòu)特性隘梨。和其他消息系統(tǒng)相比程癌,復(fù)制不是一種需要復(fù)雜配置的異乎尋常的插件,只能在非常特殊的情況下使用轴猎。 相反嵌莉,kafka的架構(gòu)復(fù)制被假定為默認值:我們將未復(fù)制的數(shù)據(jù)視為復(fù)制因子恰好為1的特殊情況。

生產(chǎn)者在發(fā)布包含記錄偏移量的消息時會收到確認捻脖。發(fā)送到同一個分區(qū)的第一條記錄分配的offset為0锐峭,第二條是1,以此類推可婶。消費者通過offset指定的位置消費數(shù)據(jù)沿癞,并且消費者通過周期性的提交topic(名為__consumer_offsets)從而保存代表消息位置的offset到日志中,達到持久化的目標矛渴。保存這個offset的目的是為了消費者崩潰后椎扬,其他消費者能從保存的位置繼續(xù)消費消息。

kafka簡單介紹到此為止具温,系統(tǒng)這一切都有意義蚕涤。

This Benchmark

對于此次基準測試,我喜歡遵循我稱之為“懶惰基準測試(lazy benchmarking)”的風(fēng)格铣猩。當您使用系統(tǒng)時揖铜,您通常擁有將其調(diào)整到任何特定用例的完美的專有技術(shù)。這導(dǎo)致了一種基準測試剂习,您可以將配置大幅調(diào)整到基準測試,或者更糟糕的是針對您測試的每個場景進行不同的調(diào)整较沪。我認為系統(tǒng)的真正測試不是它在完美調(diào)整時的表現(xiàn)鳞绕,而是它如何“現(xiàn)成”執(zhí)行。對于在具有數(shù)十個或數(shù)百個用例的多租戶設(shè)置中運行的系統(tǒng)尤其如此尸曼,其中針對每個用例的調(diào)優(yōu)不僅不切實際而且不可能们何。因此,我?guī)缀鯃猿质褂梅?wù)器和客戶端的默認設(shè)置控轿。我將指出我懷疑通過一點調(diào)整可以改善結(jié)果的區(qū)域冤竹,但我試圖抵制任何擺弄自己以改善結(jié)果的誘惑拂封。

配置和壓測命令文末會貼出來,所以如果你感興趣的話鹦蠕,在你們的服務(wù)器上也能重現(xiàn)本文的壓測結(jié)果冒签。

The Setup

本次測試,總計6臺服務(wù)器钟病,配置如下:

  • Intel Xeon 2.5 GHz processor with six cores
  • Six 7200 RPM SATA drives
  • 32GB of RAM
  • 1Gb Ethernet

kafka集群安裝在其中的3臺服務(wù)器上萧恕,6塊硬盤直接掛載,沒有RAID肠阱。另外三臺服務(wù)器用于Zookeeper和壓力測試票唆。

3臺服務(wù)器的集群不是很大,但是因為我們只測試復(fù)制因子為3屹徘,所以三臺服務(wù)器集群足夠走趋。顯而易見的是,我們能通過增加更多的分區(qū)噪伊,傳播數(shù)據(jù)到更多的服務(wù)器上來水平擴展我們的集群簿煌。

這些硬件不是LinkedIn平常使用的kafka硬件。我們的kafka服務(wù)器有針對性的調(diào)優(yōu)酥宴,能更好的運行的運行kafka啦吧。這次測試,我從Hadoop集群中借用了這幾臺服務(wù)器拙寡,這些服務(wù)器都是我們持久化系統(tǒng)中最便宜的設(shè)備授滓。 Hadoop的使用模式與Kafka非常相似,所以這是一件合理的事情肆糕。

Producer Throughput

接下來的測試是壓測生產(chǎn)者的吞吐量般堆,測試過程中沒有消費者運行,因此所有消息被持久化(稍后會測試生產(chǎn)者和消費者都存在的場景)诚啃,但是沒有被讀取淮摔。

Single producer thread, no replication

  • 821,557 records/sec
  • 78.3 MB/sec

這第一個測試基于的topic:6個分區(qū),沒有副本始赎。然后單線程盡可能快的產(chǎn)生5千萬個小記錄(100byte)和橙。在這些測試中關(guān)注小記錄的原因是它對于消息系統(tǒng)來說是更難的情況。如果消息很大造垛,很容易以MB/秒獲得良好的吞吐量魔招,但是當消息很小時反而很難獲得良好的吞吐量,因為處理每個消息的開銷占主導(dǎo)地位五辽。

一個直接的觀察是办斑,這里的壓測數(shù)據(jù)遠高于人們的預(yù)期,特別是對于持久存儲系統(tǒng)。 如果您習(xí)慣于隨機訪問數(shù)據(jù)系統(tǒng)(如數(shù)據(jù)庫或鍵值存儲)乡翅,通常會產(chǎn)生大約5,000到50,000次查詢的最大吞吐量鳞疲,這接近于良好的RPC層可以執(zhí)行的速度遠程請求。 由于兩個關(guān)鍵設(shè)計原則蠕蚜,我們超過了這一點:

  1. 我們努力確保我們進行線性磁盤I/O尚洽。這些服務(wù)器提供的六塊廉價磁盤的線性總吞吐量為822 MB /秒。許多消息系統(tǒng)將持久性視為昂貴的附加組件波势,認為其會降低性能并且應(yīng)該謹慎使用翎朱,但這是因為它們沒有進行線性I/O.
  2. 在每個階段,我們都致力于將少量數(shù)據(jù)批量合并到更大的網(wǎng)絡(luò)和磁盤I/O操作中尺铣。 例如拴曲,在新生產(chǎn)者中,我們使用“group commit”類似的機制來確保在另一個I/O正在進行中時發(fā)起的任何記錄被組合在一起凛忿。 有關(guān)了解批處理重要性的更多信息澈灼,請參閱David Patterson寫的"Latency Lags Bandwidth"。

Single producer thread, 3x async replication

  • 786,980 records/sec
  • 75.1 MB/sec

這次測試和前一次的測試幾乎一樣店溢,除了每個分區(qū)有三個副本(因此寫到網(wǎng)絡(luò)或者磁盤的數(shù)據(jù)是前一次的三倍)叁熔。每個服務(wù)器都從生產(chǎn)者那里為它作為leader分區(qū)執(zhí)行寫操作,以及為其作為follower分區(qū)獲取和寫入數(shù)據(jù)床牧。

本次測試的復(fù)制是異步的荣回,即acks=0。消息只要寫到本地日志即可戈咳,不需要等待這個分區(qū)的其他副本收到消息心软。這就意味著,如果leader崩潰著蛙,可能會丟失最新的一些還未同步到副本的消息删铃。

我希望人們能從中得到的關(guān)鍵是復(fù)制可以更快。對應(yīng)3x復(fù)制踏堡,集群總寫入能力有3倍的退化猎唁,因為每個寫操作要做3次。但是每個客戶端的吞吐量依然表現(xiàn)不錯顷蟆。 高性能復(fù)制在很大程度上取決于我們的消費者的效率诫隅,后面會在消費者部分討論。

Single producer thread, 3x sync replication

  • 421,823 records/sec
  • 40.2 MB/sec

此次測試和前面的測試一樣帐偎,除了leader需要等待所有in-sync replicas確認收到消息才會返回結(jié)果給生產(chǎn)者逐纬。即acks=all或者acks=-1。這種模式下肮街,只要有一個in-sync replica存在风题,消息就不會丟失判导。

Kafka中的同步復(fù)制與異步復(fù)制沒有根本的不同嫉父。分區(qū)leader總是跟蹤follower副本進度沛硅,監(jiān)控它們是否存在。在所有in-sync replicas確認收到消息之前绕辖,我們永遠不會向消費者發(fā)出消息摇肌。使用同步復(fù)制,我們要等待響應(yīng)給生產(chǎn)者的請求仪际,直到follower副本都已經(jīng)復(fù)制围小。

這種額外的延遲似乎會影響我們的吞吐量。由于服務(wù)器上的代碼路徑非常相似树碱,我們可以通過調(diào)整批處理來更好地改善這種影響肯适,并允許客戶端緩沖更多未完成的請求。 但是成榜,本著避免特殊情況調(diào)整的原則框舔,我沒有這么做。

Three producers, 3x async replication

  • 2,024,032 records/sec
  • 193.0 MB/sec

我們的單一生產(chǎn)者處理顯然不能壓出三節(jié)點集群的能力上限赎婚。為了增加負載刘绣,重復(fù)前面的異步復(fù)制模式測試流程,但是在三臺不同服務(wù)器上運行三個不同的生產(chǎn)者(在同一臺機器上運行更多進程將無助于我們使NIC飽和)挣输。然后纬凤,我們可以查看這三個生產(chǎn)者的總吞吐量,以更好地了解群集的總?cè)萘俊?/p>

Producer Throughput VS. Stored Data

許多消息系統(tǒng)一個隱藏的危險是撩嚼,只有在他們保存的數(shù)據(jù)在內(nèi)存中才會工作的很好停士。當數(shù)據(jù)備份不能被消費時(數(shù)據(jù)就需要存儲到磁盤上),吞吐量會下降幾個等級绢馍,甚至更多向瓷。這就意味著只有在消費者速度能跟上生產(chǎn)者,并且隊列是空的情況下系統(tǒng)才會運行良好舰涌。一旦消費者落后猖任,沒有消費的消息需要備份,備份可能會使數(shù)據(jù)持久化到磁盤上瓷耙,這就會引起性能大幅下降朱躺。這意味著消息傳遞系統(tǒng)無法跟上傳入的數(shù)據(jù)。這種情況非常嚴重搁痛,消息系統(tǒng)在大部分情況下长搀,應(yīng)該能做到平和的處理隊列中的消息。

kafka總是采用追加的方式持久化消息鸡典,并且對于沒有消費的數(shù)據(jù)源请,持久化的的時間復(fù)雜度是 O(1)。

這次實驗測試,讓我們在一段延長的時間內(nèi)運行吞吐量測試谁尸,并在存儲的數(shù)據(jù)集增長時繪制結(jié)果圖:


03-throughput_vs_size_0.png

如圖所示舅踪,性能并沒有明顯的變化。但是由于數(shù)據(jù)大小所以沒有影響:我們在寫入TB數(shù)據(jù)之后也表現(xiàn)得同樣好良蛮,就像前幾百MB一樣抽碌。

圖中的性能波動主要是因為Linux系統(tǒng)I/O管理批量處理數(shù)據(jù),周期性的把數(shù)據(jù)flush到磁盤决瞳。LinkedIn的kafka生產(chǎn)環(huán)境上針對這個有一些調(diào)優(yōu)货徙。可以參考kafka Hardware and OS皮胡。

Consumer Throughput

OK痴颊,現(xiàn)在讓我們把注意力轉(zhuǎn)移到消費者吞吐量上來。

請注意屡贺,復(fù)制因子不會影響此測試的結(jié)果祷舀。因為不管復(fù)制因子如何,消費者只能從一個副本讀取烹笔。 同樣裳扯,生產(chǎn)者的確認級別(acks參數(shù))也無關(guān)緊要,因為消費者只讀取完全確認的消息(所有In-Sync Replicas都已經(jīng)同步的消息才能被消費)谤职。 這是為了確保消費者看到的任何消息在leader切換后始終存在(如果當前l(fā)eader發(fā)生異常需要重新選舉新的leader的話)饰豺。

Single Consumer

  • 940,521 records/sec
  • 89.7 MB/sec

第一次測試:將在有6個分區(qū),3個副本的topic中單線程消費5千萬條消息允蜈。

kafka消費者效率很高冤吨,它直接從linux文件系統(tǒng)中抓取日志塊。它通過sendfile這個API饶套,直接通過操作系統(tǒng)傳輸數(shù)據(jù)漩蟆,所以沒有通過應(yīng)用程序復(fù)制此數(shù)據(jù)的開銷。

本次測試實際上從日志初始位置開始妓蛮,因此它在做真正的讀I/O怠李。但是在生產(chǎn)環(huán)境中,消費者幾乎完全從OS頁面緩存中讀取蛤克,因為它正在讀取剛剛由某個生產(chǎn)者產(chǎn)生的數(shù)據(jù)(這些數(shù)據(jù)仍然在緩存中)捺癞。事實上,如果您在生產(chǎn)服務(wù)器上運行相關(guān)命令查看I/O stat构挤,會看到消耗大量數(shù)據(jù)被消費髓介,也根本沒有物理讀取。

讓消費者盡可能cheap筋现,是我們希望kafka做的一件非常重要的事情唐础。首先箱歧,副本也是消費者。所以一膨,讓消費者cheap叫胁,副本也會cheap。其次汞幢,這樣會是處理數(shù)據(jù)不是非常昂貴的操作。因此出于可伸縮性的原因微谓,我們不需要嚴格控制森篷。

cheap字面含義是便宜,但是在這里的含義豺型,我覺得是業(yè)務(wù)邏輯不要太復(fù)雜仲智。

Three Consumers

  • 2,615,968 records/sec
  • 249.5 MB/sec

重復(fù)上面相同的測試,不同的是有三個消費者并行處理姻氨。三個消費者分布在三臺不同服務(wù)器上钓辆。這三個消費者屬于同一個消費者組中的成員,即它們消費同樣的topic肴焊。

和我們預(yù)期一樣前联,我們看到消費能力線性擴展,幾乎就是單個消費者吞吐量的3倍娶眷,這一點都不令人驚訝似嗤。

Producer and Consumer

  • 795,064 records/sec
  • 75.8 MB/sec

上面的測試僅限于生產(chǎn)者和消費者運行在不同服務(wù)器。現(xiàn)在届宠,讓我們把生產(chǎn)者和消費者運行在同一臺服務(wù)器上烁落。實際上,我們也是這樣做的豌注,因為這樣的話伤塌,復(fù)制工作就是讓服務(wù)器本身充當消費者。

對于此次測試轧铁,我們將基于6個分區(qū)每聪,3個副本的topic,分別運行1個生產(chǎn)者和1個消費者齿风,并且topic初始為空熊痴。 生產(chǎn)者再次使用異步復(fù)制。 報告的吞吐量是消費者吞吐量(顯然聂宾,是生產(chǎn)者吞吐量的上限)果善。

和我們預(yù)期一樣,得到的結(jié)果和只有生產(chǎn)者時基本相同系谐,前提是消費者相當cheap巾陕。

Effect of Message Size

前面的測試已經(jīng)展示了100字節(jié)大小消息kafka的性能讨跟。對于消費系統(tǒng)來說,更小的消息是更大的問題鄙煤。因為它們放大了系統(tǒng)記賬的開銷晾匠。 我們可以通過在記錄/秒和MB/秒兩者中繪制吞吐量來顯示這一點:


04-size_vs_record_throughput.png

這張圖和我們預(yù)期一樣,隨著消息體越來越大梯刚,每秒我們能發(fā)送的消息數(shù)量也會減少凉馆。但是,如果我們看MB/秒性能報告亡资,我們會看到實際用戶數(shù)據(jù)的總字節(jié)吞吐量隨著消息變大而增加:

05-size_vs_mb_throughput.png

總結(jié):消息體越大澜共,每秒能處理的消息數(shù)量越少,但是每秒能處理的消息體積越大锥腻;消息體越小嗦董,每秒能處理的消息數(shù)量越多,但是每秒能處理的消息體積越惺莺凇京革;

另外我們可以看到,對于10字節(jié)的消息幸斥,我們實際上只是通過獲取鎖并將消息排入發(fā)送來限制CPU - 我們無法實際最大化網(wǎng)絡(luò)匹摇。 但是,從100字節(jié)開始甲葬,我們實際上看到網(wǎng)絡(luò)飽和来惧。

End-to-end Latency

  • 2 ms (median)
  • 3 ms (99th percentile)
  • 14 ms (99.9th percentile)

到現(xiàn)在為止,我們討論的都是吞吐量演顾。但是消息傳遞的延遲情況呢供搀?也就是說,消息傳遞到消費者钠至,需要多長的時間葛虐。此次測試,我們將創(chuàng)建生產(chǎn)者和消費者棉钧,并重復(fù)計算生產(chǎn)者將消息發(fā)送到kafka集群然后由我們的消費者接收所需的時間屿脐。

請注意,Kafka僅在所有in-sync replicas確認消息后才向消費者發(fā)出消息宪卿。因此的诵,無論我們使用同步還是異步復(fù)制,此測試都會給出相同的結(jié)果佑钾,因為該設(shè)置僅影響對生產(chǎn)者的確認西疤,而本次測試是生產(chǎn)者發(fā)送的消息傳遞到消費者的時間。

Replicating this test

如果你想要在你自己的服務(wù)器上休溶,運行這些壓力測試代赁,當然沒有問題扰她。正如我所說的,我大部分情況下只是使用我們預(yù)裝的性能測試工具芭碍,這些工具隨Kafka發(fā)布包一起提供,并且服務(wù)器和客戶端大部分都是默認配置窖壕。

attachment

下面給出本次壓測一些命令忧勿,以及kafka服務(wù)器配置。

benchmark commands

 ###############################################################
壓測腳本(zk集群地址后的/afei是配置的chroot):
--zookeeper:10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei
--broker:   10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092
################################################################

創(chuàng)建需要的TOPIC:
bin/kafka-topics.sh --zookeeper 10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei --create --topic TPC-P6-R1 --partitions 6 --replication-factor 1
bin/kafka-topics.sh --zookeeper 10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei --create --topic TPC-P6-R3 --partitions 6 --replication-factor 3

1個生產(chǎn)者-單線程&無副本:
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R1 --num-records 50000000 --record-size 128  --throughput -1 --producer-props acks=1 bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196

執(zhí)行腳本說明:
--num-records表示發(fā)送消息的數(shù)量瞻讽,即5kw條鸳吸;
--record-size表示每條消息的大小,即128字節(jié)卸夕;
--throughput表示吞吐量限制,-1沒有限制婆瓜;
--producer-props后面的都是生產(chǎn)者配置

1個生產(chǎn)者-單線程&3個副本異步寫入:
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records 50000000 --record-size 100  --throughput -1 --producer-props acks=1  bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196

1個生產(chǎn)者-單線程&3個副本同步寫入:
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records 50000000 --record-size 100  --throughput -1 --producer-props acks=-1  bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196

3個生產(chǎn)者-單線程&3個副本異步寫入:
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records 50000000 --record-size 100  --throughput -1 --producer-props acks=1  bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196

- 發(fā)送50億條100個字節(jié)大小的消息
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records 5000000000 --record-size 100  --throughput -1 --producer-props acks=1  bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196

消費尺寸的影響--分別嘗試各種不同字節(jié)大小消息
for i in 10 100 1000 10000 100000;
do
    echo ""
    echo $i
    bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records $((1000*1024*1024/$i)) --record-size $i --throughput -1 --producer-props acks=1 bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196
done;

單個消費者消息能力:
bin/kafka-consumer-perf-test.sh --zookeeper 10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei --messages 50000000 --topic TPC-P6-R3 --threads 1

3個消費者消費能力--在3臺服務(wù)器上運行3個消費者:
bin/kafka-consumer-perf-test.sh --zookeeper 10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei --messages 50000000 --topic TPC-P6-R3 --threads 1

生產(chǎn)者&消費者:
bin/kafka-run-class.sh org.apache.kafka.tools.ProducerPerformance --topic TPC-P6-R3 --num-records 50000000 --record-size 100 --throughput -1 --producer-props acks=1 bootstrap.servers=10.0.0.1:9092,10.0.0.2:9092,10.0.0.3:9092 buffer.memory=67108864 batch.size=8196
bin/kafka-consumer-perf-test.sh --zookeeper 10.0.1.1:2181,10.0.1.2:2181,10.0.1.2:2181/afei --messages 50000000 --topic TPC-P6-R3 --threads 1

server config

broker.id=0
port=9092
num.network.threads=4
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/grid/a/dfs-data/kafka-logs,/grid/b/dfs-data/kafka-logs,/grid/c/dfs-data/kafka-logs,/grid/d/dfs-data/kafka-logs,/grid/e/dfs-data/kafka-logs,/grid/f/dfs-data/kafka-logs
num.partitions=8
log.retention.hours=168
log.segment.bytes=536870912
log.cleanup.interval.mins=1
zookeeper.connect=10.0.0.1:2181
zookeeper.connection.timeout.ms=1000000
kafka.metrics.polling.interval.secs=5
kafka.metrics.reporters=kafka.metrics.KafkaCSVMetricsReporter
kafka.csv.metrics.dir=/tmp/kafka_metrics
kafka.csv.metrics.reporter.enabled=false
replica.lag.max.messages=10000000

原文地址https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末快集,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子廉白,更是在濱河造成了極大的恐慌个初,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猴蹂,死亡現(xiàn)場離奇詭異院溺,居然都是意外死亡,警方通過查閱死者的電腦和手機磅轻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門珍逸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人聋溜,你說我怎么就攤上這事谆膳。” “怎么了撮躁?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵漱病,是天一觀的道長。 經(jīng)常有香客問我把曼,道長杨帽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任嗤军,我火速辦了婚禮注盈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘叙赚。我一直安慰自己当凡,他們只是感情好山害,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沿量,像睡著了一般浪慌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上朴则,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天权纤,我揣著相機與錄音,去河邊找鬼乌妒。 笑死汹想,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的撤蚊。 我是一名探鬼主播古掏,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼侦啸!你這毒婦竟也來了槽唾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤光涂,失蹤者是張志新(化名)和其女友劉穎庞萍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忘闻,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钝计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了齐佳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私恬。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖炼吴,靈堂內(nèi)的尸體忽然破棺而出践付,到底是詐尸還是另有隱情,我是刑警寧澤缺厉,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布永高,位于F島的核電站,受9級特大地震影響提针,放射性物質(zhì)發(fā)生泄漏命爬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一辐脖、第九天 我趴在偏房一處隱蔽的房頂上張望饲宛。 院中可真熱鬧,春花似錦嗜价、人聲如沸艇抠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽家淤。三九已至异剥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間絮重,已是汗流浹背冤寿。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留青伤,地道東北人督怜。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像狠角,于是被迫代替她去往敵國和親号杠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355