Kafka 分布式消息隊列 類似產(chǎn)品有JBoss、MQ
一、由Linkedln 開源,使用scala開發(fā),有如下幾個特點:
(1)高吞吐
(2)分布式
(3)支持多語言客戶端 (C++、Java)
二、組成: 客戶端是 producer 和 consumer,提供一些API,服務(wù)器端是Broker,客戶端提供可以向Broker內(nèi)發(fā)布消息、消費消息,服務(wù)器端提供消息的存儲等功能
Kafka 特點是支持分區(qū)、分布式、可拓展性強
三、Kafka 的消息分幾個層次
(1)Topic 一類主題
(2)Partition 默認(rèn)每個消息有2個分區(qū),創(chuàng)建Topic可以指定分區(qū)數(shù),1天有 1億行可以分8個分區(qū),如果每天幾十萬行就一個分區(qū)吧
(3)Message 是每個消息
四、數(shù)據(jù)處理流程
1.生產(chǎn)者 生產(chǎn)消息、將消息發(fā)布到指定的topic分區(qū)
2.kafka 集群接收到producer發(fā)過來的消息后,將其持久化到硬盤,可以指定時長,而不關(guān)注消息是否被消費
3.consumer從kafka集群pull或push方式,并控制獲取消息的offset偏移量,consumer重啟時需要根據(jù)offset開始再次消費數(shù)據(jù),consumer自己維護offset
五、kafka如何實現(xiàn)高吞吐量
1.充分利用磁盤的順序讀寫
2.數(shù)據(jù)批量發(fā)送
3.數(shù)據(jù)壓縮
4.Topic劃分多個partition
六、kafka 如何實現(xiàn)load balance &HA
1)producer 根據(jù)用戶指定的算法,將消息發(fā)送到指定的partition
2)存在多個partition,每個partition存在多個副本replica,每個replica分布在不同的broker節(jié)點上
3)每個partition需要選取lead partition,leader partition負(fù)責(zé)讀寫,并由zookeeper負(fù)責(zé)fail over 快速失敗
4)通過zookeeper管理broker與consumer的動態(tài)加入與離開
七、擴容
當(dāng)需要增加broker節(jié)點時,新增的broker會向zookeeper注冊,而producer及consumer會根據(jù)zookeeper上的watcher感知這些變化,并及時作出調(diào)整