Kafka - 第一章 | Apache Kafka 概述
在大數據中,使用了大量的數據。關於數據,我們有兩個主要挑戰。第一個挑戰是如何收集大量的數據,第二個挑戰是分析收集的數據。為了克服這些挑戰,你必須需要一個消息系統。
Kafka
專為分佈式高吞吐量系統而設計。Kafka
往往工作得很好,作為一個更傳統的消息代理的替代品。與其他消息傳遞系統相比,Kafka
具有更好的吞吐量,內置分區,複製和固有的容錯能力,這使得它非常適合大規模消息處理應用程序。
什麼是 Kafka ?
kafka
是消息中間件的一種,在開始學習之前,先簡單的解釋一下什麼是消息中間件,只是粗略的講解,目前kafka
已經可以做更多的事情。
舉個例子:
目前有生產者、消費者,而生產者生產雞蛋,消費者消費雞蛋。
生產者生產一個雞蛋,消費者就消費一個雞蛋,假設消費者消費雞蛋的時候噎住了(系統當機了),生產者還在生產雞蛋,那新生產的雞蛋就丟失了。
再比如生產者很強勁(大交易量的情況),生產者1秒鐘生產100個雞蛋,消費者1秒鐘只能吃50個雞蛋,那要不了一會,消費者就吃不消了(消息堵塞,最終導致系統超時),消費者拒絕再吃了,雞蛋又丟失了。
註:以上這種狀況就是在沒有消息中間件的一種架構上。
這個時候我們放個籃子在它們中間,生產出來的雞蛋都放到籃子裡,消費者去籃子裡拿雞蛋,這樣雞蛋就不會丟失了,都在籃子裡,而這個籃子就是kafka
。
雞蛋其實就是「數據流」,系統之間的交互都是通過「數據流」來傳輸的(就是tcp
、https
什麼的),也稱為報文,也叫「消息」。
消息隊列滿了,其實就是籃子滿了,雞蛋放不下了,那趕緊多放幾個籃子,其實就是kafka
的擴容。
其實kafka
是乾什麼的,它就是那個「籃子」。
kafka 好處
- 可靠性:
Kafka
是分佈式,分區,複製和容錯的。 - 可擴展性:
Kafka
消息傳遞系統輕鬆縮放,無需停機。 - 耐用性:
Kafka
使用分佈式提交日誌,這意味著消息會盡可能快地保留在磁盤上,因此它是持久的。 - 性能:
Kafka
對於發布和訂閱消息都具有高吞吐量。即使存儲了許多TB
的消息,它也保持穩定的性能。
Kafka非常快,並保證零停機和零數據丟失。
kafka 名詞解釋
關於kafka
的名詞,比如topic
、producer
、consumer
、broker
,簡單說明一下:
- producer:生產者,就是它來生產雞蛋的。
- consumer:消費者,生出的雞蛋它來消費。
- topic:把它理解為標籤,生產者每生產出來一個雞蛋就貼上一個標籤(
topic
),消費者可不是誰生產的雞蛋都吃的,這樣不同的生產者生產出來的雞蛋,消費者就可以選擇性的吃了。 - broker:就是籃子了。
大家一定要學會抽象的去思考,上面只是屬於業務的角度,如果從技術角度,topic
標籤實際就是隊列,生產者把所有雞蛋(消息)都放到對應的隊列裡了,消費者到指定的隊列裡取。
Kafka 用例
Kafka
可以在許多用例中使用。其列出部分如下:
- 指標:
Kafka
通常用於操作監控數據。這涉及聚合來自分佈式應用程序的統計信息,以產生操作數據的集中饋送。 - 日誌聚合解決方案:
Kafka
可用於跨組織從多個服務收集日誌,並使它們以標準格式提供給多個服務器。 - 流處理:流行的框架(如
Storm
和Spark Streaming
)從主題中讀取數據,對其進行處理,並將處理後的數據寫入新主題,供用戶和應用程序使用。