天天看點

kafka學習_kafka學習(第一章 初識kafka)kafka是什麼?kafka架構設計kafka應用

kafka是什麼?

Kafka是由Apache開發的、開源的流處理平台,它是一個高吞吐量的、持久的、分布式的釋出訂閱模式的消息系統。

高吞吐量:普通配置的伺服器即可滿足每秒百萬級别消息的生産和消費;

持久性:有一套完善的消息存儲機制,可確定消息安全且持久的存儲在服務;

分布式:它是基于分布式進行擴充管理的,消息存儲在幾台伺服器上,當某台服務故障時,生産者和消費者可以轉移到其他服務上。

消息隊列有兩種模式:點到點模式、釋出訂閱模式

點到點模式

kafka學習_kafka學習(第一章 初識kafka)kafka是什麼?kafka架構設計kafka應用

點到點模式

點到點特點:

1.生産者生産消息後放入隊列,消費者讀取隊列消息消費

2.消息被消費後不會繼續存放在隊列中,即一條消息隻能被一個消費者消費

3.未被消費的消息會一直存儲在隊列中。就像單發郵件時,發送郵件->雲伺服器->接收者接收郵件到本地->雲端該郵件丢棄

釋出訂閱模式

kafka學習_kafka學習(第一章 初識kafka)kafka是什麼?kafka架構設計kafka應用

釋出訂閱模式

釋出訂閱模式特點:

1.生産者生産消息後放入隊列,消費者訂閱隊列消息消費

2.消息被消費後繼續存放在隊列中,即一條消息可以被重複多次消費

3.消息有一個過期時間,過期之後會在隊列中消失

什麼樣的設計使kafka擁有這些特點呢?

kafka架構設計

從架構圖中,可以看出kafka服務分為四個部分:最頂端的zookeeper、最左側的producer、中間的kafka cluster、最右側的consumer。

kafka學習_kafka學習(第一章 初識kafka)kafka是什麼?kafka架構設計kafka應用

kafka架構圖

首先,介紹下圖上的一些名詞:

  1. zookeeper:kafka叢集通過分布式部署,各伺服器之間互相獨立,需要一個注冊系統将整個叢集的伺服器管理起來,zookeeper就是這樣的一個角色;
  2. Broker:kafka server,kafka叢集中每台伺服器即為一個broker;
  3. Topic:消息主題,kafka中是通過topic對消息進行歸類的,同一類消息存放的目錄即主題;
  4. Partition:topic在實體上可以分成多個partition,每個partition在磁盤上對應一個目錄,存放消息檔案,每個partition是一個有序隊列;
  5. Replica:備份,一個partition有多個副本,這些副本分為leader 副本和follower副本,leader副本完成與生産者和消費者之間的消息互動,follower提供備份服務,replica數目小于等于broker數;
  6. offset:偏移量,partition中的索引,下一條消息即将存入的位置;
  7. Leader:replica leader,完成與生産者、消費者之間消息互動;
  8. Follower:replica follower,消息備份,提高可靠性,
  9. Producer:生産消息,發送到kafka server;
  10. Consumer:訂閱topic并消費message,每個consumer為一個獨立的程序;
  11. consumerGroup:管理consumer,多個consumer組成consumerGroup。

這張圖中間是kakfa cluster,用于暫存消息,broke即節點執行個體,多個broker組成了kakfa cluster;為了友善不同消息管理,kakfa提供了主題服務——topic,它類似于資料庫中的表;為了增加topic的負責均衡和并發度,topic又分為不同的partition,消息存儲在不同partition,從圖中可以看出,不同partition分布在不同伺服器上;為了提高服務可靠性,分區又由多個replica組成,這些副本分為leader和follower,leader負責與producer、consumer溝通,follower提供備份服務;整個kakfa叢集通過zk管理配置、leader選舉;producer生産消息,通過push模式将消息推送到kafka,存儲到不同topic的不同partition,同一paritition的資料是順序存儲,這樣單一topic的partition有序;producer和consumer關系就像老師和學生的關系,一個老師對應多個學生,一個學生也可對應多個老師;consumer通過pull模式訂閱并消費kafka消息,一個或多個consumer就組成了consumerGroup,同一consumerGroup中的consumer隻能訂閱不同partition消息,但不同consumerGroup中consumer可以同時訂閱同一partition消息。

kafka應用

  1. 消息系統:解耦生産者和消費者,緩存消息
  2. 日志收集:公司各種日志可以通過kafka進行收集、緩存
  3. 流式處理:spark streaming、flink

舉兩個簡單例子:1.spark服務計算結果存入ES中,如果直接用ES的api服務寫,整個流程是實時的強耦合并且spark服務峰值時很可能會把api服務打垮;引入kafka之後,整個流程變為異步,kafka和ES也不會強依賴,峰值也會得到控制;

2.典型的流式處理,kafka1中資料持續更新,spark服務會持續計算并推送給kafka2,直播帶貨就是一個典型的場景。直播間内主播需要實時的持續的擷取粉絲的互動消息、貨品的售賣情況,決定下一步做什麼。抽象成資料流即為:采集粉絲互動資訊、商品進銷存資訊->聚合計算->推送計算結果給主播,這樣的場景用kafka很合适,因為它具有持續性非阻塞的特點。

kafka學習_kafka學習(第一章 初識kafka)kafka是什麼?kafka架構設計kafka應用

kafka應用