Kudu 是一个分布式的,具有可扩展性的列式数据库,可以同时提供低延迟的随机读写和高效的数据分析能力。Kudu 支持水平扩展,使用 Raft 协议进行一致性保证。
常见的使用场景有以下几个,结合您的业务场景,可优先考虑使用 Kudu:
毫秒级的主键更新,删除。
亚秒级的查询分析(需要结合 Impala 或 Presto 等计算引擎)。
没有高 QPS 的 Key-Value 查询。
Kudu 的 master 节点负责整个集群的元数据管理和服务协调。
它承担着以下功能:
管理集群所有table和tablet的schema及一些其他的元数据。
追踪所有server节点是否存活,并且当server节点挂掉后协调数据的重新分布。
跟踪每个tablet的位置。
用来存储 tablets。Tablet 可以设置多副本,使用 Raft 协议实现多副本间的一致性。
名称 | 描述 |
---|---|
Catalog Manager | Kudu 的 master 节点会持有一个单 tablet 的 table——catalog table,但是您是不能直接访问的。master 将内部的 catalog 信息写入该 tablet,并且将整个 catalog 的信息缓存到内存中。 |
Tablet Directory | client 会在本地缓存一份它需要访问的 tablet 的位置信息,这样就不用每次读写都从 master 中获取。 因为 tablet 的位置可能也会发生变化(比如某个 tablet server 节点 crash 掉了),所以当 tablet 的位置发生变化的时候,client 会收到相应的通知,然后再去 master 上获取一份新的元数据信息。 |
Tablet | 一个 Tablet 是由表里面相邻的连续的 segment 组成,类似于其他数据存储引擎或关系数据库中的分区。一个给定的 Tablet 会被复制到多台 Tablet Server 服务节点上-从而形成多个副本,在任意给定的时间点,这些副本中的其中一个会被选举为 leader tablet。 |
Raft | 一致性协议,可以保证 Kudu Master 服务的高可用以及 Tablet 多副本之间数据一致性。 |