今天,咱們正在使用Apache Kafka Tutorial開始咱們的新旅程。在這個Kafka教程中,咱們將看到什麼是Kafka,Apache Kafka歷史以及Kafka的緣由。此外,咱們將學習Kafka Architecture,Kafka和Kafka Partition的組件。此外,咱們將討論Kafka和Kafka用例中的各類比較。除此以外,咱們將在這個Kafka教程中看到各類術語,如Kafka Broker,Kafka Cluster,Kafka Consumer,Kafka Topics等。
因此,讓咱們開始Apache Kafka教程。java
在使用基於消息的主題實現生產者和消費者之間的通訊時,咱們使用Apache Kafka。Apache Kafka是一種快速,可擴展,容錯,發佈 - 訂閱的消息傳遞系統。基本上,它爲高端新一代分佈式應用程序設計了一個平臺。linux
此外,它容許大量永久或臨時消費者。Kafka的最佳功能之一是,它具備高可用性和對節點故障的彈性,並支持自動恢復。此功能使Apache Kafka成爲實際數據系統中大規模數據系統組件之間通訊和集成的理想選擇。數據庫
此外,該技術取代了傳統的消息代理,可以提供更高的吞吐量,可靠性和複製,如JMS,AMQP等等。此外,核心抽象Kafka還提供Kafka經紀人,Kafka製片人和Kafka消費者。Kafka代理是Kafka集羣上的一個節點,它的用途是持久化並複製數據。Kafka Producer將消息推送到名爲Kafka Topic的消息容器中。而卡夫卡消費者則從卡夫卡主題中汲取信息。apache
在繼續學習Kafka教程以前,讓咱們先了解一下Kafka中術語Messaging System的實際含義。後端
當咱們將數據從一個應用程序傳輸到另外一個應用程序時,咱們使用消息系統。結果是,在不擔憂如何共享數據的狀況下,應用程序能夠僅關注數據。在可靠消息排隊的概念上,基於分佈式消息傳遞。可是,消息在客戶端應用程序和消息傳遞系統之間異步排隊。有兩種類型的消息傳遞模式可用,即點對點和發佈 - 訂閱(pub-sub)消息傳遞系統。可是,大多數消息傳遞模式都遵循pub-sub。
你知道Kafka Cluster嗎?安全
這裏,消息持久存儲在隊列中。儘管如此,即便一個或多個消費者可使用隊列中的消息,也能夠僅由最多一個消費者使用特定消息。此外,它確保消費者一旦在隊列中讀取消息,它就會從該隊列中消失。app
此處,消息將保留在主題中。在此係統中,Kafka Consumers能夠訂閱一個或多個主題並使用該主題中的全部消息。此外,消息製做者將發佈者和消息消費者稱爲訂閱者。異步
之前,LinkedIn面臨着從網站上大量數據的低延遲攝取到lambda架構的問題,該架構能夠處理實時事件。做爲一種解決方案,Apache Kafka是在2010年開發的,由於以前沒有任何解決方案能夠解決這個缺點。
可是,有可用於批處理的技術,但這些技術的部署細節與下游用戶共享。所以,雖然涉及實時處理,但這些技術還不夠合適。而後,在2011年,卡夫卡被公之於衆。
衆所周知,大數據中存在大量數據。並且,在涉及大數據時,存在兩個主要挑戰。一種是收集大量數據,另外一種是分析收集的數據。所以,爲了克服這些挑戰,咱們須要一個消息傳遞系統。而後Apache Kafka證實了它的實用性。Apache Kafka有許多好處, 例如:
所以,該技術因其普遍使用而對一些最流行的應用程序(如ActiveMQ,RabbitMQ,AWS等)進行了激烈的競爭。
但願 使用Apache Kafka消息傳遞系統在大數據分析領域開展職業的專業人士應該參考這篇Kafka Tutorial文章。它將使您徹底瞭解Apache Kafka。
在繼續本Apache Kafka教程以前,您必須對Java,Scala,分佈式消息傳遞系統和Linux環境有很好的理解。
下面咱們將討論這個Apache Kafka教程中的四個核心API:
一個。Kafka Producer API
此Kafka Producer API容許應用程序將記錄流發佈到一個或多個Kafka主題。
灣 Kafka Consumer API
要訂閱一個或多個主題並處理在應用程序中生成的記錄流,咱們使用此Kafka Consumer API。
C。Kafka Streams API
爲了充當流處理器,消耗來自一個或多個主題的輸入流,併爲一個或多個輸出主題生成輸出流,並有效地將輸入流轉換爲輸出流,此Kafka Streams API容許應用。
d。Kafka Connector API
此Kafka Connector API容許構建和運行將Kafka主題鏈接到現有應用程序或數據系統的可重用生產者或使用者。例如,關係數據庫的鏈接器可能捕獲對錶的每一個更改。
Apache Kafka安全| Kafka的需求和組成部分
使用如下組件,Kafka實現了消息傳遞:
基本上,Kafka如何在其系統中存儲和組織消息,本質上是一組消息是主題。此外,咱們能夠複製和分區主題。這裏,複製是指副本和分區指的是分區。此外,將它們可視化爲日誌,其中,Kafka存儲消息。可是,這種複製和分區主題的能力是實現Kafka容錯和可擴展性的因素之一。
它將消息發佈到Kafka主題。
該組件訂閱主題,讀取和處理來自主題的消息。
Kafka Broker管理主題中的消息存儲。若是Kafka有多個經紀人,那就是咱們所說的Kafka集羣。
爲了向經紀人提供有關係統中運行的流程的元數據,並促進健康檢查和經紀人領導選舉,Kafka使用Kafka zookeeper。
咱們將日誌視爲此Kafka教程中的分區。基本上,數據源將消息寫入日誌。其中一個優勢是,一個或多個消費者在任什麼時候候從他們選擇的日誌中讀取。這裏,下圖顯示了數據源正在寫入日誌,而且消費者正在以不一樣的偏移量讀取日誌。
經過Kafka,消息能夠保留至關長的時間。此外,消費者能夠根據本身的方便閱讀。可是,若是Kafka配置爲將消息保留24小時且消費者停留的時間超過24小時,則消費者將丟失消息。而且,若是消費者的部分停機時間僅爲60分鐘,則能夠從最後已知的偏移量讀取消息。卡夫卡沒有說明消費者從主題中讀到什麼。
每一個Kafka經紀人都有幾個分區。此外,每一個分區能夠是主題的領導者或副本。此外,隨着使用新數據更新副本,Leader負責對主題的全部寫入和讀取。若是領導者以某種方式失敗,副本將成爲新的領導者。
Apache Kafka是用純Java編寫的,Kafka的本機API也是java。可是,許多其餘語言,如C ++,Python, .Net,Go等也支持Kafka。不過,一個不須要使用第三方庫的平臺就是Java。另外,咱們能夠說,用Java語言編寫代碼會有點開銷。
另外,若是咱們須要Kafka標準的高處理速率,咱們可使用 Java 語言。此外,Java爲Kafka消費者客戶提供了良好的社區支持。所以,在Java中實現Kafka是一個正確的選擇。
Kafka有幾個使用案例,說明咱們實際使用Apache Kafka的緣由。
對於更傳統的消息代理,Kafka能夠做爲替代品。咱們能夠說Kafka具備更好的吞吐量,內置分區,複製和容錯功能,這使其成爲大規模消息處理應用程序的理想解決方案。
對於運營監控數據,Kafka找到了良好的應用程序。它包括彙總分佈式應用程序的統計信息,以生成操做數據的集中式提要。
因爲它支持很是大的存儲日誌數據,這意味着Kafka是事件源的應用程序的優秀後端。
許多應用程序提供與Kafka相同的功能,如ActiveMQ,RabbitMQ,Apache Flume,Storm和Spark。那麼爲何要選擇Apache Kafka而不是其餘人呢?
咱們來看下面的比較:
一世。工具類型
Apache Kafka - 對於多個生產者和消費者,它是一種通用工具。
Apache Flume - 它是一種用於特定應用程序的專用工具。
II。複製功能
Apache Kafka - 使用攝取管道,它複製事件。
Apache Flume- 它不會複製事件。
最重要的Apache Kafka替代品之一是RabbitMQ。那麼,讓咱們看看它們之間的區別如何:
一世。功能
Apache Kafka - 基本上,Kafka是分佈式的。此外,憑藉有保證的持久性和可用性,數據能夠共享和複製。
RabbitMQ - 它對這些功能的支持相對較少。
II。性能速度
Apache Kafka -其性能速率高達100,000條/秒。
RabbitMQ - 然而,RabbitMQ 的性能速率約爲20,000條/秒。
III。處理
Apache Kafka -它容許可靠的日誌分佈式處理。此外,Kafka Streams內置的流處理語義。
RabbitMQ -在這裏,消費者只是基於FIFO,從HEAD讀取並處理1乘1.
讓咱們學習Kafka與RabbitMQ
一世。保留
傳統排隊系統 的消息 - 大多數排隊系統在一般從隊列末尾處理消息後刪除消息。
Apache Kafka - 此處,消息在處理後仍然存在。當消費者收到它們時,它們不會被移除。
II。基於邏輯的處理
傳統的排隊系統 - 它不容許基於相似的消息或事件處理邏輯。
Apache Kafka - 它容許基於相似的消息或事件處理邏輯。
因此,這就是Apache Kafka Tutorials。但願你喜歡咱們的解釋。
所以,在這個Kafka教程中,咱們已經看到了Apache Kafka的概念。此外,咱們討論了Kafka組件,用例和Kafka架構。最後,咱們看到了Kafka與其餘消息傳遞工具之間的比較。此外,若是您對Kafka Tutorial有任何疑問,請隨時在評論部分詢問。
另請參閱 -
Kafka Consumer
供參考