消息隊列中間件kafka入門

目錄

 

什麼是kafka

爲什麼要使用消息中間件kafka

Kafka與其它中間件的區別

Kafka的簡單演變

Zookeeper在kafka中的作用

如何選擇partitions的數目

什麼是kafka的消費者組

剩餘的內容

參考文章


什麼是kafka

Kafka是一個分佈式消息傳遞系統,通過發佈-訂閱模型提供快速、高可伸縮性和冗餘的消息傳遞。

爲什麼要使用消息中間件kafka

解耦,異步,削峯,這是消息隊列的三大優勢。

Kafka與其它中間件的區別

中小型軟件公司,建議選RabbitMQ,萬級別,us,主從架構。

大型軟件公司,根據具體使用在rocketMq和kafka之間二選一。十萬級別,ms,分佈式架構。

Kafka的簡單演變

kafka一代

 

簡單的先入先出隊列,生產者放入消息,消費者拿出消息處理。消費者端會記錄一個offset,表明該消費者當前消費到哪條數據,所以下次消費者想繼續消費,只需從offset+1的位置繼續消費就好了。消費者甚至可以通過調整offset的值,重新消費以前的數據。

 

出現的問題:

 

所有消息都放到一個隊列當中,一方面消息的類型魚龍混雜,另一方面,消息增多,速度一定會很慢。

 

Kafka二代

 

採用多條隊列, 每條隊列裏面的消息都是相同的topic。一個隊列只有一種topic,消費者再也不用擔心會碰到不是自己想要的topic的消息了。提高吞吐量。不同topic的消息交給不同隊列去存儲,再也不用以一敵十了。消息可以根據topic和key選擇合適的Partition隊列。

 

什麼是topic?

 

所有Kafka消息都被組織成主題topic。如果你想發送一條消息,你就把它發送到一個特定的topic,如果你想讀一條消息,你就從一個特定的topic讀它。

 

出現的問題:

 

高可用性,單點是不可靠的。

 

Kafka三代

 

解決單點不可靠的問題,引入了集羣。Kafka對集羣的支持也是非常友好的。在Kafka中,集羣裏的每個實例叫做Broker。每個partition不再只有一個,而是有一個leader(紅色)和多個replica(藍色),生產者根據消息的topic和key值,確定了消息要發往哪個partition之後(假設是p1),會找到partition對應的leader(也就是broker2裏的p1),然後將消息發給leader,leader負責消息的寫入,並與其餘的replica進行同步。一旦某一個partition的leader掛掉了,那麼只需提拔一個replica出來,讓它成爲leader就ok了,系統依舊可以正常運行。

Zookeeper在kafka中的作用

  1. 使用Zookeeper來進行所有Broker的管理。
  2. 生產者通過監聽zookeeper上Broker節點感知Broker,Topic的狀態,變更,來實現動態負載均衡機制,當然這個機制Kafka已經結合zookeeper實現了。
  3. 記錄消息消費進度Offset記錄。
  4. 記錄消息分區於消費者的關係。

另外,新版本在主鍵弱化zookeeper的作用,減少了對zookeeper的依賴。

 

如何選擇partitions的數目

越多的partitions會有更高的吞吐量,但是它會增加時延,不可靠性,以及更多的存儲空間。所以,需要一些權衡。

什麼是kafka的消費者組

消費者組保證了以下內容:

  1. 一個分區只可以被消費組中的一個消費者所消費。
  2. 一個消費組中的一個消費者可以消費多個分區。
  3. 一個消費組中的不同消費者消費的分區一定不會重複。
  4. 一個消費組所有消費者一起消費所有的分區

作用:

  1. 高性能,同一個消費者組的消費者分擔了壓力,比一個消費者強。
  2. 消費模式靈活,可以有不同的組合方式。
  3. 故障容災,如果一個消費者組中的一個消費者故障了,其它消費者仍然可以消費所有的分區。

 

剩餘的內容

下載並安裝kafka,搭建環境。

Kafka的簡單生產者消費者代碼實現。

參考文章

  1. https://zhuanlan.zhihu.com/p/37405836
  2. https://sookocheff.com/post/kafka/kafka-in-a-nutshell/
  3. https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying
  4. https://blog.csdn.net/u011311291/article/details/85264046?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
  5. https://www.confluent.io/blog/how-choose-number-topics-partitions-kafka-cluster/
  6. https://blog.csdn.net/john1337/article/details/103060820

關注微信公衆號,你還有頭髮嗎,獲取更多java軟件開發學習資源,覆蓋java基礎,android,網絡編程,併發編程,mysql,linux,算法,以及C++和python書籍資源。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章