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
中。文章图片
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的内容的结构。
由于其对应的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。
IStreamingMessageParser
用于进行一个Message Parser的功能,将其他类型的message,转化为对应的
StreamingMessage
其他基本结构
- ConsumerStartMode:表示消费数据需要从stream系统的哪个位置开始。
- ConsumerStartProtocol:包含了
ConsumerStartMode
的结构,可以定义一些需要从stream中消费的字段范围。
- IStreamingSource:用于产生对应的Connector。
- IStreamingConnector:用于真实的open,stop,next对应的stream系统中的数据。
- IStreamingMessageParser: 用于转化不同format类型的message到标准定义的streaming message。