【Kafka】Kafka 1.0.1案例詳解之Kafka Streams

在這之前我們已經講解了Kafka的安裝部署和最核心的發佈訂閱功能,本次章節我們來介紹Kafka的新特性——Kafka Streams。

首先,要研究一樣新東西,我們需要知道它是做什麼的:

Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simple yet efficient management and real-time querying of application state.

大家仔細閱讀上面一段話可以知道,Kafka Streams是一個用來處理Kafka消息的庫,它包含了如下幾個優勢:

  1. 通過與現有的Java應用整合,我們可以設計出簡單的、輕量級的客戶端類庫

  2. 只需要基於Kafka自身的消息系統,不需要額外的第三方系統,就可以很容易地實現水平擴展

  3. 通過可容錯的狀態管理,實現高效的窗口操作和聚合

  4. 支持 exactly-once語義

  5. 既支持基於時間窗口的操作,也支持每次單條數據的處理

  6. 既支持低階的流處理接口,也支持高階的流處理DSL(領域專用語言)

Kafka Streams處理剖析圖

案例剖析

說了這麼多理論知識,實際上用起來很簡單,接下來我們通過一個簡單的例子來熟悉這個新特性。

添加依賴

kafka-streams是一個單獨的依賴包,並不存在於kafka-client中

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-streams</artifactId>
    <version>1.0.1</version>
</dependency>

屬性配置

添加屬性配置,application id相當於group id,bootstrap servers配置kafka的brokers地址,並配置key與value的序列化、反序列化實現類。這兩個類均實現了

org.apache.kafka.common.serialization.Serde接口

Properties props = new Properties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "streams-pipe");
props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
props.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
props.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());

讀取並處理輸出

最後通過StreamsBuilder來創建KStream,進行數據處理轉換後輸出到一個新的topic或者其他外部存儲器中。

builder.stream("streams-plaintext-input").to("streams-pipe-output");
final Topology topology = builder.build();
final KafkaStreams streams = new KafkaStreams(topology, props);

退出機制

最後添加退出時的處理邏輯

// attach shutdown handler to catch control-c
Runtime.getRuntime().addShutdownHook(new Thread("streams-shutdown-hook") {
    @Override
    public void run() {
        streams.close();
        latch.countDown();
    }
});

我們可以在github中查看完整的程序代碼:

https://github.com/lubinsu/new-kafka

生活

豈止於美

作者:蘇鷺彬

長按二維碼關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章