1.概述
經過一個多月的時間觀察,業務上在集成Kafka后,各方面還算穩定,這里打算抽時間給大家分享一下Kafka在實際場景中的一些使用心得。本篇博客打算先給大家入個門,讓大家對Kafka有個初步的了解,知道Kafka是做什么的,下面是本篇博客的目錄內容:
- Kafka背景
- Kafka應用場景
- Kafka架構原理
下面開始今天的博客分享內容。
2.Kafka背景
Kafka它本質上是一個消息系統,由當時從LinkedIn出來創業的三人小組開發,他們開發出了Apache Kafka實時信息隊列技術,該技術致力於為各行各業的公司提供實時數據處理服務解決方案。Kafka為LinkedIn的中樞神經系統,管理從各個應用程序的匯聚,這些數據經過處理后再被分發到其他地方。Kafka不同於傳統的企業信息隊列系統,它是以近乎實時的方式處理流經一個公司的所有數據,目前已經服務於LinkedIn、Netflix、Uber以及Verizon,並為此建立了實時信息處理平台。
流水數據是所有站點對其網站使用情況做報表時都要用到的數據中最常用的一部分,流水數據包括PV,瀏覽內容信息以及搜索記錄等。這些數據通常是先以日志文件的形式存在,然后有周期的去對這些日志文件進行統計分析處理,然后獲得需要的KPI指標結果。
3.Kafka應用場景
我們在接觸一門新技術或是新語言時,得明白這門技術(或是語言)的應用場景,也就說要明白它能做什么,服務的對象是誰,下面用一個圖來說明,如下圖所示:
首先,Kafka可以應用於消息系統,比如,當下較為熱門的消息推送,這些消息推送系統的消息源,可以使用Kafka作為系統的核心組建來完成消息的生產和消息的消費。然后是網站的行跡,我們可以將企業的Portal,用戶的操作記錄等信息發送到Kafka中,按照實際業務需求,可以進行實時監控,或者做離線處理等。最后,一個是日志收集,類似於Flume套件這樣的日志收集系統,但Kafka的設計架構采用push/pull,適合異構集群,Kafka可以批量提交消息,對Producer來說,在性能方面基本上是無消耗的,而在Consumer端中,我們可以使用HDFS這類的分布式文件存儲系統進行存儲。
4.Kafka架構原理
Kafka的設計之初是希望做一個統一的信息收集平台,能夠實時的收集反饋信息,並且具有良好的容錯能力。Kafka中我們最直觀的感受就是它的消費者與生產者,如下圖所示:
4.1Producer And Consumer
這里Kafka對消息的保存是根據Topic進行歸類的,由消息生產者(Producer)和消息消費者(Consumer)組成,另外,每一個Server稱為一個Broker。對於Kafka集群而言,Producer和Consumer都依賴於ZooKeeper來保證數據的一致性。
4.2Topic
在每條消息輸送到Kafka集群后,消息都會由一個Type,這個Type被稱為一個Topic,不同的Topic的消息是分開存儲的。如下圖所示:
一個Topic會被歸類為一則消息,每個Topic可以被分割為多個Partition,在每條消息中,它在文件中的位置稱為Offset,用於標記唯一一條消息。在Kafka中,消息被消費后,消息仍然會被保留一定時間后在刪除,比如在配置信息中,文件信息保留7天,那么7天后,不管Kafka中的消息是否被消費,都會被刪除;以此來釋放磁盤空間,減少磁盤的IO消耗。
在Kafka中,一個Topic的多個分區,被分布在Kafka集群的多個Server上,每個Server負責分區中消息的讀寫操作。另外,Kafka還可以配置分區需要備份的個數,以便提高可用行。由於用到來ZK來協調,每個分區都有一個Server為Leader狀態,服務對外響應(如讀寫操作),若該Leader宕機,會由其他的Follower來選舉出新的Leader來保證集群的高可用性。
5.總結
總體來說,介紹Kafka的相關背景,概述及原理,這些較為偏理論,概念性較強,需要大家認真的去理解、琢磨,這里可以大致熟悉一下,心中有個輪廓,后面會陸續介紹Kafka的實戰用法,讓大家在實際業務和編碼中去體會Kafka的這些原理。
6.結束語
這篇博客就和大家分享到這里,如果大家在研究學習的過程當中有什么問題,可以加群進行討論或發送郵件給我,我會盡我所能為您解答,與君共勉!