DataHub服务层的架构图如下:
基本概念:
DataHub元数据服务(gms)以文档的方式存储元数据,同时兼有以下特点:
当元数据更改被成功提交到持久存储时,DataHub Service Tier还会通过kafka发送提交事件元数据审计事件(MAE)。
MAE流是一个公共API,可以由外部系统订阅,提供了一种非常强大的方式来实时响应元数据中发生的变化。
MetadataAuditEvent (MAE) Consumer Job:MAE消费者是一个Kafka Streams job。它的主要功能是监听MetadataAuditEvent Kafka topic的消息并处理这些消息,将元数据模型中的更改转换为二次搜索和图索引的更新。
DataHub元数据服务使用优秀的dataHub -gma库,以标准的方式存储和查询元数据
Data Hub通过一组通用数据访问对象(DAO)进一步抽象底层数据系统。
DAO抽象的主要好处主要有2点:
标准化元数据访问方式的Data Access Objects (DAO) 有如下4种类型
这些DAO严重依赖Java泛型,因此核心逻辑可以保持类型中立。然而,由于在Pegasus中没有继承,泛型通常会回退到扩展RecordTemplate而不是想要的类型(例如 entity, relationship, metadata aspect 等)。
GMS使用Local DAO从本地文档存储中存储和检索元数据 Aspects。
由于DAO是一个泛型类,因此在实例化期间需要将其绑定到特定类型。每个实体类型都需要实例化它自己的DAO版本。
Local DAO的另一个重要功能是在更新元数据时自动发出MAE。
因为MAE有效地使用了相同的Pegasus模型,所以RecordTemplate可以很容易地转换成相应的GenericRecord。
接口定义如下:
public abstract class BaseLocalDAO<ASPECT extends UnionTemplate> {
public abstract <URN extends Urn, METADATA extends RecordTemplate> void
add(Class<METADATA> type, URN urn, METADATA value);
public abstract <URN extends Urn, METADATA extends RecordTemplate>
Optional<METADATA> get(Class<METADATA> type, URN urn, int version);
public abstract <URN extends Urn, METADATA extends RecordTemplate>
ListResult<Integer> listVersions(Class<METADATA> type, URN urn, int start,
int pageSize);
public abstract <METADATA extends RecordTemplate> ListResult<Urn> listUrns(
Class<METADATA> type, int start, int pageSize);
public abstract <URN extends Urn, METADATA extends RecordTemplate>
ListResult<METADATA> list(Class<METADATA> type, URN urn, int start, int pageSize);
}
Search DAO也是一个泛型类,可以绑定到特定类型的搜索文档。DAO提供了如下3个API:
接口定义如下:
public abstract class BaseSearchDAO<DOCUMENT extends RecordTemplate> {
public abstract SearchResult<DOCUMENT> search(String input, Filter filter,
SortCriterion sortCriterion, int from, int size);
public abstract AutoCompleteResult autoComplete(String input, String field,
Filter filter, int limit);
public abstract SearchResult<DOCUMENT> filter(Filter filter, SortCriterion sortCriterion,
int from, int size);
}
允许客户端如GMS、MAE Consumer Job等,对元数据图各种查询操作。
接口定义如下:
请注意,泛型(ENTITY、RELATIONSHIP)故意没有类型,因为这些类型是底层图DB的本地类型,并且很可能因实现的不同而不同。
public abstract class BaseQueryDAO<ENTITY, RELATIONSHIP> {
public abstract <ENTITY extends RecordTemplate> List<ENTITY> findEntities(
Class<ENTITY> type, Filter filter, int offset, int count);
public abstract <ENTITY extends RecordTemplate> List<ENTITY> findEntities(
Class<ENTITY> type, Statement function);
public abstract List<RecordTemplate> findMixedTypesEntities(Statement function);
public abstract <ENTITY extends RecordTemplate, RELATIONSHIP extends RecordTemplate> List<RELATIONSHIP>
findRelationships(Class<ENTITY> entityType, Class<RELATIONSHIP> relationshipType, Filter filter, int offset, int count);
public abstract <RELATIONSHIP extends RecordTemplate> List<RELATIONSHIP>
findRelationships(Class<RELATIONSHIP> type, Statement function);
public abstract List<RecordTemplate> findMixedTypesRelationships(
Statement function);
}
Remote DAO只不过是Local DAO的一个专门的只读实现。
datahub metadata-serving architecture
mce-consumer-job
mae-consumer-job
datahub-mce-consumer
build-metadata-service