訊息來了,怎麼辦?(初識kafaka)

訊息來了,怎麼辦?(初識kafaka)

1。什麼是kafka?

kafka是由 Apache軟體基金會開發的一個開源流處理平臺,由 Scala 和 Java 編寫。Kafka是一種高吞吐量的分散式釋出訂閱訊息系統,類似的訊息系統有很多,這裡不再贅述。

訊息來了,怎麼辦?(初識kafaka)

2。kafka的相關概念介紹

producer:訊息生產者,釋出訊息到 kafka 叢集的終端或服務。

broker:kafka 叢集中包含的伺服器。

topic:每條釋出到 kafka 叢集的訊息屬於的類別,即 kafka 是面向 topic 的。

partition:partition 是物理上的概念,每個 topic 包含一個或多個 partition。kafka 分配的單位是 partition。

consumer:從 kafka 叢集中消費訊息的終端或服務。

Consumer group:high-level consumer API 中,每個 consumer 都屬於一個 consumer group,每條訊息只能被 consumer group 中的一個 Consumer 消費,但可以被多個 consumer group 消費。

replica:partition 的副本,保障 partition 的高可用。

leader:replica 中的一個角色, producer 和 consumer 只跟 leader 互動。

follower:replica 中的一個角色,從 leader 中複製資料。

controller:kafka 叢集中的其中一個伺服器,用來進行 leader election 以及 各種 failover。

zookeeper:kafka 透過 zookeeper 來儲存叢集的 meta 資訊。

訊息來了,怎麼辦?(初識kafaka)

3。kafka應用場景

1。監控:主機透過Kafka傳送與系統和應用程式健康相關的指標,然後這些資訊會被收集和處理從而建立監控儀表盤併發送警告。

2。訊息佇列: 應用程度使用Kafka作為傳統的訊息系統實現標準的佇列和訊息的釋出—訂閱,例如搜尋和內容提要(Content Feed)。比起大多數的訊息系統來說,Kafka有更好的吞吐量,內建的分割槽,冗餘及容錯性,這讓Kafka成為了一個很好的大規模訊息處理應用的解決方案。訊息系統 一般吞吐量相對較低,但是需要更小的端到端延時,並嚐嚐依賴於Kafka提供的強大的永續性保障。在這個領域,Kafka足以媲美傳統訊息系統,如ActiveMR或RabbitMQ

3。站點的使用者活動追蹤: 為了更好地理解使用者行為,改善使用者體驗,將使用者查看了哪個頁面、點選了哪些內容等資訊傳送到每個資料中心的Kafka叢集上,並透過Hadoop進行分析、生成日常報告。

4。流處理:儲存收集流資料,以提供之後對接的Storm或其他流式計算框架進行處理。很多使用者會將那些從原始topic來的資料進行階段性處理,彙總,擴充或者以其他的方式轉換到新的topic下再繼續後面的處理。例如一個文章推薦的處理流程,可能是先從RSS資料來源中抓取文章的內容,然後將其丟入一個叫做“文章”的topic中;後續操作可能是需要對這個內容進行清理,比如回覆正常資料或者刪除重複資料,最後再將內容匹配的結果返 還給使用者。這就在一個獨立的topic之外,產生了一系列的實時資料處理的流程。

5。日誌聚合。使用Kafka代替日誌聚合(log aggregation)。日誌聚合一般來說是從伺服器上收集日誌檔案,然後放到一個集中的位置(檔案伺服器或HDFS)進行處理。然而Kafka忽略掉檔案的細節,將其更清晰地抽象成一個個日誌或事件的訊息流。這就讓Kafka處理過程延遲更低,更容易支援多資料來源和分散式資料處理。比起以日誌為中心的系統比如Scribe或者Flume來說,Kafka提供同樣高效的效能和因為複製導致的更高的耐用性保證,以及更低的端到端延遲。

6。永續性日誌:Kafka可以為一種外部的永續性日誌的分散式系統提供服務。這種日誌可以在節點間備份資料,併為故障節點資料回覆提供一種重新同步的機制。Kafka中日誌壓縮功能為這種用法提供了條件。在這種用法中,Kafka類似於Apache BookKeeper專案。

訊息來了,怎麼辦?(初識kafaka)

下一節:kafka基礎配置,實現簡單的釋出訂閱