kafka的定義 java
kafka是一個分佈式消息系統,有linkedin時候用scale編寫,用做LinkedIn的活動流(Acitvity Stream)和運營數據處理管道(pipeline)的基礎,具備高水平擴展和高吞吐量。從 0.9 版本開始,Kafka 的標語已經從「一個高吞吐量,分佈式的消息系統」改成」一個分佈式流平臺」。c++
應用領域web
kafka已經被多家不一樣類型的公司做爲多種類型的數據管道和消息系統使用。如:淘寶,支付寶,百度,twitter等ruby
目前愈來愈多的開源分佈式處理系統如:服務器
用於日誌收集的Apache Flume系統微信
用於實時處理的Apahce Storm系統架構
用於內存處理的Spark系統app
用於全文檢索的Elasticsearch系統負載均衡
分佈式消息隊列的對比 分佈式
ActiveMQ | RabbitMQ | kafka | |
---|---|---|---|
所屬社區/公司 | Apache | Mozilla Public License | Apache/Linkedin |
開發語言 | java | erlang | scala |
支持的協議 | openwire/stomp/rest/xmpp/amqp |
amqp | 仿amqp(獨立研發) |
事務 | 支持 | 不支持 | 不支持 |
集羣 | 支持 | 支持 | 支持 |
負載均衡 | 支持 | 支持 | 支持 |
動態擴容 | 不支持 | 不支持 | 支持(zookeeper) |
AMQP協議
消費者 consumer:從消息隊裏中請求消息的客戶端應用程序
生產者 producer: 向broker發佈消息的客戶端應用程序
AMQP服務器端 broker:用來接收生產者發送的消息並將這些消息路由個服務器中的隊裏,說的簡單點就是處理生產者的消息轉發到消費者能收到的路由裏面,一個kafka節點就是一個broker節點,一個或者多個broker節點就能組成一個kafka集羣。
consumer group: 每一個consumer屬於特定的一個consumer group,一條消息能夠發到多個consumer group中被consumer消費,可是一個consumer group中只能有一個consumer消費該消息。
在一套 Kafka 架構中有多個 Producer,多個 Broker,多個 Consumer,每一個 Producer 能夠對應多個 Topic,每一個 Consumer 只能對應一個 Consumer Group。
整個 Kafka 架構對應一個 ZK 集羣,經過 ZK 管理集羣配置,選舉 Leader,以及在 Consumer Group 發生變化時進行 Rebalance。
kafka支持的客戶端語言
c,c++,erlang,Java,.net,Perl,PHP,Python,ruby,go,JavaScript。
kafka的架構
首先了解一些概念:
主題 topic: 一個主題相似新聞中的體育,娛樂,教育等分類概念,在實際工程中一般一個業務一個主題;
分區 partition : 一個topic中的消息數據按照多個分區組織,分區是kafka消息隊組織的最小單位,一個分區能夠看作是一個FIFO的隊列;每一個分區的內部是有序的。通常集羣的性能低下,咱們能夠經過增長分區的配置提升性能。
理解kafka消息在分區之間序列
Kafka 爲每一個主題維護了分佈式的分區(Partition)日誌文件,每一個 Partition 在 Kafka 存儲層面是 Append Log。任何發佈到此 Partition 的消息都會被追加到 Log 文件的尾部,在分區中的每條消息都會按照時間順序分配到一個單調遞增的順序編號,也就是咱們的 Offset。Offset 是一個 Long 型的數字。
咱們經過這個 Offset 能夠肯定一條在該 Partition 下的惟一消息。在 Partition 下面是保證了有序性,可是在 Topic 下面沒有保證有序性。
本文分享自微信公衆號 - 雲原生生態圈(CloudNativeEcoSystem)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。