大數據開發:Apache Kafka分布式流式系統

2021-01-19 騰訊網

Kafka在大數據流式處理場景當中,正在受到越來越多的青睞,尤其在實時消息處理領域,kafka的優勢是非常明顯的。相比於傳統的消息中間件,kafka有著更多的潛力空間。今天的大數據開發分享,我們就主要來講講Apache Kafka分布式流式系統。

關於Apache Kafka

本質上來說,Apache Kafka不是消息中間件的一種實現,它只是一種分布式流式系統。不同於基於隊列和交換器的RabbitMQ,Kafka的存儲層是使用分區事務日誌來實現的。

Kafka也提供流式API用於實時的流處理以及連接器API用來更容易的和各種數據源集成。雲廠商為Kafka存儲層提供了可選的方案,比如Azure Event Hubsy以及AWS Kinesis Data Streams等。這些都是Kafka流處理能力受到肯定的見證。

Kafka主題

Kafka沒有實現隊列這種東西。相應的,Kafka按照類別存儲記錄集,並且把這種類別稱為主題。

Kafka為每個主題維護一個消息分區日誌。每個分區都是由有序的不可變的記錄序列組成,並且消息都是連續的被追加在尾部。

當消息到達時,Kafka就會把他們追加到分區尾部。默認情況下,Kafka使用輪詢分區器(partitioner)把消息一致的分配到多個分區上。

Kafka可以改變創建消息邏輯流的行為。例如,在一個多租戶的應用中,我們可以根據每個消息中的租戶ID創建消息流。

IoT場景中,我們可以在常數級別下根據生產者的身份信息(identity)將其映射到一個具體的分區上。

確保來自相同邏輯流上的消息映射到相同分區上,這就保證了消息能夠按照順序提供給消費者。

Kafka生產者

消費者通過維護分區的偏移(或者說索引)來順序的讀出消息,然後消費消息。

單個消費者可以消費多個不同的主題,並且消費者的數量可以伸縮到可獲取的最大分區數量。

所以在創建主題的時候,我們要認真的考慮一下在創建的主題上預期的消息吞吐量。消費同一個主題的多個消費者構成的組稱為消費者組。

通過Kafka提供的API可以處理同一消費者組中多個消費者之間的分區平衡以及消費者當前分區偏移的存儲。

Kafka消費者

Kafka實現的消息模式

Kafka的實現很好地契合發布/訂閱模式。生產者可以向一個具體的主題發送消息,然後多個消費者組可以消費相同的消息。每一個消費者組都可以獨立的伸縮去處理相應的負載。

由於消費者維護自己的分區偏移,所以他們可以選擇持久訂閱或者臨時訂閱,持久訂閱在重啟之後不會丟失偏移而臨時訂閱在重啟之後會丟失偏移並且每次重啟之後都會從分區中最新的記錄開始讀取。

但是這種實現方案不能完全等價的當做典型的消息隊列模式看待。當然,我們可以創建一個主題,這個主題和擁有一個消費者的消費組進行關聯。這樣我們就模擬出了一個典型的消息隊列。

值得特別注意的是,Kafka是按照預先配置好的時間保留分區中的消息,而不是根據消費者是否消費了這些消息。

這種保留機制可以讓消費者自由的重讀之前的消息。另外,開發者也可以利用Kafka的存儲層來實現諸如事件溯源和日誌審計功能。

關於大數據開發,Apache Kafka分布式流式系統,以上就為大家做了簡單的介紹了。Kafka對實時消息流的處理,尤其是大規模實時消息流的處理,是具備顯著優勢的,掌握Kafka在學習當中非常重要。

