概述
kafka 是什麼 ?
Apache Kafka® is a distributed streaming platform
是一個分佈式的流(stream) 框架
那麼它意味着什麼呢?一個流框架有三個重要能力 :
- 發佈-訂閱流記錄,就像消息隊列
- 用 fault-tolerant (錯誤容忍,翻譯不一定正確,可以查一下 fault-tolerant 到底指的是什麼意思)的方式存儲流記錄
- 處理消息當流到達的時候(有點像事件驅動)
kafka 中幾個重要的概念 :
- Kafka is run as a cluster on one or more servers that can span multiple datacenters.(也就是分佈式)
- The Kafka cluster stores streams of records in categories called topics.(節點儲存流記錄的目錄稱爲 topics )
- Each record consists of a key, a value, and a timestamp (流記錄包括 key,value,timestamp)
kafka 中核心的 API 有 :
- Producer API
- Consumer API
- Streams API
- Connector API
- Admin API
總體架構圖 :
總體來看 ,kafka 這個中間件只需要和 broker 節點進行聯繫. 深入到細節一點 , 那就是信息被分到某個節點 ,然後一個消息由多個分片組成, 多個分片組成像 SQL 讀寫分離一樣的複製備份架構 ,防止數據丟失 (真TM人才 ,佩服 kafka 的設計)
特性-保證
- Message 消息先發送的先被記錄在在 log 中,不會因爲其他因素影響 order
- 消費者看到記錄是按順序排列在log 中的
- 一個 topic 擁有 N 個副本,我們可以容忍 N-1 個機器失敗 。
應用場景
- kafka as message queue
- Kafka as a Storage System
- Kafka for Stream Processing
- Putting the Pieces Together
kafka 大體用在兩方面的應用場景 :
- 構建實時的在系統或應用之間可靠流通的流數據管道(例如消息隊列)
- 構建實時處理,轉化流數據的流應用(例如配合其他系統做大數據處理)
安裝並運行
安裝 zk
安裝 zk 之前肯定要有 java 環境,這個不用多說(zk 是 java應用),安裝好後爲了讓外界的zk圖形化界面工具看到 znode 的信息,開放 2181 端口 。
firewall-cmd --zone=public --add-port=2181/tcp --permanent
重新加載配置!!
firewall-cmd --reload
啓動 kafka
這個就簡單了,安裝官方的啓動方式即可。
> bin/kafka-server-start.sh config/server.properties
簡單的 shell 文本
每次都要啓動兩個東西,於是我寫了簡單的shell 文本
## 先啓動 zk
cd /usr/local/zookeeper/apache-zookeeper-3.6.1-bin/bin/
./zkServer.sh start
## 再啓動kafka
cd /usr/local/kafka/kafka_2.12-2.5.0/bin/
./kafka-server-start.sh ../config/server.properties
參考資料
- https://kafka.apache.org/intro.html (入門必看,這份官方文檔必看的呀)
- http://www.jasongj.com/2015/03/10/KafkaColumn1/ (必看,看完入門看這個)
進一步瞭解 : - https://www.zhihu.com/question/28925721
- http://lday.me/2017/06/27/0008_kafka_vs_tranditional_mq/ (kafka作爲MQ 與其他MQ 對比)