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 source_第1张图片
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

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。

你可能感兴趣的:(kylin-stream source)