Kylin 实时OLAP如何做CheckPoint

本文详细解析了Kylin Cube在新建及重新启用时的流式数据消费机制,包括从最新或最早数据开始消费的配置,Disable与Enable Cube操作流程,以及Kafka消费起始点、最小时间确定和KafkaConsumer启动过程。
一、新建cube第一次消费的情况:

此种情况根据kylin.stream.consume.offsets.latest配置,true表示从最新的数据开始消费,false表示从最早的数据开始消费,默认为true.

二、Disable cube再enable的情况
  • Disable cube时操作:
    详情见CubeController.disableCube方法:

1、清空zk节点上此cube的数据
/kylin/KYLIN:kylin_metadata/stream/cubes/cubeName);
2、删除此cube在 HDFS上的数据(/user/kylin/KYLIN_PROD-kylin_metadata/stream/cubeName);
3、删除所有receiver节点上此cube的数据(通过http调用receiver的AdminController.unAssign停止消费此cube数据、删除节点上此cube数==/home/hadoop/data/kylin_prod/inner/cubeName==)

  • Enable cube时操作:
    详情见CubeController.enableCube方法:

1、在ZK上创建此cube的节点
/kylin/KYLIN:kylin_metadata/stream/cubes/cubeName);

2、计算此Cube的Assignment(分配到那几个replicatset等);

3、调用分配给此Cube的所有Receiver进行数据消费
(通过HTTP调用receiver.AdminController.Assign方法):
3.1、确定kafka消费起始点:获取本地checkpoint(由于本地数据之前disable的时候已经被删除,所以为空),获取remote的checkpoint(最后一个ready 的segment的checkpoint),具体代码参见(KafkaSource.setupConnectorFromCheckpoint方法);
3.2、确定会处理的最小时间minAcceptEventTime,latestRemoteSegment.getTSRange().end.v有值则此值作为最小时间,否则根据配置的cube.getDescriptor().getPartitionDateStart()为最小时间,否则为0,参见代码StreamServer.createNewConsumer方法;
3.3、启动kafkaConsumer开始消费,参见StreamingConsumerChannel.start()方法:KafkaConnector.open方法设置消费起始点,绑定topic和要消费的此topic的partition、StreamingConsumerChannel.run()开始真正拉取数据并消费并保存checkpoint到本地。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值