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受歡迎的主要原因是其出色的性能。它穩定,提供可靠的耐用性,具有靈活的發布/隊列,可以很好地適應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快速且通過批處理和壓縮記錄來有效地使用IO。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始終寫入主題日志的末尾。