Kafka實戰(五) - 核心API及適用場景全面解析

1 四個核心API

● Producer API
容許一個應用程序發佈一串流式的數據到一個或者多個Kafka topic。java

● Consumer API
容許一個應用程序訂閱一個或多個topic ,而且對發佈給他們的流式數據進行處理。數據庫

● Streams API
容許一個應用程序做爲一個流處理器,消費一個或者多個topic產生的輸入流,而後生產一個輸出流到一個或多個topic中去,在輸入輸出流中進行有效的轉換。segmentfault

● Connector API
容許構建並運行可重用的生產者或者消費者,將Kafka topics鏈接到已存在的應用程序或者數據系統。好比,鏈接到一個關係型數據庫,捕捉表(table) 的全部變動內容。api

在Kafka中,客戶端和服務器之間的通訊是經過簡單,高性能,語言無關的TCP協
議完成的。此協議已版本化並保持與舊版本的向後兼容性。Kafka提供多種語言客
戶端。
緩存

2 Kafka API - producer

  • Producer會爲每一個partition維護一個緩衝,用來記錄尚未發送的數據,每一個緩衝區大小用batch.size指定,默認值爲16k.
  • linger.ms爲,buffer中的數據在達到batch.size前,須要等待的時間
  • acks用來配置請求成功的標準
  • send異步方法

3 Kafka API - Consumer

3.1 Simple Cnsumer

位於kafka.javaapi.consumer包中,不提供負載均衡、容錯的特性每次獲取數據都要指定topic、partition、offset、 fetchSize服務器

3.2 High-level Consumer

該客戶端透明地處理kafka broker異常,透明地切換consumer的partition, 經過和broker交互來實現consumer group級別的負載均衡。架構

  • Group

4 總體架構

5 使用場景

5.1 消息系統

消息系統被用於各類場景,如解耦數據生產者,緩存未處理的消息。Kafka 可做爲傳統的消息系統的替代者,與傳統消息系統相比,kafka有更好的吞吐量、更好的可用性,這有利於處理大規模的消息。負載均衡

根據經驗,一般消息傳遞對吞吐量要求較低,但可能要求較低的端到端延遲,並常常依賴kafka可靠的durable機制。框架

在這方面,Kafka能夠與傳統的消息傳遞系統(ActiveMQ 和RabbitMQ)相媲美。異步

5.2 存儲系統

寫入到kafka中的數據是落地到了磁盤上,而且有冗餘備份,kafka容許producer等待確認,經過配置,可實現直到全部的replication完成複製纔算寫入成功,這樣可保證數據的可用性。

Kafka認真對待存儲,並容許client自行控制讀取位置,你能夠認爲kafka是-種特殊的文件系統,它可以提供高性能、低延遲、高可用的日誌提交存儲。

5.3 日誌聚合

日誌系統通常須要以下功能:日誌的收集、清洗、聚合、存儲、展現。

Kafka經常使用來替代其餘日誌聚合解決方案。(官方說法,略有誇大嫌疑)

和Scribe、Flume相 比,Kafka提供一樣好的性能、更健壯的堆積保障、更低的端到端延遲。
日誌會落地,致使kafka作 日誌聚合更昂貴

kafka可實現日誌的清洗(須要編碼)、聚合(可靠但昂貴,由於須要落地磁盤)、存儲。
ELK是如今比較流行的日誌系統。在kafka的配合 下才是更成熟的方案,kafka在ELK技術棧中,主要起到buffer的做用,必要時可進行日誌的匯流。.

5.4 跟蹤網站活動

kafka的最初始做用就是,將用戶行爲跟蹤管道重構爲一組實時發佈-訂閱源。
把網站活動(瀏覽網頁、搜索或其餘的用戶操做)發佈到中心topics中,每種活動類型對應一個topic。基於這些訂閱源,可以實現一系列用例,如實時處理、實時監視、批量地將Kafka的數據加載到Hadoop或離線數據倉庫系統,進行離線數據處理並生成報告。

每一個用戶瀏覽網頁時都生成了許多活動信息,所以活動跟蹤的數據量一般很是大。(Kafka實際應用)

5.5 流處理 - kafka stream API

Kafka社區認爲僅僅提供數據生產、消費機制是不夠的,他們還要提供流數據實時處理機制

從0.10.0.0開始, Kafka經過提供Strearms API來提供輕量,但功能強大的流處理。實際上就是Streams API幫助解決流引用中一些棘手的問題,好比:

  • 處理無序的數據
  • 代碼變化後再次處理數據
  • 進行有狀態的流式計算

Streams API的流處理包含多個階段,從input topics消費數據,作各類處理,將結果寫入到目標topic, Streans API基於kafka提供的核心原語構建,它使用kafka consumer、 producer來輸入、輸出,用Kfka來作狀態存儲。

流處理框架: flink spark streamingJ Stortm、 Samza 本是正統的流處理框架,Kafka在流處理中更多的是扮演流存儲的角色。

本文由博客一文多發平臺 OpenWrite 發佈!
相關文章
相關標籤/搜索