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
- RabbitMQ優缺點MQ
- MySQL索引的優缺點MySql索引
- 節點快取的優缺點快取
- MyBatis的優缺點以及特點MyBatis
- 關於 Cookie的優缺點Cookie
- Serverless架構的優缺點Server架構
- 使用css框架的優缺點CSS框架
- 淺談Ajax的優缺點
- mysql和Oracle的特點,優缺點MySqlOracle
- HTTPS 優點與缺點HTTP
- 線性表順序儲存優缺點,線性連結串列的優缺點
- 代理伺服器的優缺點伺服器
- 02 SVN 與 Git 的優缺點Git
- HTTP和RPC的優缺點HTTPRPC
- 單頁應用的優缺點
- 資料中心代理的優缺點
- 雲伺服器的優缺點伺服器
- 物聯網路卡的優缺點
- iOS notification的優勢及缺點iOS
- HTTP1.1 優缺點HTTP
- Ajax原理以及優缺點
- serverless與容器優缺點Server
- TokuDB優缺點總結
- JavaScript 模組化優缺點JavaScript
- 使用protocolbuffers優缺點分析Protocol
- 經驗分享:Apache Kafka的缺點與陷阱 - Emil KoutanovApacheKafka
- 資料庫索引的作用和優點缺點資料庫索引
- 前後端分離的優缺點後端
- Citrix,微軟,VMware:它們的優缺點微軟
- Apache與Nginx的優缺點比較ApacheNginx
- 執行緒和程式的優缺點執行緒
- MySQL MHA工具的優缺點歸納MySql
- 靜態IP的優缺點介紹
- 1 多執行緒的優缺點執行緒
- MySQL MHA工具的優缺點介紹MySql
- 內部區塊鏈的優缺點區塊鏈
- 併發程式設計的優缺點程式設計