rabbitmq 和 kafka 簡單的效能測試
測試環境:ubuntu 15.10 64位
cpu:inter core i7-4790 3.60GHZ * 8
記憶體:16GB
硬碟:ssd 120GB
軟體環境:rabbmitmq 3.6.0 kafka0.8.1 (均為單機本機執行)
PS: 測試結果均為單操作測試,即生產的時候沒有消費操作
測試結果:
kafka :消費速度: 37,586 /s 生產速度: 448,753 /s
rabbitmq: 消費速度: 20,807 /s 生產速度 16.413 /s
出現問題:
rabbitmq 生產4分鐘左右出現佇列阻塞,無法繼續新增資料,1分鐘後恢復,再過大約1分鐘又出現此現象並以約1分鐘為間隔出現此問題。
rabbitmq 生產物件時有不小的機率(約 1/20)新增佇列失敗,報出的錯誤是“tcp連結重置”
其他並無任何問題
結論:
很明顯的看出kafka的效能遠超rabbitmq。不過這也是理所當然的,畢竟2個訊息佇列實現的協議是不一樣的,處理訊息的場景也大有不同。rabbitmq適合處理一些資料嚴謹的訊息,比如說支付訊息,社交訊息等不能丟失的資料。kafka是批量操作切不報證資料是否能完整的到達消費者端,所以適合一些大量的營銷訊息的場景。(測試結果均為單操作測試,即生產的時候沒有消費操作~~)
程式碼:
kafka:
package main import ("github.com/Shopify/sarama" "os" "os/signal" "sync" "log" "time" ) func main() { go producer() // go consumer() time.Sleep(10*time.Minute) } func producer() { config :=sarama.NewConfig() config.Producer.Return.Successes = true proder,err := sarama.NewAsyncProducer([]string{"localhost:9092"},config) if err != nil { panic(err) } signals :=make(chan os.Signal,1) signal.Notify(signals,os.Interrupt) var ( wg sync.WaitGroup enqueued, successes, errors int ) wg.Add(1) go func() { defer wg.Done() for _=range proder.Successes(){ successes++ } }() wg.Add(1) go func() { defer wg.Done() for err := range proder.Errors(){ log.Println(err) errors++ } }() go func() { t1 := time.NewTicker(time.Second) for{ <- t1.C log.Println(enqueued) } }() ProducerLoop: for{ message :=&sarama.ProducerMessage{Topic:"test",Value:sarama.StringEncoder("testing 123")} select { case proder.Input() <- message: enqueued++ case <- signals: proder.AsyncClose() break ProducerLoop } } wg.Wait() log.Println("Successfully produced:%d;errors:%d\n",successes,errors) } func consumer() { coner,err := sarama.NewConsumer([]string{"localhost:9092"},nil) if err != nil { panic(err) } defer func() { if err :=coner.Close(); err !=nil{ log.Fatalln(err) } }() partitionConsumer ,err := coner.ConsumePartition("test",0,sarama.OffsetNewest) if err != nil { panic(err) } defer func() { if err := partitionConsumer.Close();err!=nil{ log.Fatalln(err) } }() signals := make(chan os.Signal,1) signal.Notify(signals,os.Interrupt) consumed:=0 go func() { t1 := time.NewTicker(time.Second) for{ <- t1.C log.Println(consumed) } }() ConsumerLoop: for{ select { case _ = <-partitionConsumer.Messages(): consumed++ // log.Println( string(msg.Value)," => ",consumed) case <-signals: break ConsumerLoop } } log.Printf("Consumed: %d\n", consumed) }
rabbitmq:
package main import ( "github.com/streadway/amqp" "time" "fmt" "log" ) const ( queueName = "push.msg.q" exchange = "t.msg.ex" mqurl ="amqp://shimeng:[email protected]:5672/push" ) var conn *amqp.Connection var channel *amqp.Channel func main() { fmt.Println(1) // push() receive() // fmt.Println("end") // close() } func failOnErr(err error, msg string) { if err != nil { log.Fatalf("%s:%s", msg, err) panic(fmt.Sprintf("%s:%s", msg, err)) } } func mqConnect() { var err error conn, err = amqp.Dial(mqurl) if err != nil { log.Println(1) log.Fatalln(err) } fmt.Println(5) channel, err = conn.Channel() if err != nil { fmt.Println(2) log.Fatalln(err) }else { fmt.Println("a") } } func push() { count := 0 if channel == nil { fmt.Println(2) mqConnect() }else { fmt.Println(3) } msgContent := "hello world!" t1 := time.NewTicker(time.Second) go func() { for{ <- t1.C log.Println(count) } }() for{ err := channel.Publish(exchange, "test", false, false, amqp.Publishing{ ContentType: "text/plain", Body: []byte(msgContent), }) if err != nil { }else { count ++ } } } func receive() { if channel == nil { mqConnect() } count :=0 msgs, err := channel.Consume(queueName, "", true, false, false, false, nil) failOnErr(err, "") forever := make(chan bool) t1 := time.NewTicker(time.Second) go func() { for{ <- t1.C log.Println(count) } }() go func() { //fmt.Println(*msgs) for _= range msgs { count ++ // s := BytesToString(&(d.Body)) // count++ // fmt.Printf("receve msg is :%s -- %d\n", *s, count) } }() fmt.Printf(" [*] Waiting for messages. To exit press CTRL+C\n") <-forever }
相關推薦
rabbitmq 和 kafka 簡單的效能測試
測試環境:ubuntu 15.10 64位 cpu:inter core i7-4790 3.60GHZ * 8 記憶體:16GB 硬碟:ssd 120GB 軟體環境:rabbmitmq 3.6.0 kafka0.8.1 (均為單機本機執行) PS: 測
RabbitMQ和Kafka從幾個角度簡單的對比
在應用場景方面: RabbitMQ,遵循AMQP協議,由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。 kafka是Linkedin於2010年12月份開源的訊息釋出訂閱系統,它主要用於處理活躍的流式資料,大資料量的資料處理上。 1)在架
splFixedArray和PHP array的簡單效能測試對比
自從5.3版本開始,PHP在SPL擴充套件中提供了一個叫做splFixedArray的陣列[連結],splFixedArray陣列相比標準的PHP陣列更接近於C語言的陣列,而且由於splFixedArray沒有使用雜湊(Hash)儲存方式,因此效率更高。下面我們
snaic和tornado的簡單效能測試
作業系統 : CentOS7.3.1611_x64 Python 版本 : 3.6.8 tornado版本:6.0.2 snaic版本:19.9.0 CPU : Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz 4核 之前一直使用tornado作為http相關pytho
rabbitmq和kafka怎麽選?【轉】
流式 src 讀取數據 內部 zero-copy 丟失 簡單 好的 項目 MQ框架非常之多,今天簡單說一下有代表性的兩個MQ(rabbitmq和kafka)。經常會有人問rabbitmq和kafka到底哪個好呢?其實沒有好與不好之分,只有哪個更合適,首先要根據自己項目的業務
RabbitMQ和kafka的區別
1.應用場景方面 RabbitMQ:用於實時的,對可靠性要求較高的訊息傳遞上。 kafka:用於處於活躍的流式資料,大資料量的資料處理上。 2.架構模型方面 producer,broker,consumer RabbitMQ:以broker為中心,有訊息的確認機制 kafka:以consum
記一次Node和Go的效能測試
以前簡單測過go的效能,高併發場景下確實比node會好一些,一直想找個時間系統性地測一下,手頭正好有一臺前段時間買的遊戲主機,裝了ubuntu就開測了 準備工作 測試機和試壓機系統都是ubuntu 18.04.1 首先安裝node和go,版本分別如下: node 10.13.0
RabbitMQ 和 Kafka 到底怎麼選?
前言 開源社群有好多優秀的佇列中介軟體,比如RabbitMQ和Kafka,每個佇列都貌似有其特性,在進行工程選擇時,往往眼花繚亂,不知所措。對於RabbitMQ和Kafka,到底應該選哪個? RabbitMQ架構 RabbitMQ是一個分散式系統,這裡面有幾個抽
當你想進行簡單效能測試監控的時候應該如何選擇監控命令?
此文已由作者趙慧莉授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 一、前言 在進行效能測試前,有些引數需要本地進行除錯,不適合直接使用效能測試平臺。主要通過監控CPU、記憶體、磁碟、網路情況來判斷是否符合標準。接下來將通過CPU、記憶體、磁碟、網路情況的評估標準、常見的監控命令、常
timescaledb和PG寫入效能測試
目錄 結論摘要 測試環境 資料構造 CASE 1 單TIME索引 單行寫入 WAL檔案增加 BATCH寫入 資源佔用 CASE 2 增加一個索引 單行寫入 BATCH寫入 資源佔用 CASE 3 大量資料 結論摘要 小
RabbitMQ和Kafka到底怎麼選?
前言 開源社群有好多優秀的佇列中介軟體,比如RabbitMQ和Kafka,每個佇列都貌似有其特性,在進行工程選擇時,往往眼花繚亂,不知所措。對於RabbitMQ和Kafka,到底應該選哪個? RabbitMQ架構 RabbitMQ是一個分散式系統,這裡面有幾個抽象概念。 broker:每個節點執行的服務程式
RabbitMQ和Kafka到底怎麼選(二)?
前言 前一篇文章《RabbitMQ和Kafka到底怎麼選?》,我們在吞吐量方面比較了Kafka和RabbitMQ,知道了Kafka的吞吐量要高於RabbitMQ。本文從可靠性方面繼續探討兩個佇列的差異。 RabbitMQ可靠性 我們通過前文知道,RabbitMQ的佇列分為master queue和mirror
C++有序map和無序unordered_map效能測試對比
概述 簡單對比map和unordered_map的效能。 map內部是紅黑樹,在插入元素時會自動排序,而無序容器unordered_map內部是散列表,通過雜湊而不是排序來快速操作元素,使得效率更高。當你不需要排序時選擇unordered_map的效率更高。
RabbitMQ和Kafka對比以及場景使用說明
1.架構模型 rabbitmq RabbitMQ遵循AMQP協議,RabbitMQ的broker由Exchange,Binding,queue組成,其中exchange和binding組成了訊息的路由鍵;客戶端Producer通過連線channel和ser
RabbitMQ和kafka比較
在應用場景方面 RabbitMQ,遵循AMQP協議,由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。 kafka是Linkedin於2010年12月份開源的訊息釋出訂閱系統,它主要用於處理活躍的流式資料,大資料量的資料處理上。
SATA硬碟和SSD硬碟效能測試對比
測試工具: fio 測試物件: SATA硬碟, SSD硬碟 測試專案:順序讀、隨機讀、順序寫、隨機寫 1. 順序讀 測試命令:fio -name iops -rw=read -bs=4k -runtime=60 -iodepth 32 -filename /dev
raid0+1和raid5的效能測試結果
網上關於效能比較和原理的文章很多,這裡不再過多解釋,只寫測試結果。測試目的:4塊物理硬碟,使用IBMraid卡做raid。4塊做raid 5和兩塊盤分別raid 1的讀效能比較。由於寫會往本地盤寫入資料,暫時沒有測試工具:oracle orign 4塊物理盤做 raid 5
Mininet簡單效能測試
建一個簡單的模型,使用一個單交換機,然後連結n個主機形成拓撲,然後對每個鏈路設定頻寬,延遲時間,和丟包率。 這裡就選擇建一個單交換機和六個主機的作為例子。 建立py指令碼生成拓撲:寫一個類生成一個單交換機和六個主機的拓撲,並且給每個主機和交換機之間的連線賦予100m的頻寬,5ms的延遲和1%的丟包率。
合併排序(Merge Sort)C 實現(簡單效能測試)
#include <time.h> #include <stdlib.h> #include <stdio.h> #define sential RAND_MAX /* 定義哨兵*/ #define SIZE 1000000/
RabbitMQ Performance Testing Tool 效能測試工具
解壓檔案(放到 RabbitMQ 安裝目錄下) rabbitmq-perf-test-1.1.0.zip 測試(命令列執行): > cd D:\Program Files\RabbitMQ Server\rabbitmq-perf-test-1.1.0\b