一些大的網站若是想統計用戶的訪問狀況,若是每一個用戶的訪問,都在後端通過一系列的用戶行爲分析,而後再給客戶返回結果這顯然不現實,直接寫入數據庫,數據庫也扛不住,mysql
這時候就須要一個消息系統,在用戶一個請求過來後,服務器只須要把此次操做扔到後端,不用管後端的處理結果,直接返回給用戶結果,這樣用戶體驗才比較好,比較符合實際狀況sql
Kafka是一個分佈式的消息系統,做爲用戶來講,只須要把數據扔給kafka,在須要的時候直接讀就能夠了,很是方便,實現異步非io阻塞數據庫
kafka分爲productor,consumer和broker後端
productor:消息生產者,就是向kafka裏面扔數據的一方(能夠是多個productor向同一個寫入)服務器
consumer:消息消費者 ,就是從kafka裏面消費(取)數據的一方(也能夠是多個consumer向同一個kafka取數據)負載均衡
broker:一個服務器實例,這個就是productor寫入的服務器(實例),consumer從這裏取數據,異步
topic:一條消息流分佈式
partition:分區,每一個topic能夠按特定的分區邏輯分區,相似mysql的分表,ide
partition的數據決定了一個topic能夠同時多少個進程(用戶)去寫入,消費它(若是一個topic的partition爲3,那麼productor只能同時起3個進程寫入,consumer同時有3個進程進行消費,若是啓動的數量超過3個則會一直等待)網站
consumer group:消費者組,相同groupid的consumer組成一個組
若是多個consumer都指定同一個groupid,則這些consumer會自動組成一個負載均衡的模式,消費一個topic
offset:一條消息在消息流中的偏移
舉例來講:數據1,2能夠往topicid爲top1裏面寫入 ,數據3,4能夠往topicid爲top2裏面寫入,
在消費時,指定同一個groupid,消費topicid爲top1的topic,連續消費2次能夠消費1,2,若是換一個groupid,則又從頭開始消費,也就是同一條消費,能夠被多個groupid重複消費