kafka使用心得隨手記

  最近手上的項目須要拉去kafka的消息進行消費,不過之前沒使用過kafka,這兩天安裝及摸索使用了kafka,對於在一個服務裏開啓多個kafka的消費者來提升消費速度的問題上,目前本身已摸索清楚並測試經過,故記錄下。git

一. 項目場景github

  在分佈式的情景下,有多個應用服務將消息推送到kafka的topic裏,須要開發一個應用服務去拉去kafka的消息並進行消費,因爲消息的生產速度很快,若是隻開一個消費者去進行消費的話,會致使大量消息堆積於kafka,因此須要進行提高消費者的速度。vim

二. 提高消費者速度的手段負載均衡

  • 開啓多個kafka的消費者一塊兒進行消費
  • 對每一個kafka的消費者又開一個業務處理池
  • 其餘(邏輯優化、SQL優化等)

  第二點和第三點已經作了優化了,因此還想從第一點進行優化,如下就對第一點的優化作一個詳細描述。分佈式

三. Kafka的基本知識測試

  • Broker(代理者):Kafka集羣中的機器/服務被成爲broker, 是一個物理概念。
  • Topic(主題):維護Kafka上的消息類型被稱爲Topic,是一個邏輯概念。
  • Partition(分區):具體維護Kafka上的消息數據的最小單位,一個Topic能夠包含多個分區;Partition特性:ordered & immutable。(在數據的產生和消費過程當中,不須要關注數據具體存儲的Partition在那個Broker上,只須要指定Topic便可,由Kafka負責將數據和對應的Partition關聯上)
  • Producer(生產者):負責將數據發送到Kafka對應Topic的進程。
  • Consumer(消費者):負責從對應Topic獲取數據的進程。
  • Consumer Group(消費者組):每一個consumer都屬於一個特定的group組,一個group組能夠包含多個consumer,但一個組中只會有一個consumer消費數據。
  • Message(消息):傳遞的數據對象,主要由四部分構成:offset(偏移量)、key、value、timestamp(插入時間); 其中offset和timestamp在kafka集羣中產生,key/value在producer發送數據的時候產生。

  一個topic能夠配置多個partition,produce發送的消息分發到不一樣的partition中,consumer接受數據的時候是按照group來接受,kafka確保每一個partition只能同一個group中的一個consumer消費,若是想要重複消費,那麼須要其餘的組來消費。優化

四. 走過的那些彎路(也是爲了測試)spa

  • case 1:在一個應用服務裏建立1個消費者,而後把該應用服務放2臺機器去跑,最終也是隻有一個服務能收到消息,只有關閉其一以後,另外一個服務才能收到消息,這不是我所指望的。
  • case 2:在一個應用服務裏建立3個消費者,每一個消費者的GroupID都不同,最終是這3個消費者都接收到了數據,這不是我所指望的。
  • case 3:在一個應用服務裏建立3個消費者,3個消費者的GroupID都是同樣的,最終是隻有一個消費者消費了消息,另2個消費者一直消費不到消息。
  • case 4:修改kafka的配置文件(vim /usr/local/etc/kafka/server.properties),將num.partitions=1修改成num.partitions=5,並重啓kafka,因爲默認kafka的配置是一個topic只有一個partition,而kafka確保每一個partition只能同一個group中的一個consumer消費,當生產者推送消息時因爲會負載均衡的分配到每一個partition(目前partition數量爲5),因此當每一個partition都有數據時,應用服務在這種狀況下一次最多能夠消費5個數據,這樣就提高了消費速度。這纔是我想指望的。

 五. 本身寫的項目代理

  報警監控:https://github.com/hzxgo/alarm_monitorserver

  狀態監控:https://github.com/hzxgo/state_monitor

相關文章
相關標籤/搜索