Kafka Stream初学

作者: 阿猫阿狗Hakuna | 来源:发表于2019-03-26 15:24 被阅读6次

       Kafka Stream将其API分为两类,一类为高级抽象的Kafka Streams DSL,使用方便,但不够灵活;另一类为低级抽象的Processor API,使得开发者有了更多自由,比较灵活。下面简要介绍两类API。

一.Streams DSL

       Streams DSL是构建在Processor API之上的,相比于Processor API,DSL支持:

  • 对streams和tables的抽象(KStreams和KTable)
  • 声明函数式编程风格

       下面简要介绍其中的主要类库及特性:

1.KStream

       只有DSL中有KStream的概念。KStream是一个流式记录的抽象,是一个无界的数据集。用一个表来类比,数据记录在一个流中可以理解为一直在进行“INSERT”的动作。只进行追加。

2.KTable

       只有DSL中有KTable的概念。KTable是一个changelog stream的抽象,每个数据记录都被表示为一个update。如果key在KTable中已经存在,则表示为一个“UPDATE”;如果不存在,则表示为一个“INSERT”。

3.GlobalKTable

       只有DSL中有GlobalKTable的概念。和KTable一样,GlobalKTable也是一个changelog stream的抽象,每个数据记录都被表示为一个update。
       KTable存储的数据根据key进行分区的,GlobalKTable是不分区的,且存储的数据足够小,能完全装入内存,因此保证每个流任务都有所有数据的完整副本,而不关心传入record的key是什么。
       基于以上的特性,GlobalKTable有如下优点:

  • 更高效的join操作:当链接多个join操作时,使用GlobalKTable效率更高,它不需要co-partitioned(类似shuffle的一种操作)的发生。
  • 可用于将信息“广播”到应用程序的所有实例。

4.Transformation

无状态Transformation

(1)branch(split):根据提供的判断式将KStream拆分到一个或多个KStream实例中。
(2)Filter
(3)Inverse Filter
(4)FlatMap
(5)Foreach
(6)GroupByKey
(7)GroupBy
(8)Map
(9)Merge
(10)Peek
(11)Print
(12)SelectKey:为记录分配新key。
(13)toStream:将KTable转换为KStream。

有状态Transformation

(1)Aggregate
(2)Count
(3)Reduce

5.Join

下图为其支持的Join类型:


image.png

6.Window

Kafka Streams支持四种类型的Window操作:


image.png

Processor API

       processor API允许开发人员自定义processor,且可以直接与state store进行交互。下面介绍其主要抽象:

1. Processor

       一个stream processor是processor拓扑图中的一个节点,用来表示单一的处理步骤。使用Processor API可以自定义stream processor,一次处理一个接收到的记录,并将这些processor与其关联的state store连接起来,组成processor拓扑图。
       Processor接口的主要方法如下:

  • process():对于每条接收到的数据,都会调用此方法
  • init():任务构建阶段被调用,进行资源的初始化动作
  • close():任务结束阶段调用,进行资源清理动作

2.State Store

       Kafka Stream中包含开箱即用的Store,通过StoreBuilder进行初始化;也可以实现自定义的Store,需要实现StateStore接口。
       现有State Store类型如下:
(1)PersistentKeyValueStore<K,V>:底层存储为RocksDB
(2)InMemoryKeyValueStore<K,V>

相关文章

网友评论

    本文标题:Kafka Stream初学

    本文链接:https://www.haomeiwen.com/subject/nfigvqtx.html