kafka系列6----kafka API

1、說明

僅列出一些較少用到的API,常用API比較簡單,參考官網即可

1、Streams API

依賴:

<dependency>

    <groupId>org.apache.kafka</groupId>

    <artifactId>kafka-streams</artifactId>

    <version>2.2.0</version>

</dependency>

stream入門示例:

http://kafka.apache.org/22/documentation/streams/

 

stream javadoc:

http://kafka.apache.org/22/javadoc/index.html?org/apache/kafka/streams/KafkaStreams.html

1.1 流介紹

參考https://www.cnblogs.com/warehouse/p/9521382.html

  1. 什麼是流計算:一般流式計算會與批量計算相比較。在流式計算模型中,輸入是持續的,可以認爲在時間上是無界的,也就意味着,永遠拿不到全量數據去做計算。同時,計算結果是持續輸出的,也即計算結果在時間上也是無界的。流式計算一般對實時性要求較高,同時一般是先定義目標計算,然後數據到來之後將計算邏輯應用於數據。同時爲了提高計算效率,往往儘可能採用增量計算代替全量計算。批量處理模型中,一般先有全量數據集,然後定義計算邏輯,並將計算應用於全量數據。特點是全量計算,並且計算結果一次性全量輸出。
  2. 爲什麼要有Kafka Stream。

當前已經有非常多的流式處理系統,最知名且應用最多的開源流式處理系統有Spark StreamingApache StormApache Storm發展多年,應用廣泛,提供記錄級別的處理能力,當前也支持SQL on Stream。而Spark Streaming基於Apache Spark,可以非常方便與圖計算,SQL處理等集成,功能強大,對於熟悉其它Spark應用開發的用戶而言使用門檻低。另外,目前主流的Hadoop發行版,如MapRClouderaHortonworks,都集成了Apache StormApache Spark,使得部署更容易。

既然Apache SparkApache Storm擁用如此多的優勢,那爲何還需要Kafka Stream呢?筆者認爲主要有如下原因。

第一,SparkStorm都是流式處理框架,而Kafka Stream提供的是一個基於Kafka的流式處理類庫。框架要求開發者按照特定的方式去開發邏輯部分,供框架調用。開發者很難了解框架的具體運行方式,從而使得調試成本高,並且使用受限。而Kafka Stream作爲流式處理類庫,直接提供具體的類給開發者調用,整個應用的運行方式主要由開發者控制,方便使用和調試。

 

第二,雖然Cloudera與Hortonworks方便了Storm和Spark的部署,但是這些框架的部署仍然相對複雜。而Kafka Stream作爲類庫,可以非常方便的嵌入應用程序中,它對應用的打包和部署基本沒有任何要求。更爲重要的是,Kafka Stream充分利用了Kafka的分區機制和Consumer的Rebalance機制,使得Kafka Stream可以非常方便的水平擴展,並且各個實例可以使用不同的部署方式。具體來說,每個運行Kafka Stream的應用程序實例都包含了Kafka Consumer實例,多個同一應用的實例之間並行處理數據集。而不同實例之間的部署方式並不要求一致,比如部分實例可以運行在Web容器中,部分實例可運行在Docker或Kubernetes中。

 

第三,就流式處理系統而言,基本都支持Kafka作爲數據源。例如Storm具有專門的kafka-spout,而Spark也提供專門的spark-streaming-kafka模塊。事實上,Kafka基本上是主流的流式處理系統的標準數據源。換言之,大部分流式系統中都已部署了Kafka,此時使用Kafka Stream的成本非常低。

 

第四,使用Storm或Spark Streaming時,需要爲框架本身的進程預留資源,如Storm的supervisor和Spark on YARN的node manager。即使對於應用實例而言,框架本身也會佔用部分資源,如Spark Streaming需要爲shuffle和storage預留內存。

 

第五,由於Kafka本身提供數據持久化,因此Kafka Stream提供滾動部署和滾動升級以及重新計算的能力。

 

第六,由於Kafka Consumer Rebalance機制,Kafka Stream可以在線動態調整並行度。

2、connector API

如果要將 Kafka 連接到數據存儲系統,或者外部系統連接到kafka,可以使用 Connect,因爲這些系統不是你開發的。Connect 可以用於從外部數據存儲系統讀取數據,或者將數據推送到外部存儲系統。如果你要連接的數據存儲系統沒有相應的連接器,那麼可以考慮使用客戶端 API 或Connect API 開發一個應用程序。我們建議首選 Connect

javadoc:http://kafka.apache.org/22/javadoc/index.html?org/apache/kafka/connect

使用示例:http://kafka.apachecn.org/documentation.html#connect_overview

kafka connector特性:

  1. Kafka connectors常用框架
  2. 分佈式和獨立模式
  3. REST 接口
  4. 自動offset管理
  5. 默認是分佈式和可伸縮的
  6. 流和批處理整合

2.1 運行connect(window中啓動不了)

connect-distributed ../../config/connect-distributed.properties ../../config/connect-file-sink.properties ../../ config/connect-file-source.properties

 

connect的幾個配置參數:

  1. bootstrap.servers :該參數列出了將要與 Connect 協同工作的 broker 服務器,連接器將會向這些 broker 寫入數據或者從它們那裏讀取數據
  2. group.id :具有相同 group.id 的 worker 屬於同一個 Connect 集羣
  3. key. converter 和 value.converter: Connect 可以處理存儲在 Kafka 裏的不同格式的數據 。 這兩個參數分別指定了消息的鍵和值所使用的轉換器。默認使用 Kafka 提供的JSONConverter ,當然也可以配置成 Confluent Schema Registry 提供的 AvroConverter
    1. AdminClient API

3、 AdminClint Api

用於管理和檢查topic和broker,acl及其他kafka對象。

依賴:

<dependency>

    <groupId>org.apache.kafka</groupId>

    <artifactId>kafka-clients</artifactId>

    <version>2.2.0</version>

</dependency>

javadoc:

http://kafka.apache.org/22/javadoc/index.html?org/apache/kafka/clients/admin/AdminClient.html

發佈了22 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章