kafka的優缺點都有那些
Kafka是由Apache軟體基金會開發的一個開源流處理平臺,由Scala和Java編寫。Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者在網站中的所有動作流資料。
(1)優點:kafka的優點非常多
高效能:單機測試能達到 100w tps;
低延時:生產和消費的延時都很低,e2e的延時在正常的cluster中也很低;
可用性高:replicate + isr + 選舉 機制保證;
工具鏈成熟:監控 運維 管理 方案齊全;
生態成熟:大資料場景必不可少 kafka stream.
(2)不足
無法彈性擴容:對partition的讀寫都在partition leader所在的broker,如果該broker壓力過大,也無法通過新增broker來解決問題;
擴容成本高:叢集中新增的broker只會處理新topic,如果要分擔老topic-partition的壓力,需要手動遷移partition,這時會佔用大量叢集頻寬;
消費者新加入和退出會造成整個消費組rebalance:導致資料重複消費,影響消費速度,增加e2e延遲;
partition過多會使得效能顯著下降:ZK壓力大,broker上partition過多讓磁碟順序寫幾乎退化成隨機寫。
在瞭解了kafka的架構之後,你可以仔細想一想,為什麼kafka擴容這麼費勁呢?其實這本質上和redis叢集擴容是一樣的!當redis叢集出現熱key時,某個例項扛不住了,你通過加機器並不能解決什麼問題,因為那個熱key還是在之前的某個例項中,新擴容的例項起不到分流的作用。大資料培訓kafka類似,它擴容有兩種:新加機器(加broker)以及給topic增加partition。
給topic新加partition這個操作,你可以聯想一下mysql的分表。比如使用者訂單表,由於量太大把它按使用者id拆分成1024個子表user_order_{0..1023},如果到後期發現還不夠用,要增加這個分表數,就會比較麻煩。因為分表總數增多,會讓user_id的hash值發生變化,從而導致老的資料無法查詢。所以只能停服做資料遷移,然後再重新上線。
kafka給topic新增partition一樣的道理,比如在某些場景下msg包含key,那producer就要保證相同的key放到相同的partition。但是如果partition總量增加了,根據key去進行hash,比如 hash(key) % parition_num,得到的結果就不同,就無法保證相同的key存到同一個partition。
當然也可以在producer上實現一個自定義的partitioner,保證不論怎麼擴partition相同的key都落到相同的partition上,但是這又會使得新增加的partition沒有任何資料。
其實你可以發現一個問題,kafka的核心複雜度幾乎都在儲存這一塊。資料如何分片,如何高效的儲存,如何高效地讀取,如何保證一致性,如何從錯誤中恢復,如何擴容再平衡……
版權宣告:本文為「尚矽谷」的原創文章,轉載請附上原文出處連結及本宣告。下載相關視訊學習資料到官方網站。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27721058/viewspace-2851122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Docker的優缺點Docker
- 內聯的優缺點
- 繼承的優缺點繼承
- MySQL索引的優缺點MySql索引
- Hive 優缺點Hive
- MapReduce優缺點
- RabbitMQ優缺點MQ
- 節點快取的優缺點快取
- MyBatis的優缺點以及特點MyBatis
- 繼承的優點和缺點繼承
- HTTPS 優點與缺點HTTP
- 關於 Cookie的優缺點Cookie
- HTTP和RPC的優缺點HTTPRPC
- 閉包的概念?優缺點?
- Base64 的優缺點
- SAP的概念及優缺點
- 6.iframe的優缺點
- PyLint 的優點、缺點和危險
- 串列埠、IIC、SPI的優缺點串列埠
- 雲伺服器的優缺點伺服器
- 物聯網路卡的優缺點
- 代理伺服器的優缺點伺服器
- 單頁應用的優缺點
- 資料中心代理的優缺點
- 02 SVN 與 Git 的優缺點Git
- HTTP1.1 優缺點HTTP
- Ajax原理以及優缺點
- serverless與容器優缺點Server
- hadoop-HDFS優缺點Hadoop
- iframe有哪些優點和缺點?
- 經驗分享:Apache Kafka的缺點與陷阱 - Emil KoutanovApacheKafka
- 多層PCB的優點和缺點有哪些?
- Apache與Nginx的優缺點比較ApacheNginx
- 前後端分離的優缺點後端
- MySQL MHA工具的優缺點歸納MySql
- 執行緒和程式的優缺點執行緒
- 併發程式設計的優缺點程式設計
- 1 多執行緒的優缺點執行緒