分布式消息隊列 Kafka
Kafka是一個高吞吐量的、分布式的消息系統,由Linkedin開發,開發語言為scala
具有高吞吐、可擴展、分布式等特點
適用場景
活動數據統計
活動數據包括頁面訪問量(Page View)、被查看內容方面的信息、搜索情況等內容
先以日志的形式存儲,然后周期性地對這些文件進行統計分析
運營數據統計
收集服務器的性能數據(CPU、內存、IO使用率 ……),之后進行統計
Linkedin就是基于這類需求開發出了Kafka,所以kafka最適合的場景為:
一個日志集群,各種服務器將它們自身的日志發送到集群中進行統一匯總和存儲,然后其它機器從集群中拉取消息進行分析處理,數據挖掘
整體架構
kafka體系包括以下部分:
(1)生產者 Producer
?
(2)broker集群
?
(3)話題 Topic(可以理解為queue)
?
(4)消費者 Consumer
?
(5)Zookeeper集群
?
可以在Kafka中創建多個Topic,Producer向Topic中發送消息,Consumer從Topic中獲取消息
為了高效的讀寫消息,topic都被切分為多個分區partition,放入不同的broker中
topic的partition類似于數據庫的分表,可以根據消息的key進行分區
?
例如key為userid,可以根據userid進行分組,把不同userid段的消息放入不同的partition,提高讀寫性能
為了保證高可用性,每個partition都有多個備份,分別保存在不同的broker中
其中有一個partition為leader,負責讀寫,其余的為slave,當leader失效時,會從slave中再選舉出一個leader
每個partition也不是一個獨立的文件,被分為了多個片段segment
Kafka通過Zookeeper管理集群配置,選舉leader
應用示例
需求
監控用戶交易行為,當交易金額過大時,標識出異常
實現