程序員基礎解答:什麼是Kafka?

Kafka的成長正在蹦沙卡拉卡!

在《財富》 500強公司中,超過三分之一的公司使用Kafka。這些公司包括排名前十的旅行社,排名前十的銀行中有七個,排名前十的保險公司中有八個,排名前十的電信公司中有九個,等等。LinkedIn,Microsoft和Netflix每天使用Kafka(1,000,000,000,000)處理消息。國內騰訊、阿里、特別是支付寶等,都大量在用。

Kafka用於實時數據流,收集大數據或進行實時分析。Kafka與內存中的微服務一起使用,提供持久性,並且可以將事件饋送到CEP(複雜事件流系統)和IoT / IFTTT風格的自動化系統。

為什麼選擇Kafka?

Kafka通常用於實時流數據架構中以提供實時分析。由於Kafka是一種快速,可伸縮,持久且具有容錯能力的發佈系統,因此Kafka用於JMS、RabbitMQ和AMQP的用例中。

Kafka具有更高的吞吐量,可靠性和複製特性,這使其可用於跟蹤服務呼叫或跟蹤可能不考慮傳統MOM的IoT傳感器數據之類的事。

Kafka可以與Flume / Flafka,Spark Streaming,Storm,HBase,Flink和Spark一起使用,以實時提取,分析和處理流數據。也是用於送Hadoop BigData的數據流。同時它還代理支持大量消息流,以便在Hadoop或Spark中進行低延遲的後續分析。此外,Kafka Streams(一個子項目)也可以用於實時分析。

Kafka用例

簡而言之,Kafka用於流處理,網站活動跟蹤,指標收集和監視,日誌聚合,實時分析,CEP,將數據攝取到Spark中,將數據攝取到Hadoop,CQRS,重播消息,錯誤恢復和有保證的分佈式提交用於內存計算(微服務)的日誌。

誰使用Kafka?

許多處理大量數據的大公司都使用Kafka。起源於LinkedIn的LinkedIn用來跟蹤活動數據和運營指標。Twitter將其用作Storm的一部分,以提供流處理基礎結構。Square使用Kafka作為總線,將所有系統事件移至各個Square數據中心(日誌,自定義事件,指標等),向Splunk輸出,用於Graphite(儀表板),並實現類似Esper/CEP警報系統。

國外Spotify,Uber,Tumbler,Goldman Sachs,PayPal,Box,Cisco,CloudFlare和Netflix等其他公司也都會使用它。

程序員基礎解答:什麼是Kafka?

為什麼Kafka如此受歡迎?

Kafka具有操作簡便性。Kafka易於設置和使用,並且很容易弄清楚Kafka是如何工作的。但是,Kafka受歡迎的主要原因是其出色的性能。它穩定,提供可靠的耐用性,具有靈活的發佈/隊列,可以很好地適應N個消費者組,具有強大的複製能力,為生產者提供可調的一致性保證,並且可以在分片級別(即Kafka)提供保留的訂購主題分區)。

此外,Kafka可以與需要處理數據流的系統配合使用,並使這些系統能夠聚合,轉換並加載到其他商店中。但是,如果Kafka慢一點,那麼這些特徵都將無關緊要。

為什麼Kafka這麼快?

Kafka非常依賴OS內核來快速移動數據。它依賴零複製的原理 。通過Kafka,可以將數據記錄分批處理。從生產者——文件系統(Kafka主題日誌)——消費者這條路徑中,可以端對端地查看這些批次的數據。

批處理允許更有效的數據壓縮並減少I / O延遲。Kafka將不可變的提交日誌順序寫入磁盤,從而避免了隨機磁盤訪問和緩慢的磁盤搜索。並通過分片提供水平縮放。它會將主題日誌分片到數百個(可能是數千個)分區中,成千上萬個服務器。這種分片使Kafka可以處理大量負載。

Kafka:流式架構

Kafka最常用於將數據實時流式傳輸到其他系統中。Kafka是中間層,用於分離實時數據管道。

Kafka核心不適用於直接計算,例如數據聚合或CEP。Kafka流是Kafka生態系統的一部分,提供了進行實時分析的功能。

Kafka可用於為Storm,Flink,Spark流以及您的服務和CEP系統等快速通道系統(實時和操作數據系統)提供數據。還用於流數據以進行批處理數據分析。Kafka支持Hadoop。它將數據流式傳輸到大數據平臺或RDBMS,Cassandra,Spark甚至S3中,以進行將來的數據分析。這些數據存儲通常支持數據分析,報告,數據科學處理,合規性審核和備份。

程序員基礎解答:什麼是Kafka?

Kafka流架構圖


現在,說了上面這些有的沒的前綴,說說真正的問題:

什麼是Kafka?

Kafka是一個分佈式流媒體平臺,用於發佈和訂閱記錄流。Kafka用於容錯存儲。Kafka將主題日誌分區複製到多個服務器。Kafka旨在允許您的應用程序在記錄發生時進行處理。Kafka快速且通過批處理和壓縮記錄來有效地使用IO。Kafka用於解耦數據流。Kafka用於將數據流傳輸到數據庫,應用程序和實時流分析系統中。

程序員基礎解答:什麼是Kafka?

Kafka是多語種

來自客戶端和服務器的Kafka通信使用經過版本控制和記錄的TCP有線協議。Kafka承諾與較舊的客戶端保持向後兼容性,並且支持多種語言。有C#,Java,C,Python,Ruby和許多其他語言的客戶端。Kafka生態系統還提供REST代理,允許通過HTTP和JSON輕鬆集成,這使得集成更加容易。

Kafka還通過Confluent Schema Registry for Kafka支持Avro模式。Avro和Schema Registry允許客戶端以多種編程語言生成和讀取複雜的記錄,並允許記錄的演變。因此它是真正的多語種。

Kafka很有用

Kafka允許構建實時流數據管道。Kafka支持內存中的微服務(即actor,Akka, Baratine.io,QBit,reactor,reactive,Vert.x,RxJava和Spring Reactor)。Kafka允許構建對流做出反應的實時流應用程序,以進行實時數據分析,轉換,反應,聚合,加入實時數據流,以及執行 CEP(複雜事件處理)。

  • 我們可以使用Kafka來幫助收集指標/ KPI,彙總來自許多來源的統計信息以及實施事件源。
  • 可以將其與微服務(內存中)和參與者系統一起使用以實現內存服務(分佈式系統的外部提交日誌)。
  • 可以使用Kafka在節點之間複製數據,為節點重新同步以及恢復狀態。儘管Kafka主要用於實時數據分析和流處理,但也可以將其用於日誌聚合,消息傳遞,點擊流跟蹤,審計跟蹤等。

在數據科學和分析非常重要的世界中,捕獲數據以饋入數據湖和實時分析系統也 很重要。而且由於Kafka可以承受這些特別複雜的用例,因此Kafka至關重要。

Kafka是可伸縮的消息存儲

Kafka是一個很好的記錄/消息存儲系統。Kafka就像高速文件系統一樣,用於提交日誌的存儲和複製。這些特性使Kafka可用於各種應用程序。

寫入Kafka主題的記錄將保存到磁盤,並複製到其他服務器以實現容錯。由於現代驅動器速度快且體積很大,因此非常適合並且非常有用。Kafka生產者可以等待確認,因此消息是持久的,因為在消息複製之前生產者的操作不會完成。Kafka磁盤結構可伸縮。當批量寫入大量流時,現代磁盤驅動器具有很高的吞吐量。

同樣,Kafka的客戶和消費者可以控制讀取位置(偏移量),這允許使用案例,例如,如果存在嚴重錯誤(例如,修復錯誤和重新播放),則重播日誌。

Kafka的保留紀錄

Kafka集群保留所有已發佈的記錄。如果未設置限制,它將保留記錄,直到磁盤空間用完為止。您可以設置基於時間的限制(可配置的保留期限),基於大小的限制(可根據大小配置)或壓縮(使用鍵保留最新的記錄版本)。例如,您可以將保留策略設置為三天或兩週或一個月。可以使用主題日誌中的記錄,直到按時間,大小或壓縮將其丟棄。消耗速度不受大小影響,因為Kafka始終寫入主題日誌的末尾。


分享到:


相關文章: