簡介 Kafka經常用於實時流數據架構,用於提供實時分析。本篇將會簡單介紹kafka以及它為什麼能夠廣泛應用。 簡介 Kafka經常用於實時流數據架構,用於提供實時分析。本篇將會簡單介紹kafka以及它為什麼能夠廣泛應用。 kafka的增長是爆炸性的。2017年超過三分之一的世界五百強公司在使用ka ...
簡介
Kafka經常用於實時流數據架構,用於提供實時分析。本篇將會簡單介紹kafka以及它為什麼能夠廣泛應用。
kafka的增長是爆炸性的。2017年超過三分之一的世界五百強公司在使用kafka。這其中很多公司每天通過kafka處理超過TB級別的數據。kafka被用於實時數據流、收集大數據或者做一些實時分析。kafka是也為基於記憶體的微服務提供數據持久化並把數據傳輸給複雜的事件流系統和IOT模式的自動化系統。
為什麼選擇Kafka?
Kafka經常用於實時流數據架構,提供實時分析。由於Kafka是一種快速、可伸縮、持久和容錯的發佈-訂閱消息傳遞系統,所以考慮到JMS、RabbitMQ和AMQP可能存在容量和響應性的不足,Kafka在某些情況下是更優選擇。Kafka具有更高的吞吐量、可靠性和複製特性,這使得它適用於跟蹤服務調用(跟蹤每一個調用)或跟蹤物聯網感測器數據,而傳統的MOM在這些方面有其自己的問題。
Kafka可以與Flume/Flafka、Spark Streaming、Storm、HBase、Flink和Spark一起工作,對流媒體數據進行實時攝取、分析和處理。Kafka為Hadoop BigData lakes 提供數據流。Kafka代理支持大量消息流,用於Hadoop或Spark的低延遲後續分析。此外,Kafka Streaming(子項目)也可以用於實時分析。
Kafka 使用情況
簡而言之,Kafka用於流處理、網站活動跟蹤、度量收集和監控、日誌聚合、實時分析、CEP、將數據傳輸到Spark、將數據傳輸到Hadoop、CQRS、重放消息、錯誤恢復以及記憶體計算(微服務)的有保障的分散式提交日誌。
那些人需要使用Kafka?
處理大量數據的大公司都使用Kafka。它的發源地LinkedIn使用它來跟蹤活動數據和運營指標。Twitter將其作為Storm的一部分來提供流處理基礎設施。Square使用Kafka作為匯流排,將所有系統事件轉移到各個Square數據中心(日誌、定製事件、度量等等),輸出到Splunk,用於儀錶板,並實現Esper-like/CEP警報系統。Spotify、Uber、Tumbler、高盛、貝寶(PayPal)、Box、思科(Cisco)、CloudFlare和Netflix等其他公司也在使用這個平臺。
為什麼如此流行?
首先,操作簡單。Kafka是用來設置和使用的,並且很容易知道Kafka是如何工作的。然而,其受歡迎的主要原因是它的出色性能。同時它是穩定的,提供了可靠的持久性,具有靈活的發佈-訂閱/隊列,可以很好地擴展到n個消費者組,具有健壯的複製,為生產者提供了可調的一致性保證,併在碎片級別(即Kafka主題分區)提供了保留的排序。此外,Kafka可以很好地處理具有數據流的系統,並使這些系統能夠聚合、轉換和載入到其他存儲中。但如果kafka處理緩慢,其他優點也就都無關緊要。綜上之所以受歡迎就是因為快。
為什麼快?
Kafka嚴重依賴操作系統內核來快速移動數據。它基於零拷貝的原則。Kafka使您能夠批量數據記錄成塊。可以看到這些批數據從生產者到文件系統(Kafka主題日誌)到消費者。批處理允許更有效的數據壓縮和減少I/O延遲。Kafka將不可變的提交日誌按順序寫入磁碟,從而避免了隨機磁碟訪問和緩慢的磁碟查找。通過分片提供水平分割。它將主題日誌分割成數百個(可能是數千個)到數千台伺服器的分區。這種分片允許Kafka處理大量的負載。
Kafka: 數據流架構
Kafka經常被用於將實時數據流到其他系統中。Kafka是中間層,可以解耦你的實時數據管道。Kafka core不適合直接計算,比如數據聚合或CEP。Kafka流,是Kafka生態系統的一部分,提供實時分析的能力。Kafka可以提供快速通道系統(實時和操作數據系統),比如Storm, Flink, SparkStreaming,以及你的服務和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還通過Confluent模式註冊表支持Avro模式。Avro和Schema Registry允許用多種編程語言生成和讀取複雜的記錄,並允許記錄的演變。
Kafka 的價值
1.Kafka允許您構建實時流數據管道。Kafka支持記憶體中的微服務(即actor、Akka、Baratine.io, QBit,reactive,Vert.x, RxJava, Spring Reactor)。Kafka允許您構建實時流應用程式,對流進行實時數據分析、轉換、反應、聚合、加入實時數據流,並執行CEP(複雜事件處理)。
2.您可以使用Kafka來幫助收集度量/ kpi、聚合來自許多來源的統計數據和實現事件源。您可以將其與微服務(記憶體中)和actor系統一起使用,以實現記憶體中的服務(分散式系統的外部提交日誌)。
3.您可以使用Kafka在節點之間複製數據、重新同步節點和恢復狀態。雖然Kafka主要用於實時數據分析和流處理,但也可以用於日誌聚合、消息傳遞、點擊流跟蹤、審計跟蹤等等
在一個數據科學和分析的世界里,捕獲數據並將其輸入到您的數據湖和實時分析系統也是一個大問題。既然kafka能夠處理這些繁重的用例,那這就是它最大的價值所在。
Kafka 是可擴展的消息存儲
Kafka是一個很好的記錄/消息存儲系統。Kafka就像高速文件系統,用於提交日誌存儲和複製。這些特性使得Kafka對於所有的應用方式都是有用的。寫入到Kafka主題的記錄將被持久化到磁碟,並複製到其他伺服器以實現容錯。由於現代驅動器又快又大,所以它很適合,而且非常有用。Kafka生產者可以等待確認,所以消息是持久的,因為生產者寫如完整直到消息複製完成。硬碟架構可很好地伸縮因為現代磁碟驅動器在批量寫入時具有很高的吞吐量。此外,Kafka客戶端和消費者可以控制讀位置(偏移量),這允許用例在有關鍵錯誤時重放日誌(即修複錯誤和重播)。由於偏移量是按每個消費者組進行跟蹤的,因此消費者可以相當靈活(即重放日誌)。
Kafka 會保留消費記錄
Kafka集群保留所有已發佈的記錄。如果不設置限制,它將保存記錄,直到耗盡磁碟空間。您可以設置基於時間的限制(可配置保留期)、基於大小的限制(可根據大小配置)或壓縮(使用鍵保存最新版本的記錄)。例如,你可以設定3天、2周或1個月的保留政策。主題日誌中的記錄可供使用,直到根據時間、大小或壓縮丟棄為止。消費速度不受大小的影響,因為Kafka總是寫到主題日誌的末尾。
Kafka經常用於實時流數據架構,提供實時分析。由於Kafka是一種快速、可伸縮、持久和容錯的發佈-訂閱消息傳遞系統,所以Kafka在某些情況下甚至不會考慮JMS、RabbitMQ和AMQP,因為它的容量和響應性。Kafka具有更高的吞吐量、可靠性和複製特性,這使得它適用於跟蹤服務調用(跟蹤每一個調用)或跟蹤物聯網感測器數據,而傳統的MOM可能不會被考慮在內。