天天看點

高效實用Kafka-入門介紹

導語:

  随着大資料的到來,對于資料的處理顯得很重要,對于資料資訊所蘊含的價值也越來越多的得到的展現。但是随着資料量的增加,怎麼樣可以更加高效的收集并且分析資料成了一個重頭戲。而對于Kafka來說其實是作為一個消息系統存在。下面就來帶着大家一起分析一下業内比較主流的消息系統消息中間件Kafka。首先提到Kafka就不得不說說消息中間件技術,消息中間件技術是為了解決系統間消息的調用而運用而生,而後有出現了很多的優秀的消息中間件 例如ActiveMQ、RocketMQ、RabbitMQ。而下面主要來介紹的就是Kafka

  在分享Kafka之前,首先帶大家來了解一下消息系統的分類。這樣可以有助于我們更好的了解Kafka。

消息系統的分類

Peer-to-Peer(P2P)
高效實用Kafka-入門介紹

特點

  • 一般是基于Pull或者是Polling接收消息
  • 發送到隊列中的消息被一個而且僅僅一個接收者所接收,即使有多個接受者在同一個消息隊列中偵聽同一個消息
  • 支援異步"即發即棄"的消息傳輸方式,同時也支援同步請求/應答傳送方式。
釋出/訂閱
高效實用Kafka-入門介紹

特點

  • 釋出到一個主題消息,可以被多個訂閱者所接收
  • 釋出/訂閱模式既可以基于Push消費資料,也可以基于Pull或者Polling消費資料
  • 解耦合能力比P2P模型更強

兩者比較

  P2P是單點傳播,釋出訂閱模式是多點傳播,如圖所示,在P2P中一個消息隻能被一個消費者消費,而在釋出訂閱模式中一個消息可以被多個訂閱者接受。并不是說釋出訂閱一定是多點傳播,隻是說釋出訂閱在一定範圍内支援多點傳播這種方式。以Kafka為例,它支援的就是在不同Consumer Group之間的消息的多點傳播,也就是說如果存在多個Consumer Group,每個Group中都會有對應的消息。同時也支援Group内部的消息的單點傳播,也就是說如果一個Group存在多個Consumer,那麼這些Consumer隻能有一個消費消息。

消息系統使用場景

  在之前也提到過消息中間件技術以及消息系統,既然存在這麼多的中間件技術以及消息系統,那麼這些技術的使用場景分别都是什麼?如何能夠更加高效的開發出合适的系統呢?

解耦:各個系統之間通過消息系統進行統一的資料交換,而無需知道彼此的存在與否。

備援:在之前提到的一些消息系統中,有些消息系統具有消息持久化的能力,可以規避在消息處理之前被丢失的風險。

擴充:消息系統往往提供的是統一的資料接口,各個系統之間可獨立的進行系統功能的擴充,隻要不修改統一資料接口即可。

流量消峰:消息系統可以頂住峰值流量,業務系統可以根據自己的處理能力從消息系統中擷取并且處理對應量級的資料請求。例如淘寶雙十一,PV通路增加。限制流量是一種處理方式,但是會造成使用者體驗的問題,是以使用消息中間件技術可以更好的解決這個問題。

可恢複性:系統中如果出現部分元件失效并不會影響整個系統,它可以在系統恢複之後從消息系統中擷取處理的資料。

異步通信:在不需要立即處理的業務場景下使用消息系統,可以講資料請求放到消息系統中,等到何時的時間在進行處理。

當然一個消息系統的存在或者是一種中間件技術的使用不僅僅可以解決這些問題,這些隻是在實際開發中常用到的幾種場景。開發者也可以結合内部原理開發出适合自己的消息中間件技術。

常用的消息系統對比

RabbitMQ

 使用Erlong編寫,支援多協定AMQP、XMPP、SMTP、STOMP。支援負載均衡、資料持久化。同時支援P2P以及釋出訂閱模式。

Redis

 基于Key-Value的NoSQL資料庫,同時支援MQ的功能,可以做輕量級的隊列服務使用,就入隊出隊操作而言Redis對于短消息(小于10KB)在性能上要比RabbitMQ要好,但是對于長消息的處理要比RabbitMQ性能較差

ZeroMQ

 作為一個輕量級的消息系統,不需要單獨的消息伺服器或者中間件,應用本身就扮演可這樣的角色,其實從原理上說它就是故意而開發庫,開發者可以自己組合技術實作消息中間件技術。是以使用的複雜度較高。

ActiveMQ

 基于JMS實作P2P,支援資料持久化、XA事務(分布式事務)等等

Kafka/Jafka

 高性能跨語言的分布式釋出訂閱消息系統,支援資料持久化、全分布式、同時支援線上和離線處理機制。

MetaQ/RocketMQ

&emps;使用純Java實作,釋出訂閱的消息系統,支援本地事務和XA分布式事務。

既然有這麼多的消息系統,那麼Kafka的被設計出來的設計目标是什麼呢

  • 高吞吐量:在廉價的基礎上可以支援高性能讀寫
  • 消息持久化:所有消息都支援持久化到磁盤,沒有消息的丢失,支援消息重放機制
  • 完全的分布式系統:Producer、Broker、Consumer都是支援水準拓展
  • 同時滿足适應線上處理流和離線批處理