kylin-stream|kylin-stream source

kylin—stream source

本篇文章主要介绍kylin stream中的source的对接内容;目前kylin对接的stream source只有kafka。
概述 在kylin中,一个cube对应的data source中的topic会按照partitions进行划分。按照kylin的算法,一个cube对应的多个partitions可能会被分配到多个repliaca set上进行处理。每一个replica set仅仅处理部分partition即可。如下图所示,一个model/cube对应的topic的数据可能会被划分到多个replica set中。
kylin-stream|kylin-stream source
文章图片
image.png 概要设计 receiver server 需要消费对应source(指定的partition)的数据。需要根据对应的partition内容构造出对应的consumer(在kylin中为connector)。通过connector中封装的source consumer来进行读取数据,并且处理对应的position信息。
详细内部实现 StreamingSourceFactory
作用:根据不同的source类型,获得不同的stream source的实现。
IStreamingSource
一个source结构是非常重要的,其表示的是在一个receiver server上消费一个cube数据的综合数据结构(其可以提供connnector,positionhandler等综合结构)。主要功能就是提供了一个adapter的功能。其提供了,产生message template、stream connector等功能。
loadTableSource() getMessageTemplate() createStreamingConnector() getSourcePositionHandler()

辅助信息结构
Postion处理结构 ISourcePosition/IPartitionPosition/ISourcePositionHandler
  • IPartitionPosition:用于表示一个partition的信息。
  • ISourcePosition:用于表示整个source中多个partition信息的集合。
  • ISourcePositionHandler:用于处理整个source的partition的内容的结构。
Connector
由于其对应的source产生,包含了整个链接的topic需要的全部的meta信息的内容。connnector的作用其实是直接与对应的stream系统的client交互的。其需要提供的接口就比较简单:
IConnector { open() stop() next() 等等其他内容 }

Channel
【kylin-stream|kylin-stream source】channel就是对connector以及segmentManager的一个封装。channel的主要特性就是:
  • 线程:每一个channel都会启动一个独立的java thread进行处理;在其处理过程中会不停的从connector中读取数据(event message),然后将数据写入到segmentmanager中。
  • cube->channel对应:每一个receiver server中会保存其处理的全部cube的信息,每一个cube都会对应一个channel,以及对应的segmentmanager。
StreamingSourceConfig
IStreamingMessageParser
用于进行一个Message Parser的功能,将其他类型的message,转化为对应的StreamingMessage
其他基本结构
  • ConsumerStartMode:表示消费数据需要从stream系统的哪个位置开始。
  • ConsumerStartProtocol:包含了ConsumerStartMode的结构,可以定义一些需要从stream中消费的字段范围。
如何实现一个customer stream source 通过上面的总结可以了解,需要实现如下内容:
  • IStreamingSource:用于产生对应的Connector。
  • IStreamingConnector:用于真实的open,stop,next对应的stream系统中的数据。
  • IStreamingMessageParser: 用于转化不同format类型的message到标准定义的streaming message。

    推荐阅读