kafka學習筆記(一)
kafka是什麼?
Kafka是一個分散式的、可分割槽的、可複製的、基於釋出/訂閱的訊息系統,Kafka主要用於大資料領域,當然在分散式系統中也有應用。目前市面上流行的訊息佇列RocketMQ就是阿里借鑑Kafka的原理、用Java開發而得
基本概念
什麼是Broker
- 一個單獨的Kafka server就是一個Broker,Broker的主要工作就是接收生產者傳送來的訊息,分配offset,然後將包裝過的資料儲存到磁碟上;此外,Broker還會接收消費者和其他Broker的請求,根據請求的型別進行相應的處理然後返回響應。多個Broker可以做成一個Cluster(叢集)對外提供服務,每個Cluster當中會選出一個Broker來擔任Controller,Controller是Kafka叢集的指揮中心,其他的Broker則聽從Controller指揮實現相應的功能。Controller負責管理分割槽的狀態、管理每個分割槽的副本狀態、監聽zookeeper中資料的變化等。Controller也是一主多從的實現,所有的Broker都會監聽Controller Leader的狀態,當Leader Controller出現了故障的時候就重新選舉新的Controller Leader。
訊息
訊息是Kafka中最基本的訊息單元。訊息由一串位元組組成,其中主要由key和value構成,key和value都是位元組陣列。key的主要作用是根據一定的策略,將這個訊息路由到指定的分割槽中,這樣就可以保證包含同一個key的訊息全部寫入同一個分割槽
Topic
Topic是用於儲存訊息的邏輯概念,Topic可以看做是一個訊息的集合。每個Topic可以有多個生產者向其中push訊息,也可以有多個消費者向其中pull訊息。
分割槽(partition)
每一個Topic都可以劃分成多個分割槽(每一個Topic都至少有一個分割槽),不同的分割槽會分配在不同的Broker上以對Kafka進行水平擴充套件從而增加Kafka的並行處理能力。同一個Topic下的不同分割槽包含的訊息是不同的。每一個訊息在被新增到分割槽的時候,都會被分配一個offset,他是訊息在此分割槽中的唯一編號,此外,Kafka通過offset保證訊息在分割槽中的順序,offset的順序性不跨分割槽,也就是說在Kafka的同一個分割槽中的訊息是有序的,不同分割槽的訊息可能不是有序的。
Log:
分割槽在邏輯上對應著一個Log,當生產者將訊息寫入分割槽的時候,實際上就是寫入到了一個Log中。Log是一個邏輯概念,對應的是一個磁碟上的資料夾。Log由多個Segment組成,每一個Segment又對應著一個日誌檔案和一個索引檔案。
副本
Kafka對訊息進行了冗餘備份,每一個分割槽都可以有多個副本,每一個副本中包含的訊息是相同的(但不保證同一時刻下完全相同)。副本的型別分為Leader和Follower,當分割槽只有一個副本的時候,該副本屬於Leader,沒有
Follower。Kafka的副本具有一定的同步機制,在每個副本集合中,都會選舉出一個副本作為Leader副本,Kafka在不同的場景中會採用不同的選舉策略。Kafka中所有的讀寫請求都由選舉出的Leader副本處理,其他的都作為Follower副本,Follower副本僅僅是從Leader副本中把資料拉取到本地之後,同步更新到自己的Log中。
生產者
生產者主要是生產資料並把它按照一定的規則推送到Topic的分割槽中
消費者
消費者主要是從Topic中拉取訊息,並對訊息進行消費。Consumer維護消費者消費者消費到Partition的哪一個位置(offset的值)這一資訊。**在Kafka中,多個Consumer可以組成一個Consumer Group,一個Consumer只能屬於一個Consumer Group。Consumer Group保證其訂閱的Topic中每一個分割槽只被分配給此Consumer Group中的一個消費者處理,所以如果需要實現訊息的廣播消費,則將消費者放在多個不同的Consumer Group中即可實現。**通過向Consumer Group中動態的新增適量的Consumer,可以出發Kafka的Rebalance操作重新分配分割槽與消費者的對應關係,從而實現了水平擴充套件的能力。
相關文章
- Kafka 學習筆記Kafka筆記
- Kafka 學習筆記(一) :為什麼需要 Kafka?Kafka筆記
- Kafka學習筆記(一) :為什麼需要Kafka?Kafka筆記
- Kafka 學習筆記(二) :初探 KafkaKafka筆記
- Kafka學習筆記(二) :初探KafkaKafka筆記
- 【kafka學習筆記】kafka的基本概念Kafka筆記
- 訊息中介軟體-kafka學習筆記一Kafka筆記
- 學習筆記(一)筆記
- 史上最全、最詳細的 kafka 學習筆記!Kafka筆記
- Kubernetes 學習筆記-- kafka往couchdb裡倒東西筆記Kafka
- kitten 學習教程(一) 學習筆記筆記
- Angular 學習筆記(一)Angular筆記
- React 學習筆記【一】React筆記
- vue學習筆記一Vue筆記
- Canvas學習筆記(一)Canvas筆記
- Jquery學習筆記(一)jQuery筆記
- goLang學習筆記(一)Golang筆記
- Android學習筆記一Android筆記
- css學習筆記(一)CSS筆記
- SCSS學習筆記(一)CSS筆記
- 深度學習 筆記一深度學習筆記
- ANFIS學習筆記(一)筆記
- Selenium 學習筆記 (一)筆記
- Kettle學習筆記(一)筆記
- Spring學習筆記(一)Spring筆記
- Matlab學習筆記(一)Matlab筆記
- opencv學習筆記(一)OpenCV筆記
- LaTeX學習筆記:一筆記
- GOLang 學習筆記(一)Golang筆記
- Python 學習筆記(一)Python筆記
- TS學習筆記(一)筆記
- unity學習筆記(一)Unity筆記
- oracle學習筆記《一》Oracle筆記
- Cesium學習筆記(一)筆記
- SpringMVC學習筆記(一)SpringMVC筆記
- 高等數學學習筆記(一)筆記
- 深度學習 DEEP LEARNING 學習筆記(一)深度學習筆記
- Kafka超詳細學習筆記【概念理解,安裝配置】Kafka筆記