kafka学习(一)初识kafka
本文借鑒:再過半小時,你就能明白kafka的工作原理了(特此感謝!)
一、簡介
定義:kafka是一個分布式,基于zookeeper協調的發布/訂閱模式的消息系統,本質是一個MQ(消息隊列Message Queue),主要用于大數據實時處理領域。
目的:解耦、削峰、異步、緩沖(生產大于消費的情況)
日志保留(retention):我們可以配置主題的消息保留策略,譬如只保留一段時間的日志或者只保留特定大小的日志。當超過這些限制時,老的消息會被刪除。我們也可以針對某個主題單獨設置消息過期策略,這樣對于不同應用可以實現個性化。
PS:消息隊列中的消息不是永久存的,會定時刪除,自動刪除的時間可以配置。
二、消息隊列通信的模式
最大的特性就是可以實時的處理大量數據以滿足各種需求場景。
1、點對點模式
如上圖所示,點對點模式通常是基于拉取或者輪詢的消息傳送模型,這個模型的特點是發送到隊列的消息被一個且只有一個消費者進行處理。生產者將消息放入消息隊列后,由消費者主動的去拉取消息進行消費。
優點:拉取消息的頻率可以由自己控制。
存在缺陷:消費者端無法感知消息隊列是否有消息需要消費,所以在消費者端需要額外的線程去監控。
2、發布訂閱模式(發布訂閱模式其實有兩種,kafka用的是發布訂閱模式中,消費者主動拉取的模式)
如上圖所示,發布訂閱模式是一個基于消息送的消息傳送模型,該模型可以有多種不同的訂閱者。生產者將消息放入消息隊列后,隊列會將消息推送給訂閱過該類消息的消費者(類似微信公眾號)。由于是消費者被動接收推送,所以無需感知消息隊列是否有待消費的消息!但是consumer1、consumer2、consumer3由于機器性能不一樣,所以處理消息的能力也會不一樣,而消息隊列卻無法感知消費者消費的速度!所以推送的速度成了發布訂閱模模式的一個問題!假設三個消費者處理速度分別是8M/s、5M/s、2M/s,如果隊列推送的速度為5M/s,則consumer3無法承受!如果隊列推送的速度為2M/s,則consumer1、consumer2會出現資源的極大浪費!
優點:消費者無需感知消息隊列是否有待消費的消息。
存在缺陷:服務者無法感知消費者機器的性能,容易造成接收溢出或主機資源浪費。
三、kafka相關名詞
- Kafka中發布訂閱的對象是topic。我們可以為每類數據創建一個topic,把向topic發布消息的客戶端稱作producer,從topic訂閱消息的客戶端稱作consumer。
- Producers和consumers可以同時從多個topic讀寫數據。一個kafka集群由一個或多個broker服務器組成,它負責持久化和備份具體的kafka消息。
Producer:Producer即生產者,消息的產生者,是消息的入口。
kafka cluster:kafka集群
Broker(kafka實例,可看做kafka主機):每個服務器上有一個或多個kafka的實例,我們姑且認為每個broker對應一臺服務器。每個kafka集群內的broker都有一個不重復的編號,如圖中的broker-0、broker-1等……
Topic(消息主題,即分類):可以理解為消息的分類,kafka的數據就保存在topic。在每個broker上都可以創建多個topic。
Partition(分區):每個topic可以有多個分區,分區的作用是做負載,提高kafka的吞吐量(并發)。同一個topic在不同的分區的數據是不重復的,partition的表現形式就是一個一個的文件夾!
Replication(副本):每一個分區都有多個副本,副本的作用是做備胎。當主分區(Leader)故障的時候會選擇一個備胎(Follower)上位,成為Leader。在kafka中默認副本的最大數量是10個,且副本的數量不能大于Broker的數量,follower和leader絕對是在不同的機器,同一機器對同一個分區也只可能存放一個副本(包括自己)。
Message(消息內容):每一條發送的消息主體。
Consumer:消費者,即消息的消費方,是消息的出口。
Consumer Group:我們可以將多個消費組組成一個消費者組,在kafka的設計中同一個分區的數據只能被消費者組中的某一個消費者消費(不同組的消費者可以消費同一個分區的數據)。同一個消費者組的消費者可以消費同一個topic的不同分區的數據,這也是為了提高kafka的吞吐量!
Zookeeper:kafka集群依賴zookeeper來保存集群的的元信息,來保證系統的可用性。
四、zookeeper在kafka中的作用
kafka集群的正常使用需要依賴zookeeper,可以幫kafka集群存儲一些信息。
zookeeper也可以保存消費者的消費信息,目的是消費者掛了重啟后,可以接著上次的消費位置繼續消費(消費者內存中也會有一份備份,沒掛的時候直接取內存)。
轉載于:https://www.cnblogs.com/riches/p/11425044.html
總結
以上是生活随笔為你收集整理的kafka学习(一)初识kafka的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爬虫百度图片
- 下一篇: kafka学习(二)kafka工作流程分