From 5886e63e5c1e409a6a69a92524230c46a7f0f3f4 Mon Sep 17 00:00:00 2001 From: John Joyce Date: Wed, 24 Nov 2021 12:41:07 -0800 Subject: [PATCH] doc(components): Adding DataHub components overview (#3606) --- datahub-frontend/README.md | 6 +- datahub-graphql-core/README.md | 4 +- datahub-web-react/README.md | 4 ++ docs-website/sidebars.js | 78 ++++++++++++----------- docs/architecture/architecture.md | 24 +++---- docs/architecture/metadata-ingestion.md | 4 ++ docs/architecture/metadata-serving.md | 4 ++ docs/components.md | 60 +++++++++++++++++ docs/developers.md | 4 ++ docs/how/add-custom-ingestion-source.md | 5 ++ docs/imgs/datahub-components.png | Bin 0 -> 60574 bytes metadata-jobs/mae-consumer-job/README.md | 4 ++ metadata-jobs/mce-consumer-job/README.md | 4 ++ metadata-service/README.md | 4 ++ 14 files changed, 152 insertions(+), 53 deletions(-) create mode 100644 docs/components.md create mode 100644 docs/imgs/datahub-components.png diff --git a/datahub-frontend/README.md b/datahub-frontend/README.md index 616f8aafe35d0a..cdb82b85dc98e3 100644 --- a/datahub-frontend/README.md +++ b/datahub-frontend/README.md @@ -1,4 +1,8 @@ -# DataHub Frontend +--- +title: "datahub-frontend" +--- + +# DataHub Frontend Proxy DataHub frontend is a [Play](https://www.playframework.com/) service written in Java. It is served as a mid-tier between [DataHub GMS](../metadata-service) which is the backend service and [DataHub Web](../datahub-web-react/README.md). diff --git a/datahub-graphql-core/README.md b/datahub-graphql-core/README.md index 710062c2c7407a..d89599b0cc18bc 100644 --- a/datahub-graphql-core/README.md +++ b/datahub-graphql-core/README.md @@ -1,4 +1,6 @@ -Notice: `datahub-graphql-core` is currently in beta, and as such is currently subject to backwards incompatible changes. +--- +title: "datahub-graphql-core" +--- # DataHub GraphQL Core DataHub GraphQL API is a shared lib module containing a GraphQL API on top of the GMS service layer. It exposes a graph-based representation diff --git a/datahub-web-react/README.md b/datahub-web-react/README.md index 86be2f457e7d88..e767c76488eea7 100644 --- a/datahub-web-react/README.md +++ b/datahub-web-react/README.md @@ -1,3 +1,7 @@ +--- +title: "datahub-web-react" +--- + # DataHub React App ## About diff --git a/docs-website/sidebars.js b/docs-website/sidebars.js index eff9d6b926ecc9..ab265311733f97 100644 --- a/docs-website/sidebars.js +++ b/docs-website/sidebars.js @@ -46,6 +46,16 @@ module.exports = { "README", // "docs/faq", // hide from sidebar: out of date "docs/features", + { + Architecture: [ + "docs/architecture/architecture", + "docs/components", + "docs/architecture/metadata-ingestion", + "docs/architecture/metadata-serving", + // "docs/what/gma", + // "docs/what/gms", + ], + }, "docs/roadmap", "docs/CONTRIBUTING", "docs/demo", @@ -53,19 +63,10 @@ module.exports = { "releases", ], "Getting Started": [ - // Serves as user guides. "docs/quickstart", "docs/cli", - "docs/debugging", "metadata-ingestion/README", - "docs/policies", - ], - Architecture: [ - "docs/architecture/architecture", - "docs/architecture/metadata-ingestion", - //"docs/what/gma", - "docs/architecture/metadata-serving", - //"docs/what/gms", + "docs/debugging", ], "Metadata Ingestion": [ // add a custom label since the default is 'Metadata Ingestion' @@ -163,6 +164,7 @@ module.exports = { ], }, ], + "Usage Guides": ["docs/policies"], "Developer Guides": [ // TODO: the titles of these should not be in question form in the sidebar "docs/developers", @@ -191,34 +193,38 @@ module.exports = { "metadata-ingestion/developing", "docker/airflow/local_airflow", "docs/how/add-custom-data-platform", - ], - Components: [ - "datahub-web-react/README", - "datahub-frontend/README", - "datahub-graphql-core/README", - "metadata-service/README", - // "metadata-jobs/README", - "metadata-jobs/mae-consumer-job/README", - "metadata-jobs/mce-consumer-job/README", - ], - "Advanced Guides": [ - "docs/advanced/no-code-modeling", - "docs/advanced/aspect-versioning", - "docs/advanced/es-7-upgrade", - "docs/advanced/high-cardinality", - "docs/advanced/no-code-upgrade", - "docs/how/migrating-graph-service-implementation", - "docs/advanced/mcp-mcl", - "docs/advanced/field-path-spec-v2", - "docs/advanced/monitoring", "docs/how/add-custom-ingestion-source", - // WIP "docs/advanced/backfilling", - // WIP "docs/advanced/derived-aspects", - // WIP "docs/advanced/entity-hierarchy", - // WIP "docs/advanced/partial-update", - // WIP "docs/advanced/pdl-best-practices", + { + "Module READMEs": [ + "datahub-web-react/README", + "datahub-frontend/README", + "datahub-graphql-core/README", + "metadata-service/README", + // "metadata-jobs/README", + "metadata-jobs/mae-consumer-job/README", + "metadata-jobs/mce-consumer-job/README", + ], + }, + { + Advanced: [ + "docs/advanced/no-code-modeling", + "docs/advanced/aspect-versioning", + "docs/advanced/es-7-upgrade", + "docs/advanced/high-cardinality", + "docs/advanced/no-code-upgrade", + "docs/how/migrating-graph-service-implementation", + "docs/advanced/mcp-mcl", + "docs/advanced/field-path-spec-v2", + "docs/advanced/monitoring", + // WIP "docs/advanced/backfilling", + // WIP "docs/advanced/derived-aspects", + // WIP "docs/advanced/entity-hierarchy", + // WIP "docs/advanced/partial-update", + // WIP "docs/advanced/pdl-best-practices", + ], + }, ], - Deployment: [ + "Deployment Guides": [ "docs/how/kafka-config", "docker/README", "docs/deploy/kubernetes", diff --git a/docs/architecture/architecture.md b/docs/architecture/architecture.md index 54e8a94aebb678..55aa7623c9bd70 100644 --- a/docs/architecture/architecture.md +++ b/docs/architecture/architecture.md @@ -1,24 +1,18 @@ +--- +title: "Overview" +--- + # DataHub Architecture Overview -We highly recommend that you read the excellent [metadata architectures blog post] that describes the three generations of metadata architectures, and goes into a -lot of detail around the motivations and evolution of the DataHub architecture in comparison with other data discovery solutions and catalogs. +DataHub is a [3rd generation](https://engineering.linkedin.com/blog/2020/datahub-popular-metadata-architectures-explained) Metadata Platform that enables Data Discovery, Collaboration, Governance, and end-to-end Observability +that is built for the Modern Data Stack. DataHub employs a model-first philosophy, with a focus on unlocking interoperability between +disparate tools & systems. -The figure below describes the high-level architecture of DataHub, a third-generation metadata platform. +The figure below describes the high-level architecture of DataHub. ![datahub-architecture](../imgs/datahub-architecture.png) -## The Components -The DataHub deployables are split into three components: - -### Ingestion -This component controls how metadata is integrated with DataHub. Read [datahub-ingestion] to learn more. - -### Serving -The component is responsible for storing and querying data within DataHub. Read [datahub-serving] to learn more. - -### Frontend -This is the user-facing application that powers search and discovery over the metadata graph. Read [react-frontend] to learn more. - +For a more detailed look at the components that make up the Architecture, check out [Components](../components.md). ## Architecture Highlights There are three main highlights of DataHub's architecture. diff --git a/docs/architecture/metadata-ingestion.md b/docs/architecture/metadata-ingestion.md index 9c2b58a74c2078..17177b083d0618 100644 --- a/docs/architecture/metadata-ingestion.md +++ b/docs/architecture/metadata-ingestion.md @@ -1,3 +1,7 @@ +--- +title: "Ingestion Framework" +--- + # Metadata Ingestion Architecture DataHub supports an extremely flexible ingestion architecture that can support push, pull, asynchronous and synchronous models. diff --git a/docs/architecture/metadata-serving.md b/docs/architecture/metadata-serving.md index 8fae13d5394d6f..f26e6d17383ff1 100644 --- a/docs/architecture/metadata-serving.md +++ b/docs/architecture/metadata-serving.md @@ -1,3 +1,7 @@ +--- +title: "Serving Tier" +--- + # DataHub Serving Architecture The figure below shows the high-level system diagram for DataHub's Serving Tier. diff --git a/docs/components.md b/docs/components.md new file mode 100644 index 00000000000000..ef76729bb37fbf --- /dev/null +++ b/docs/components.md @@ -0,0 +1,60 @@ +--- +title: "Components" +--- + +# DataHub Components Overview + +The DataHub platform consists of the components shown in the following diagram. + +![DataHub Component Overview](./imgs/datahub-components.png) + +## Metadata Store + +The Metadata Store is responsible for storing the [Entities & Aspects](https://datahubproject.io/docs/metadata-modeling/metadata-model/) comprising the Metadata Graph. This includes +exposing an API for [ingesting metadata](https://datahubproject.io/docs/metadata-service#ingesting-entities), [fetching Metadata by primary key](https://datahubproject.io/docs/metadata-service#retrieving-entities), [searching entities](https://datahubproject.io/docs/metadata-service#search-an-entity), and [fetching Relationships](https://datahubproject.io/docs/metadata-service#get-relationships-edges) between +entities. It consists of a Spring Java Service hosting a set of [Rest.li](https://linkedin.github.io/rest.li/) API endpoints, along with +MySQL, Elasticsearch, & Kafka for primary storage & indexing. + +Get started with the Metadata Store by following the [Quickstart Guide](https://datahubproject.io/docs/quickstart/). + +## Metadata Models + +Metadata Models are schemas defining the shape of the Entities & Aspects comprising the Metadata Graph, along with the relationships between them. They are defined +using [PDL](https://linkedin.github.io/rest.li/pdl_schema), a modeling language quite similar in form to Protobuf while serializes to JSON. Entities represent a specific class of Metadata +Asset such as a Dataset, a Dashboard, a Data Pipeline, and beyond. Each *instance* of an Entity is identified by a unique identifier called an `urn`. Aspects represent related bundles of data attached +to an instance of an Entity such as its descriptions, tags, and more. View the current set of Entities supported [here](https://datahubproject.io/docs/metadata-modeling/metadata-model#exploring-datahubs-metadata-model). + +Learn more about DataHub models Metadata [here](https://datahubproject.io/docs/metadata-modeling/metadata-model/). + +## Ingestion Framework + +The Ingestion Framework is a modular, extensible Python library for extracting Metadata from external source systems (e.g. +Snowflake, Looker, MySQL, Kafka), transforming it into DataHub's [Metadata Model](https://datahubproject.io/docs/metadata-modeling/metadata-model/), and writing it into DataHub via +either Kafka or using the Metadata Store Rest APIs directly. DataHub supports an [extensive list of Source connectors](https://datahubproject.io/docs/metadata-ingestion/#installing-plugins) to choose from, along with +a host of capabilities including schema extraction, table & column profiling, usage information extraction, and more. + +Getting started with the Ingestion Framework is as simple: just define a YAML file and execute the `datahub ingest` command. +Learn more by heading over the the [Metadata Ingestion](https://datahubproject.io/docs/metadata-ingestion/) guide. + +## GraphQL API + +The [GraphQL](https://graphql.org/) API provides a strongly-typed, entity-oriented API that makes interacting with the Entities comprising the Metadata +Graph simple, including APIs for adding and removing tags, owners, links & more to Metadata Entities! Most notably, this API is consumed by the User Interface (discussed below) for enabling Search & Discovery, Governance, Observability +and more. + +To get started using the GraphQL API, check out the [Getting Started with GraphQL](https://datahubproject.io/docs/api/graphql/getting-started) guide. + +## User Interface + +DataHub comes with a React UI including an ever-evolving set of features to make Discovering, Governing, & Debugging your Data Assets easy & delightful. +For a full overview of the capabilities currently supported, take a look at the [Features](https://datahubproject.io/docs/features/) overview. For a look at what's coming next, +head over to the [Roadmap](https://datahubproject.io/docs/roadmap/). + +## Learn More + +Learn more about the specifics of the [DataHub Architecture](./architecture/architecture.md) in the Architecture Overview. Learn about using & developing the components +of the Platform by visiting the Module READMEs. + +## Feedback / Questions / Concerns + +We want to hear from you! For any inquiries, including Feedback, Questions, or Concerns, reach out on [Slack](https://datahubspace.slack.com/join/shared_invite/zt-nx7i0dj7-I3IJYC551vpnvvjIaNRRGw#/shared-invite/email)! diff --git a/docs/developers.md b/docs/developers.md index 4796aae8711c13..575d0ee3f7c642 100644 --- a/docs/developers.md +++ b/docs/developers.md @@ -1,3 +1,7 @@ +--- +title: "Local Development" +--- + # DataHub Developer's Guide ## Building the Project diff --git a/docs/how/add-custom-ingestion-source.md b/docs/how/add-custom-ingestion-source.md index 806af937b4bb9a..73e058c1e47929 100644 --- a/docs/how/add-custom-ingestion-source.md +++ b/docs/how/add-custom-ingestion-source.md @@ -1,3 +1,8 @@ +--- +title: "Using a Custom Ingestion Source" +--- + + # How to use a custom ingestion source without forking Datahub? Adding a custom ingestion source is the easiest way to extend Datahubs ingestion framework to support source systems diff --git a/docs/imgs/datahub-components.png b/docs/imgs/datahub-components.png new file mode 100644 index 0000000000000000000000000000000000000000..8b7d0e5330275a04ba716dc43acb16e7151f0152 GIT binary patch literal 60574 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

|S~h#@>;$P6 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 a@dFwU|DxOghl=y#G}KkJl`9l2zWfK4Csu3# literal 0 HcmV?d00001 diff --git a/metadata-jobs/mae-consumer-job/README.md b/metadata-jobs/mae-consumer-job/README.md index 5a5c920b606dd5..3fbc3ff5bc544c 100644 --- a/metadata-jobs/mae-consumer-job/README.md +++ b/metadata-jobs/mae-consumer-job/README.md @@ -1,3 +1,7 @@ +--- +title: "metadata-jobs:mae-consumer-job" +--- + # MetadataAuditEvent (MAE) Consumer Job MAE Consumer is a [Kafka Streams](https://kafka.apache.org/documentation/streams/) job. Its main function is to listen `MetadataAuditEvent` Kafka topic for messages and process those messages, converting changes in the metadata model into updates diff --git a/metadata-jobs/mce-consumer-job/README.md b/metadata-jobs/mce-consumer-job/README.md index 0aefe70d75bad2..ab622d73b7b229 100644 --- a/metadata-jobs/mce-consumer-job/README.md +++ b/metadata-jobs/mce-consumer-job/README.md @@ -1,3 +1,7 @@ +--- +title: "metadata-jobs:mce-consumer-job" +--- + # MetadataChangeEvent (MCE) Consumer Job MCE Consumer is a [Kafka Streams](https://kafka.apache.org/documentation/streams/) job. Its main function is to listen `MetadataChangeEvent` Kafka topic for messages and process those messages and writes new metadata to `DataHub GMS`. diff --git a/metadata-service/README.md b/metadata-service/README.md index a2d52369fc249b..135f683df3f549 100644 --- a/metadata-service/README.md +++ b/metadata-service/README.md @@ -1,3 +1,7 @@ +--- +title: "metadata-service" +--- + # DataHub Metadata Service (Also known as GMS) DataHub Metadata Service is a service written in Java consisting of multiple servlets: