背景
前面3篇文章讲解了 Pinot 用的最多的几个组件,现在就聊最后剩下的两个,一个是 Cluster,另外一个就是 Deep Store。
Cluster
其实 Cluster 比较简单,就是一个概念的集合,他说有 Server,Broker 和 Controller 组成的。
我们已经在第一章篇文章里面大概讲述了每个节点的作用和每个节点相互工作的。
Minion
根据我跟开发者的聊天下来,发现这个功能主要是做 Segment 的管理,解决 Segment 数量过多导致查询变慢的场景。具体得笔者把版本升上去之后在看看效果。因为自己可以开个定时任务去合并历史 Segment,所以这个功能在我这块暂时不是非常重要。是否有坑等笔者测试之后再来开坑。0.12.1 版本之前应该只能用在离线表上面,0.12.1以后包含 0.12.1 是增加了实时表的功能。
Deep Store
在 Pinot 中,Deep Storage 就是存储 Segment 的组件。无论是离线还是实时的 Segment 都会上传到 Deep Store 上。如果后期 Server 扩容,Server 重启或者 Table 重新迁移之后,Server 可以从 Deep Store 上面把 Segment download 下来到本地 Server 上。
REALTIME 上传 Segment
在实时表场景下,Server 会消费 kafka 的数据存储到本地磁盘,然后统一通过 Controller 传给 Deep Store。这样会导致在实时表多的情况下会出现集群毛刺问题。流程图如下
毛刺图如下,整点的时候会出现耗时上涨。怀疑是跟这个配置有关系。
当然可以从配置侧入手解决这个问题,链接参数文章 在这里,可以通过这个调整自己的配置达到下图的工作流程
OFFLINE 上传 Segment
批处理上传 Segment 没有那么复杂,就是通过官方提供的 jar 生成对应的 Segment 在把 Segment 上传到配置好的 Deep Store 中。
总结
这四篇文章已经基本让我们了解 Apache Pinot 内部的组件是什么,功能篇基本都写完。学完上面这些概念,你应该就能看懂下面的流程图了。