1. Apache Kafka是什麼?
Apache Kafka是Linkedin公司捐獻給Apache軟件基金會ASF(Apache Software Foundation)的一款開源分佈式消息系統。
它具有如下特點:
- 快速
可支持每秒幾十萬次讀寫,也可同時支持上千個客戶端。 - 可伸縮
可以由多臺機器組成Message Broker,集羣可以彈性透明地伸縮而不造成宕機。 - 可持久
消息可以持久化到磁盤,每個消息可保存多個副本。每個broker可處理TB級的消息而無性能損失。 - 分佈式設計
多個機器協同剛工作,有很強容錯性;其中一個機器宕機不影響集羣整體工作。
2.內部設計背景
Kafka socket服務器沒有使用netty來實現,是因爲其開發者不想對任何哪怕是一個字節的性能做妥協;
他們想要使得Kafka具有頂級的性能,不想任何已有的可重用框架或代碼給他們帶來包袱。
Kafka實現語言既有Java也有Scala,其內核使用Java編寫,部分模塊用Scala.但是它的API文檔是Java doc. Kafka正在把它的API從Scala轉到Java是因爲Scala版本不具備二進制兼容性,爲了引入Scala2.1,需要把2.0,1.9,etc,都引入進來。
Kafka設計理念: Kafka是以producer(生產者)爲中心,將連續事件流按片劃分到持久的消息代理(message broker),具有片內按序交付的特徵;既可支持消息消費者對消息的離線批處理,也可支持消息消費者對消息的低延時在線處理。它的消息模型是主題(topic)模型,生產者向主題發送消息,消費者向主題訂閱消息。
3.適用場景
1.大吞吐量,每秒消息讀寫在10萬次(100k+/sec)以上。
2.既有快速實時消息處理,也需要離線的批量消息處理。
3.按序交付。(其他的Messaging system, 比如RabbitMQ和AMQP不具有如此特點)
4.消息持久化。(這也是它能支持離線批量處理的基石)