歡迎光臨
每天分享高質量文章

詳解Kafka: 大資料開發最火的核心技術

大資料時代來臨,如果你還不知道Kafka那你就真的out了(快速掌握Kafka請參考文章:如何全方位掌握Kafka核心技術)!據統計,有三分之一的世界財富500強企業正在使用Kafka,包括所有TOP10旅游公司,7家TOP10銀行,8家TOP10保險公司,9家TOP10電信公司等等。

 

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等公司也都在使用它。

 

為什麼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總是在主題日誌的末尾寫入,所以它的消費速度不會受到大小的影響。

赞(0)

分享創造快樂