kafka簡介:
kafka是一個發布訂閱消息系統,由topic區分消息種類,每個topic中可以有多個partition,每個kafka集群有一個多個broker服務器組成,producer可以發布消息到kafka中,consumer可以消費kafka中的數據。kafka就是生產者和消費者中間的一個暫存區,可以保存一段時間的數據保證使用。
kafka+zookeeper
zookeeper作為解決分布式一致性問題的工具而被kafka依賴。而分布式模式,即去中心化的集群模式,需要讓消費者知道現在有哪些生產者(對於消費者而言,kafka就是生產者)是可用的。如果沒了zk消費者如何知道呢?如果每次消費者在消費之前都去嘗試連接生產者測試下是否連接成功,效率就會變得很低。
Kafka使用zk的分布式協調服務,將生產者,消費者,消息儲存(broker,用於存儲信息,消息讀寫等)結合在一起。同時借助zk,kafka能夠將生產者,消費者和broker在內的所有組件在無狀態的條件下建立起生產者和消費者的訂閱關系,實現生產者的負載均衡。
1. broker在zk中注冊
kafka的每個broker(相當於一個節點,相當於一個機器)在啟動時,都會在zk中注冊,告訴zk其brokerid,在整個的集群中,broker.id/brokers/ids,當節點失效時,zk就會刪除該節點,就很方便的監控整個集群broker的變化,及時調整負載均衡。
2. topic在zk中注冊
在kafka中可以定義很多個topic,每個topic又被分為很多個分區。一般情況下,每個分區獨立在存在一個broker上,所有的這些topic和broker的對應關系都有zk進行維護
3. consumer(消費者)在zk中注冊
1)注冊新的消費者,當有新的消費者注冊到zk中,zk會創建專用的節點來保存相關信息,路徑ls /consumers/{group_id}/ [ids,owners,offset],Ids:記錄該消費分組有幾個正在消費的消費者,Owmners:記錄該消費分組消費的topic信息,Offset:記錄topic每個分區中的每個offset
2)監聽消費者分組中消費者的變化 ,監聽/consumers/{group_id}/ids的子節點的變化,一旦發現消費者新增或者減少及時調整消費者的負載均衡。
4. kafka的應用場景
1)日志收集:一個公司的各種應用都可以作為生產者將日志吐到kafka,再由hbase,solr,es等來消費kafka的日志作統計,查錯。
2)消息系統:解耦和生產者和消費者、緩存消息等。
3)用戶活動跟蹤:Kafka經常被用來記錄web用戶或者app用戶的各種活動,如瀏覽網頁、搜索、點擊等活動,這些活動信息被各個服務器發布到kafka的topic中,然后訂閱者通過訂閱這些topic來做實時的監控分析,或者裝載到hadoop、數據倉庫中做離線分析和挖掘。
4)運營指標:Kafka也經常用來記錄運營監控數據。包括收集各種分布式應用的數據,生產各種操作的集中反饋,比如報警和報告