1. 程式人生 > >Kafka:大資料開發最火的核心技術

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

大資料時代來臨,如果你還不知道Kafka那你就真的out了!據統計,有三分之一的世界財富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總是在主題日誌的末尾寫入,所以它的消費速度不會受到大小的影響。