1.消息中間件\消息系統web
將數據從一個系統傳遞給另外一個系統架構
若是隻是單純的傳遞數據的方法,有不少,http,rpc,webservice,定時任務負載均衡
若是接收方,一會兒接收不過來那麼多數據怎麼辦?scala
2.消息系統的分類:點對點,發佈-訂閱server
點對點:主要採用隊列的方式,如A->B, 當B消費掉隊列中的數據,隊列中的數據就會被刪除,若是B一直不消費,隊列中就會有不少髒數據。中間件
發佈-訂閱:必需要有主題的概念,主題:一個消息分類blog
發佈者:通常狀況下是將消息以推的方式,發送給消息系統。隊列
訂閱者:能夠採用拉和推的方式從消息系統中拿數據開發
3.kafka的說明:開發語言是scala,kakafka_2.11-2.2.0 其中,2.11是scala的版本,2.2.0是kafka的版本rpc
4.kafka的架構:
broker服務:通常狀況下一臺主機就一個broker服務,也能夠一臺主機中有多個broker服務,只要端口不同,存儲路徑不同能夠,可是不推薦。
zookeepr服務:管理broker集羣,管理元數據。
producer:生產者,發佈消息的,這個消息,須要指定主題。
consumer:消費者,當多個消費者訂閱同一個主題,那這個主題的同一條消息,會被重複消費。
consumer group:消費組,在同一個消費組中的消費者,對同一條消息,只能消費一次。
offset:某一個消費組,當前對一個主題的某個分區下的消費偏移量。
5.kafka的架構:
上游能夠有多個生產者,生產者在生產消息時,消息須要指定主題Topic(主題以後,還能夠指定分區和key),生產者生產什麼主題的消息,由生產者本身決定,而不是kafka指定的,因此只要kafka存在這個主題,任何生產者均可以生產這個主題的消息。
若是消息是由kafka通知某個producer來生產的,那麼kafka就須要管理全部生產者的消息,但實際上kafka是無論理生產者的。而生產者在註冊的時候,實際上會通知zookeeper,且broker服務在註冊時,也會通知zookeeper。
在建立一個主題的時候,須要指定副本數和分區數,主題至少須要一個分區才能建立成功。
分區數:若是主題至少須要設置1個分區,那麼100條數據都會放在這個主題下的一個分區裏。但若是指定了分區數是3,那麼90條數據,就會放在3個分區中,且每一個分區中有30條數據。
消費組在拉取消息時,能夠拉取某個主題下的消息,也能夠拉取某個主題下的某個或某幾個分區下的消息。生產者在生產消息時,也能夠指定生產某個主題及某個主題下的某個分區的消息。
架構說明:
一個典型的kafka集羣包含若干producer,若干broker,若干Consumer,以及一個Zookeeper集羣,kafka經過Zookeeper管理集羣配置,選舉Leader,以及在Consumer Group發生變化時進行Rebalance(負載均衡)。Producer使用push(推)的方式將消息發佈到Broker,Consumer使用pull(拉)的方式從Broker訂閱並消費消息。
5.1先啓動zk
5.2啓動kafka server
5.3建立主題
5.4建立生產者
5.5建立消費者