Kafka筆記


最近做的一個項目需要跟Kafka打交道,學習了很多相關知識,就到這里來匯總一下。

kafka是一個傳遞消息的系統,原本是用來快速記錄海量log的,現在也經常用作消息隊列。它主要由三個部分組成,producer,broker以及consumer。producer發布消息,broker存儲消息,consumer接收消息。

發布消息的時候,producer會把它發送到broker的某一個topic上。每條消息都只屬於一個topic,而一個topic會有一個或多個partition。那一條消息屬於這個topic的哪一個partition會由一個key來決定。這個key既可以由用戶定義,也可以由producer在發送的時候自己決定。

broker收到消息后會把它變為二進制形式添加到所屬topic的log的最后。注意,Kafka只能在log最末尾添加新的消息,而不能在任意地方插入、刪除或者編輯。然后broker會發送一個成功的消息給producer。由於broker的本質其實是一個zookeeper的集群,producer的消息其實會發給所有的broker。producer可以在發送的時候就定義發送成功的標准是收到任意一個broker的成功回復還是所有brokers還是大多數brokers的成功回復。

consumer接收消息的情況有些復雜。首先consumers會被分成不同的組。Kafka可以保證一條消息會被關注這個消息topic的每一個組中的一個且僅有一個consumer收到。這樣用戶就可以靈活的定義一個topic下的消息要被廣播還是負載均衡了。兩個極端情況:1,所有consumer都在一個group,那么broker相當於一個負載均衡器,每條消息會被送到不同的consumer;2,所有consumer都在不同group,那么相當於廣播,每一條消息會被送給所有的consumer。其它情況都在這兩者之間。

Kafka的配置也有些繁瑣。為了使用Kafka,首先你得有一個Zookeeper。然后對於Consumer來說,必須給定topic和Zookeeper地址,其它還可以設一些timeout之類的東西。對於Producer來說,需要給定Brokers,Zookeeper地址,其它還可以設一些緩存大小,timeout之類的。如果你想結合Avro來使用Kafka,那么還必須為Consumer和Producer設置Avro Schema Registry的地址。Avro是一套很復雜的定義文件結構的系統,我會在之后的博客中提到。

那Kafka的基本使用就是這樣了。有興趣的可以去Apache官網下下來玩一玩。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM