Kafka:大數據開發最火的核心技術

大數據時代來臨,若是你還不知道Kafka那你就真的out了!據統計,有三分之一的世界財富500強企業正在使用Kafka,包括全部TOP10旅遊公司,7家TOP10銀行,8家TOP10保險公司,9家TOP10電信公司等等。react

LinkedIn,Microsoft和Netflix天天都用Kafka處理萬億級的信息。Kafka主要應用於實時信息流的大數據收集或者實時分析(或者二者兼有)。Kafka既能夠爲內存微服務提供持久性服務,也能夠用於向復瑣事件流系統和IoT/IFTTT式自動化系統反饋事件。編程

爲何是Kafka?服務器

Kafka經常使用於實時流數據結構的實時分析。因爲Kafka是一種快速、可擴展、可持久和高容錯的發佈-訂閱消息系統(publish-subscribe messaging system),因此Kafka對於一些Use Case(有大數據量和高響應需求)的支持遠好於JMS、RabbitMQ和AMQP。相比於那些工具,Kafka支持更高的吞吐量,更高的穩定性和副本(replication)特性。這使得它比傳統的MOM更加適合跟蹤服務調用(能夠跟蹤每次調用)或跟蹤IoT傳感器數據。數據結構

Kafka能夠與Flume/Flafka、Spark Streaming、Storm、HBase、Flink以及Spark配合使用,用於實時獲取、分析和處理流數據。Kafka能夠爲Hadoop大數據湖(Hadoop BigData lake)提供數據流。Kafka Broker支持在Hadoop或Spark中低延時地處理和分析海量信息流。此外,Kafka子項目KafkaStreaming可用於實時分析。編程語言

什麼是Kafka Use Case?分佈式

簡而言之,Kafka用於流處理、網站活動跟蹤、度量收集和監視、日誌聚合、實時分析、CEP、將數據注入Spark和Hadoop、CQRS、重放消息、錯誤恢復以及分佈式提交內存計算(微服務)的日誌。微服務

誰在使用Kafka?工具

許多須要快速處理大量數據的大公司都在使用Kafka。Kafka最初是由LinkedIn開發,用它來跟蹤活動數據和運營指標。Twitter把它做爲Storm的一部分來做爲流處理的基礎。Square把Kafka看成總線,將全部系統事件(日誌,自定義事件,指標等)傳輸到各個Square數據中心,或者輸出到Splunk,或者應用於Graphite(儀表板),或者實現Esper-like/ CEP警報系統。Spotify,Uber,Tumbler,Goldman Sachs,PayPal,Box,Cisco,CloudFlare和Netflix等公司也都在使用它。oop

爲何Kafka這麼流行性能

首先最主要的緣由是Kafka具備極佳的性能表現。它很是穩定,能提供穩定的持久化,具備靈活的訂閱-發佈消息隊列,可與N個消費者羣組進行良好擴展,具備強大的複製功能,爲生產者提供可調整的一致性保證,並在碎片級別提供保留排序(即Kafka主題分區)。其次,Kafka能夠很好地兼容須要數據流處理的系統,並將這些系統融合、轉換並加載到其餘存儲。另外,Kafka操做(配置和使用)都很是簡單,並且Kafka的工做原理也很好理解。固然了,若是Kafka處理數據很慢,有再多其餘優勢都是沒有意義的,因此,「多快好省」就是Kafka的最大優點。

爲何Kafka這麼快

Kafka基於zero copy原則,深度依靠操做系統內核實現快速移動數據。Kafka能將數據記錄分批處理。這些批次數據能夠經過端到端的方式從生產者到文件系統(Kafka主題日誌)再到消費者。批處理能實現更高效的數據壓縮並減小I / O延遲。Kafka將不可變的提交日誌寫入連續磁盤,從而避免了隨機磁盤訪問和磁盤尋道速度慢的問題。Kafka支持增長分區進行橫向擴展。它將主題日誌分紅幾百個(可能有數千個)分區分佈到數千個服務器。這種方式可讓Kafka承載海量負載。

Kafka Streaming

Kafka最經常使用於將數據實時傳輸到其餘系統。Kafka做爲一箇中間層來解耦不一樣的實時數據管道。Kafka核心並不適合入數據聚合(data aggregation)或CEP等的直接計算。Kafka Streaming做爲Kafka生態系統的一部分,提供了進行實時分析的能力。Kafka能夠爲Storm,Flink,Spark Streaming以及你的服務和CEP系統提供快速通道系統(實時操做數據系統)。Kafka也用於流數據批量數據分析。它將數據傳輸到大數據平臺或RDBMS,Cassandra,Spark甚至S3中用於將來的數據分析。這些數據存儲一般支持數據分析,報告,數據科學分析,合規性審計和備份。

說了那麼多,讓咱們來討論一個終極命題:

到底什麼是Kafka?

Kafka是一個分佈式流平臺,用於發佈和訂閱記錄流。Kafka能夠用於容錯存儲。Kafka將主題日誌分區複製到多個服務器。Kafka的設計目的是爲了讓你的應用能在記錄生成後當即就能處理。Kafka的處理速度很快,經過批處理和壓縮記錄有效地使用IO。Kafka會對數據流進行解耦。Kafka用於將數據流到數據湖、應用和實時流分析系統中。

Kafka支持多語言

客戶端和服務器之間的Kafka通訊使用基於TCP的線路協議,該協議是版本化和文檔化的。Kafka承諾保持對老客戶端的向後兼容性,並支持多種語言,包括C#,Java,C,Python,Ruby等多種語言。Kafka生態系統還提供REST代理,可經過HTTP和JSON輕鬆集成。Kafka還經過Kafka的融合模式註冊(ConfluentSchema Registry)支持Avro模式。Avro和模式註冊容許客戶以多種編程語言製做和讀取複雜的記錄,並容許記錄的變化。

Kafka的用途

Kafka支持構建實時流數據管道。Kafka支持內存微服務(好比actors,Akka,Baratine.io,QBit,reactors,reactive,,Vert.x,RxJava,Spring Reactor)。Kafka支持構建實時流應用程序,進行實時數據分析,轉換,響應,聚合、加入實時數據流以及執行CEP。

Kafka能夠用來協助收集度量標準或KPI,從多個來源收集統計信息並實現eventsourcing(將應用狀態的全部更改捕獲爲事件序列)。能夠將它與內存微服務和actor系統一塊兒使用,以實現內中服務(分佈式系統的外部提交日誌)。

Kafka能夠用來在節點之間複製數據,爲節點從新同步以及恢復狀態。雖然Kafka主要用於實時數據分析和流處理,但也能夠將其用於日誌聚合,消息傳遞,跟蹤點擊流,審計跟蹤等等。

Kafka可擴展的消息存儲

Kafka是一個很好的記錄或信息存儲系統。Kafka就像一個提交日誌存儲和複製的高速文件系統。這些特色使Kafka適用於各類應用場合。寫入Kafka主題的記錄會持久保存到磁盤並複製到其餘服務器以實現容錯。因爲如今磁盤速度快並且至關大,因此這種方式很是有用。Kafka生產者能夠等待確認,因此消息是持久的,由於生產者在複製完成以前不會完成寫入操做。Kafka磁盤結構能夠很好地擴展。磁盤在大批量流式傳輸時具備很是高的吞吐量。

此外,Kafka客戶端和消費者能夠控制讀取位置(偏移量),這容許在出現重要錯誤(即修復錯誤和重放)時重播日誌等用例。並且,因爲偏移量是按照每一個消費者羣體進行跟蹤的,因此消費者能夠很是靈活地重播日誌。

Kafka的記錄保留 Kafka集羣保留全部公佈的記錄。若是沒有設置限制,它將保留全部記錄直到磁盤空間不足。能夠設置基於時間的限制(可配置的保留期限),也能夠基於空間的限制(可根據存儲空間進行配置)或精簡(保留最新版本的記錄)。除非被時間,空間或精簡等策略刪除,主題日誌中的記錄一直處於可用狀態。因爲Kafka老是在主題日誌的末尾寫入,因此它的消費速度不會受到大小的影響。

相關文章
相關標籤/搜索