相關焦點

  • 使用Kafka Streams創建流數據管道
    Kafka Streams是由Confluent開發的API,用於構建使用Kafka主題,分析,轉換或豐富輸入數據然後將結果發送到另一個Kafka主題的流應用程式。 它使您可以使用簡潔的代碼以分布式且容錯的方式執行此操作。 Kafka Streams將處理器拓撲定義為流處理代碼的邏輯抽象。
  • 大牛嘔心力作——Kafka開發實戰,助你徜徉大數據時代
    前言隨著大數據時代的到來,數據中蘊含的價值日益得到展現,仿佛一座待人挖掘的金礦, 引來無數的掘金者。但隨著數據量越來越大,如何實時準確地收集並分析數據成為擺在所有從業人員面前的難題。而這時,kafka的出現算是解決了這個問題。
  • Kafka 2.2.0基礎入門
    可以發布和訂閱流式的記錄。這一方面與消息隊列或者企業消息系統類似。 2. 可以儲存流式的記錄,並且有較好的容錯性。 3. 可以在流式記錄產生時就進行處理。 Kafka適合什麼樣的場景?可以用於兩大類別的應用:1. 構造實時流數據管道,它可以在系統或應用之間可靠地獲取數據。 (相當於message queue) 2.
  • 為什麼說,大數據是從流式計算開始切入的?
    大數據說了很多年,我說雷聲大,雨點小,這您同意嗎?為什麼?關鍵在創造的價值,如果僅僅是輔助決策,效果難以顯現,如何才能夠立竿見影?從技術上,對應的就是流式計算,因為它對應的是業務,能夠帶來收入的應用。什麼是流式大數據?有哪些應用?現在就讓我們一起回顧下流計算平臺的發展歷史,以及如何在企業中運用。
  • 大數據從業人員必要技能之Kafka
    作為工程師或架構師,在實際工作過程中一定參與到了很多 大數據業務系統的構建 。由於這些系統都是 為公司業務服務的 ,所以通常來說它們僅僅是執行一些常規的業務邏輯,因此它們 不能算是計算密集型應用,相反更應該是數據密集型的 。
  • ApacheKafka社區中千金難求的一份最火卡夫卡實戰筆記
    Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以處理消費者在網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 對於像Hadoop一樣的日誌數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。
  • 重磅發布:Kafka迎來1.0.0版本,正式告別四位數版本號
    從最開始的大規模消息系統,發展成為功能完善的分布式流式處理平臺,用於發布和訂閱、存儲及實時地處理大規模流數據。來自世界各地的數千家公司在使用 Kafka,包括三分之一的 500 強公司。崛起的 KafkaKafka 起初是由 LinkedIn 公司開發的一個分布式的消息系統,後成為 Apache 的一部分,它使用 Scala 編寫,以可水平擴展和高吞吐率而被廣泛使用。目前越來越多的開源分布式處理系統如 Cloudera、Apache Storm、Spark 等都支持與 Kafka 集成。
  • 大數據開發:Kafka工作原理入門
    Kafka在大數據技術生態當中,以作為消息系統而聞名,面對活躍的流式數據,提供高吞吐量的服務,在實時大數據處理場景下,可以說是一大利器,國內外大廠都有應用。今天的大數據開發分享,我們就主要來講講Kafka框架的工作原理。
  • 高性能消息中間件-Kafka詳解
    ,是一個分布式、支持分區的(partition)、多副本的(replica),基於zookeeper協調的分布式消息系統,它的最大的特性就是可以實時的處理大量數據以滿足各種需求場景:比如基於hadoop的批處理系統、低延遲的實時系統、storm/Spark流式處理引擎,web/nginx日誌、訪問日誌
  • 阿里P8大數據專家,帶你深入理解Apache Kafka與實戰,共三大文檔
    集群的管理、監控與調優;第10章介紹了Kafka 新引入的流式處理組件。本文適合所有對雲計算、大數據處理感興趣的技術人員閱讀,尤其適合對消息引擎、流式處理技術及框架感興趣的技術人員參考閱讀。Kafka源碼剖析本文以Kafka 0.10.0版本源碼為基礎,針對Kafka的架構設計到實現細節進行詳細闡述。
  • TiDB 聯手 Apache Pulsar,釋放大數據潛能
    大數據時代,各類應用對消息解決方案的要求不僅僅是數據的流動,而是要在持續增長的服務和應用中傳輸海量數據,進行智能的處理和分析,幫助業務做出更加精準的決策。Apache Pulsar 與 TiDB 聯合解決方案提供實時、高吞吐、穩定的數據輸出,滿足用戶在大數據場景中對各類數據的應用與分析需求,廣泛適用於日誌收集、監控數據聚合、流式數據處理、在線和離線分析等場景。
  • 「乾貨」centos7搭建kafka-2.6.0集群
    Kafka最初由Linkedin公司開發,是一個分布式、支持分區的(partition)、多副本的(replica),基於zookeeper協調的分布式消息系統,它的最大的特性就是可以實時的處理大量數據以滿足各種需求場景:比如基於hadoop
  • 從零開始搭建Kafka+SpringBoot分布式消息系統
    (ps:默認您的centos系統可聯網,本教程就不教配置ip什麼的了)(ps2:沒有wget的先裝一下:yum install wget)(ps3:人啊,就是要條理。東邊放一點,西邊放一點,過段時間就不知道自己裝在哪裡了。
  • 大數據框架Spark的流處理SparkStreaming詳細總結
    根據數據處理的時效性,大數據處理系統可分為批式(batch)大數據和流式(streaming)大數據兩類。其中,批式大數據又被稱為歷史大數據,流式大數據又被稱為實時大數據。大數據技術就是處理海量數據並獲取其中的價值,但這些價值並非完全一樣。一些數據在發生後不久更有價值並隨著時間推移其價值迅速下降。
  • Apache Kafka實戰
    Apache Kafka都是關於數據的。 這一切都是關於以可靠,快速和可擴展的方式傳輸大量數據的。在計算世界中,傳輸數據意味著消息傳遞。 Kafka用於高吞吐量用例,以可伸縮且容錯的方式移動大量數據。消息傳遞中的挑戰與局限消息傳遞是在應用程式和數據存儲之間傳輸數據的相當簡單的範例。
  • 單機版kafka集群部署
    前言 分布式消息隊列是大型分布式系統不可缺少的中間件,主要解決應用耦合、異步消息、流量削鋒等問題。實現高性能、高可用、可伸縮和最終一致性架構。Kafka 是由 LinkedIn 開發的一個分布式的消息系統,使用 Scala 編寫,它以可水平擴展和高吞吐率而被廣泛使用。
  • Kafka 知識腦圖 - 分布式日誌收集系統
    Kafka分布式日誌系統一、適用場景消息隊列 - 只能用於系統解偶用戶活動日誌收集應用程式監控數據匯總大數據流式處理二、優勢高吞吐量: 單機每秒 100K 條消息傳輸高性能 : 單機上千客戶端,保證零停機、零數據丟失時間複雜度O(1) 消息持久化partition 內消息順序傳輸脫機 & 實時 數據處理在線水平擴展三、特點
  • 大數據消息系統:Kafka安裝與配置詳細步驟
    kafka kafka1.2 jar包下載http://kafka.apache.org/downloads/ kafka3)在/opt/module/kafka目錄下創建logs文件夾[bigdata@hadoop102 kafka]$ mkdir logs
  • kafka入門(原理-搭建-簡單使用)
    ,就從broker中去拿出數據來,然後完成一系列對數據的處理操作。乍一看返也太簡單了,不是說了它是分布式嗎,難道把 producer、 broker 和 consumer 放在三臺不同的機器上就算是分布式了嗎。
  • 這份記載著KAFKA的精髓筆記,阿里P8都對它愛不釋手
    Kafka起初是由LinkedIn 公司採用Scala 語言開發的一個多分區、多副本且基於ZooKeeper協調的分布式消息系統,現已被捐獻給Apache基金會。目前Kafka已經定位為一個分布式流式處理平臺,它以高吞吐、可持久化、可水平擴展、支持流數據處理等多種特性而被廣泛使用。目前越來越多的開源分布式處理系統如Cloudera、Storm、Spark、 Flink 等都支持與Kafka集成。