天天看點

kafka消息系統-初識kafka為什麼需要消息系統kafkakafka特點Kafka一些重要設計思想

為什麼需要消息系統

1.解耦:

允許你獨立的擴充或修改兩邊的處理過程,隻要確定它們遵守同樣的接口限制。

2.備援:

消息隊列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丢失風險。許多消息隊列所采用的”插入-擷取-删除”範式中,在把一個消息從隊列中删除之前,需要你的處理系統明确的指出該消息已經被處理完畢,進而確定你的資料被安全的儲存直到你使用完畢。

3.擴充性:

因為消息隊列解耦了你的處理過程,是以增大消息入隊和處理的頻率是很容易的,隻要另外增加處理過程即可

4.靈活性 & 峰值處理能力:

在通路量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量并不常見。如果為以能處理這類峰值通路為标準來投入資源随時待命無疑是巨大的浪費。使用消息隊列能夠使關鍵元件頂住突發的通路壓力,而不會因為突發的超負荷的請求而完全崩潰。

5.可恢複性:

系統的一部分元件失效時,不會影響到整個系統。消息隊列降低了程序間的耦合度,是以即使一個處理消息的程序挂掉,加入隊列中的消息仍然可以在系統恢複後被處理。

6.順序保證:

在大多使用場景下,資料處理的順序都很重要。大部分消息隊列本來就是排序的,并且能保證資料會按照特定的順序來處理。(Kafka 保證一個 Partition 内的消息的有序性)

7.緩沖:

有助于控制和優化資料流經過系統的速度,解決生産消息和消費消息的處理速度不一緻的情況。

8.異步通信:

很多時候,使用者不想也不需要立即處理消息。消息隊列提供了異步處理機制,允許使用者把一個消息放入隊列,但并不立即處理它。想向隊列中放入多少消息就放多少,然後在需要的時候再去處理它們。

kafka

kafka消息系統-初識kafka為什麼需要消息系統kafkakafka特點Kafka一些重要設計思想

Kafka is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.

kafka特點

  • 以時間複雜度為O(1)的方式提供消息持久化能力,即使對TB級以上資料也能保證常數時間複雜度的通路性能。
  • 高吞吐率。即使在非常廉價的商用機器上也能做到單機支援每秒100K條以上消息的傳輸。
  • 支援Kafka Server間的消息分區,及分布式消費,同時保證每個Partition内的消息順序傳輸。
  • 同時支援離線資料處理和實時資料處理。
  • Scale out:支援線上水準擴充。

Kafka一些重要設計思想

  • Kafka叢集中broker之間的關系:不是主從關系,各個broker在叢集中地位一樣,我們可以随意的增加或删除任何一個broker節點。
  • 負載均衡方面: Kafka提供了一個 metadata API來管理broker之間的負載(對Kafka0.8.x而言,對于0.7.x主要靠zookeeper來實作負載均衡)。
  • 同步異步:Producer采用異步push方式,極大提高Kafka系統的吞吐率(可以通過參數控制是采用同步還是異步方式)。
  • 分區機制partition:Kafka的broker端支援消息分區,Producer可以決定把消息發到哪個分區,在一個分區中消息的順序就是Producer發送消息的順序,一個主題中可以有多個分區,具體分區的數量是可配置的。分區的意義很重大,後面的内容會逐漸展現。
  • 離線資料裝載:Kafka由于對可拓展的資料持久化的支援,它也非常适合向Hadoop或者資料倉庫中進行資料裝載。
  • 插件支援:現在不少活躍的社群已經開發出不少插件來拓展Kafka的功能,如用來配合Storm、Hadoop、flume相關的插件。