THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!

Apache Kylin : Analytical Data Warehouse for Big Data

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Table of Contents
indent15px
printablefalse

. 背景

在 Kylin 2.3 发布后, eBay 的 Kylin team 发布了 System Cube 和 Dashboard, 使得 Kylin 用户可以更加容易地收集和观测 Kylin 应用级别的 Metrics 信息. 在目前版本的 Kylin, 通过配置 System Cube 为 HiveSink 或者 KafkaSink, 可以将 Metrics 信息发布到不同的 Sink, 并且通过定时调度构建任务可以构建 System Cube 以满足通过 SQL 查询 Kylin的系统信息. 此外, 借助 Dashboard 用户可以轻松地做到 Kylin 系统监控信息的可视化分析.

...

这里, 我尝试探索如何将 System Cube 和 Real-time OLAP 相集成, 来降低 System Cube 的数据准备延迟. 事实上, System Cube 本身已经包含了 KafkaSink, 所以需要增加的工作是修改 SCCreator, 使之能准备 Real-time OLAP 所需的 Cube 元数据.

. 设计

在eBay 引入的 System Cube 特性中, 通过下图的 Metrics System 可以获取和汇报 Job 和 Quey 主题的消息到不同的Sink主题的消息到不同的 Sink. Metrics SystemSystem 代码主要包含在 core-metricsmetrics-reporter-hivemetrics-reporter-kafka 三个 Maven module中, 另外还有 QueryMetricsFacadeJobMetricsFacade.

Metrics System 架构示意图如下:

基于门面模式的设计, Job 和 Query 相关的消息被对应的门面封装成统一的 RecordEvent ,相关的消息被对应的门面 (QueryMetricsFacadeJobMetricsFacade) 封装成统一的 RecordEvent, 通过 MetricsManager 的 udpate 方法统一发送给 Metrics System. 发送给 Metrics System 的 RecordEvent, 会交由 ActiveReservoir 来暂存, 根据 RecordEvent 的缓存策略和对数据延迟的需求, 可以分别配置使用 BlockingReservoir 和 InstantReservoir.

其中, BlockingReservoir 会以(微)批次的方式向 Sink 发送数据, 而 InstantReservoir 会直接发送 RecordEvent 而不等待, 所以一般 BlockingReservoir 比较适合和 HiveSink 搭配而 InstantReservoir 比较适合和 KafkaSink 搭配.

此外, 每个 Reservoir 可以拥有数个ActiveReservoirReporter, 负责将消息写入不同的 Sink. 


System Cube 的 JIRA issue 如下 :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-2721

Dashboard 的 JIRA issue 如下 :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-2726

System Cube 和 Real-time OLAP的集成的issue如下OLAP 的集成的JIRA issue :

Jira
serverASF JIRA
serverId5aa69414-a9e9-3523-82ec-879b028fb15b
keyKYLIN-4371

...

Code Block
languagejava
themeDJango
titlekylin.properties
linenumberstrue
kylin.metrics.monitor-enabled=true
kylin.metrics.reporter-job-enabled=true
kylin.metrics.reporter-query-enabled=true
kylin.web.dashboard-enabled=true

2. 准备 System Cube 所需的参数文件所需的 Cube 参数文件

Code Block
languagexml
themeDJango
titlesink.json
linenumberstrue
[
  {
    "sink": "hive",
    "storage_type": 2,
    "cube_desc_override_properties": {
      "kylin.cube.algorithm": "INMEM",
      "kylin.cube.max-building-segments": "1"
    }
  },
  {
    "sink": "kafka",
    "storage_type": 3,
    "cube_desc_override_properties": {
      "kylin.cube.algorithm": "INMEM",
      "kylin.stream.cube.window": 28800,
      "kylin.stream.cube.duration": 3600,
      "kylin.stream.segment.retention.policy": "fullBuild",
      "kylin.cube.max-building-segments": "20"
    },
    "table_properties": {
      "bootstrap.servers": "{YOUR_SERVERS_LIST}"
    }
  }
]

...