<mxfile host="app.diagrams.net" agent="Claude" version="24.7.0">
<diagram id="lean-ctx" name="LeanFlow">
<mxGraphModel dx="1700" dy="900" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1700" pageHeight="870" math="0" shadow="0">
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="title" value="&lt;b&gt;LeanFlow by TinyCubeWay: agent context on open-source Apache components&lt;/b&gt;  &lt;font style=&#x27;font-size:12px&#x27;&gt;(data lake, governance, semantic layer, ontology, security, model routing)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#001E3C;strokeColor=#001E3C;fontColor=#FFFFFF;fontSize=16;align=left;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="20" y="10" width="1300" height="40" as="geometry"/></mxCell>
<mxCell id="legend" value="&lt;font color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt; control node &amp;nbsp; &lt;font color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N2&lt;/b&gt;&lt;/font&gt; query node &amp;nbsp; &lt;font color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N3&lt;/b&gt;&lt;/font&gt; edge node" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=11;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1340" y="10" width="340" height="40" as="geometry"/></mxCell>
<mxCell id="l_cons" value="1. Consumers" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F7FB;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="20" y="65" width="1300" height="95" as="geometry"/></mxCell>
<mxCell id="agents" value="&lt;b&gt;AI agents&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;MCP clients (any framework)&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="40" y="95" width="280" height="55" as="geometry"/></mxCell>
<mxCell id="analysts" value="&lt;b&gt;Analysts / BI&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;Apache Superset (optional)&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N2&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="340" y="95" width="250" height="55" as="geometry"/></mxCell>
<mxCell id="apps" value="&lt;b&gt;Product features&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;internal APIs&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="610" y="95" width="250" height="55" as="geometry"/></mxCell>
<mxCell id="idp" value="&lt;b&gt;Keycloak (OIDC)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;one identity per human and per agent (Apache-2.0, not an ASF project)&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#001E3C;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="880" y="95" width="420" height="55" as="geometry"/></mxCell>
<mxCell id="l_ctx" value="2. Agent context and model gateway" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EEF4FC;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="20" y="175" width="1300" height="150" as="geometry"/></mxCell>
<mxCell id="apisix" value="&lt;b&gt;Apache APISIX AI gateway&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;ai-proxy-multi (tiers, fallback, retries)&lt;br&gt;ai-rate-limiting (token budget per agent)&lt;br&gt;ai-prompt-guard, token usage logs&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N3&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF7E6;strokeColor=#FCA200;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="40" y="205" width="330" height="110" as="geometry"/></mxCell>
<mxCell id="mcp_sem" value="&lt;b&gt;Semantic MCP (thin wrapper)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;metrics by name: revenue, active_customers, churn&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N2&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="400" y="205" width="280" height="110" as="geometry"/></mxCell>
<mxCell id="mcp_meta" value="&lt;b&gt;Gravitino MCP server&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;what data exists, owners, tags, lineage, policies&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="700" y="205" width="280" height="110" as="geometry"/></mxCell>
<mxCell id="mcp_onto" value="&lt;b&gt;Ontology MCP (thin wrapper)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;SPARQL: what a Customer is, how it links to Order and Vehicle&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1000" y="205" width="300" height="110" as="geometry"/></mxCell>
<mxCell id="l_gov" value="3. Semantic layer, ontology, governance and security" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F7FB;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="20" y="340" width="1300" height="160" as="geometry"/></mxCell>
<mxCell id="ranger" value="&lt;b&gt;Apache Ranger&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;one policy store: masking, row filters, audit to object storage&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#001E3C;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="40" y="370" width="195" height="120" as="geometry"/></mxCell>
<mxCell id="polaris" value="&lt;b&gt;Apache Polaris&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;Iceberg REST catalog, RBAC, short-lived vended credentials&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#001E3C;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="245" y="370" width="195" height="120" as="geometry"/></mxCell>
<mxCell id="metricflow" value="&lt;b&gt;MetricFlow&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;metric definitions in YAML, compiles governed SQL (Apache-2.0, dbt Labs)&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N2&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="460" y="370" width="220" height="120" as="geometry"/></mxCell>
<mxCell id="gravitino" value="&lt;b&gt;Apache Gravitino&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;metadata lake: federates Polaris, Postgres, Kafka; tags, lineage, RBAC&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="700" y="370" width="280" height="120" as="geometry"/></mxCell>
<mxCell id="fuseki" value="&lt;b&gt;Apache Jena Fuseki&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;OWL / SKOS business ontology on TDB2&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1000" y="370" width="300" height="120" as="geometry"/></mxCell>
<mxCell id="l_comp" value="4. Query, ingestion and orchestration" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#EEF4FC;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="20" y="515" width="1300" height="135" as="geometry"/></mxCell>
<mxCell id="doris" value="&lt;b&gt;Apache Doris (single FE + BE)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;reads Iceberg through Polaris REST with vended credentials; Ranger plugin enforces masking and row filters&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N2&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#001E3C;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="40" y="545" width="560" height="95" as="geometry"/></mxCell>
<mxCell id="airflow" value="&lt;b&gt;Apache Airflow&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;LocalExecutor; ingestion and table maintenance&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N3&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="620" y="545" width="190" height="95" as="geometry"/></mxCell>
<mxCell id="seatunnel" value="&lt;b&gt;Apache SeaTunnel&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;batch and CDC ingestion&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N3&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="830" y="545" width="210" height="95" as="geometry"/></mxCell>
<mxCell id="sources" value="&lt;b&gt;Sources&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;app Postgres, SaaS APIs, event files&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;dashed=1;" vertex="1" parent="1"><mxGeometry x="1060" y="545" width="240" height="95" as="geometry"/></mxCell>
<mxCell id="l_store" value="5. Storage" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F4F7FB;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="20" y="665" width="1300" height="110" as="geometry"/></mxCell>
<mxCell id="iceberg" value="&lt;b&gt;Apache Iceberg tables (Parquet)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;on S3-compatible object storage: Hetzner Object Storage, or Amazon S3 on AWS&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6F0FA;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="40" y="695" width="640" height="70" as="geometry"/></mxCell>
<mxCell id="pg" value="&lt;b&gt;PostgreSQL (one instance, separate databases)&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;backs Polaris, Ranger, Gravitino, Keycloak, Airflow metadata&lt;/font&gt;&lt;br&gt;&lt;font style=&#x27;font-size:9px&#x27; color=&#x27;#FCA200&#x27;&gt;&lt;b&gt;N1&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#E6F0FA;strokeColor=#0060C0;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="700" y="695" width="600" height="70" as="geometry"/></mxCell>
<mxCell id="l_llm" value="Model tiers behind the gateway" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF7E6;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="1340" y="65" width="340" height="420" as="geometry"/></mxCell>
<mxCell id="t1" value="&lt;b&gt;Tier 1: small model&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;classification, extraction, tool choice, metric lookup&lt;br&gt;~70% of calls&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FCA200;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1360" y="100" width="300" height="95" as="geometry"/></mxCell>
<mxCell id="t2" value="&lt;b&gt;Tier 2: mid model&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;summaries, SQL review, multi-step plans&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FCA200;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1360" y="210" width="300" height="95" as="geometry"/></mxCell>
<mxCell id="t3" value="&lt;b&gt;Tier 3: frontier model&lt;/b&gt;&lt;br&gt;&lt;font style=&#x27;font-size:10px&#x27;&gt;hard reasoning only; fallback target&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FCA200;fontColor=#001E3C;fontSize=12;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1360" y="320" width="300" height="95" as="geometry"/></mxCell>
<mxCell id="t_note" value="Blended token cost falls ~63-66% when 70% of calls go to a model 10-20x cheaper" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#FFFFFF;fontColor=#001E3C;fontSize=10;align=center;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1360" y="425" width="300" height="50" as="geometry"/></mxCell>
<mxCell id="l_cost" value="Monthly cost, same stack (Nov 2026)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=13;fontStyle=1;align=left;verticalAlign=top;spacingLeft=10;spacingTop=4;arcSize=3;" vertex="1" parent="1"><mxGeometry x="1340" y="500" width="340" height="275" as="geometry"/></mxCell>
<mxCell id="c1" value="&lt;b&gt;Hetzner EU, shared vCPU&lt;/b&gt;&lt;br&gt;N1 CX43 8/16 | N2 CX53 16/32 | N3 CX33 4/8&lt;br&gt;+ 1 TB object storage, backups, IPv4&lt;br&gt;&lt;font color=&#x27;#0060C0&#x27;&gt;&lt;b&gt;EUR 72.75 (~USD 86), 28 vCPU&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=10;align=left;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1355" y="530" width="310" height="70" as="geometry"/></mxCell>
<mxCell id="c2" value="&lt;b&gt;AWS EC2, same open-source stack&lt;/b&gt;&lt;br&gt;m7i.xlarge | m7i.2xlarge | m7i.large, EBS, S3,&lt;br&gt;NAT gateway, 500 GB egress&lt;br&gt;&lt;font color=&#x27;#0060C0&#x27;&gt;&lt;b&gt;USD 659 on-demand, USD 522 with 1-yr plan, 14 vCPU&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=10;align=left;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1355" y="608" width="310" height="70" as="geometry"/></mxCell>
<mxCell id="c3" value="&lt;b&gt;AWS managed path&lt;/b&gt;&lt;br&gt;above + EKS USD 73 + MWAA small USD 358&lt;br&gt;+ Neptune db.r5.large USD 254&lt;br&gt;&lt;font color=&#x27;#B00020&#x27;&gt;&lt;b&gt;~USD 1,344 / month, most of it billed even when idle&lt;/b&gt;&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#9FB3C8;fontColor=#001E3C;fontSize=10;align=left;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="1355" y="686" width="310" height="80" as="geometry"/></mxCell>
<mxCell id="skip" value="&lt;b&gt;Leave out at seed stage (overengineering tax):&lt;/b&gt; Apache Atlas (pulls HBase, Solr, Kafka) | Apache Ozone (run object storage you rent instead) | a Kafka cluster before you have streams | Kubernetes for three nodes (Docker Compose is enough) | Ranger audit to Solr (write audit JSON to object storage)" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#FFF7E6;strokeColor=#FCA200;fontColor=#001E3C;fontSize=11;align=left;verticalAlign=middle;arcSize=8;spacing=6;" vertex="1" parent="1"><mxGeometry x="20" y="790" width="1660" height="60" as="geometry"/></mxCell>
<mxCell id="e11" value="LLM calls" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#FCA200;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.3;exitY=1;exitDx=0;exitDy=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="agents" target="apisix"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e12" value="MCP tool calls (all three servers)" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.85;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="agents" target="mcp_meta"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="278" y="168"/><mxPoint x="840" y="168"/></Array></mxGeometry></mxCell>
<mxCell id="e13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#FCA200;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.9;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="apisix" target="t1"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="337" y="190"/><mxPoint x="1330" y="190"/><mxPoint x="1330" y="147"/></Array></mxGeometry></mxCell>
<mxCell id="e14" value="fallback" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#FCA200;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="t1" target="t2"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e15" value="fallback" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#FCA200;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="t2" target="t3"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e16" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.364;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mcp_sem" target="metricflow"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e17" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mcp_meta" target="gravitino"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="mcp_onto" target="fuseki"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e19" value="federates" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.1;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="gravitino" target="polaris"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="728" y="332"/><mxPoint x="342" y="332"/></Array></mxGeometry></mxCell>
<mxCell id="e20" value="authorizer" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#001E3C;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="polaris" target="ranger"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e21" value="catalog + creds" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#001E3C;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5357;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="polaris" target="doris"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e22" value="policy sync" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#001E3C;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;dashed=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.17;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="ranger" target="doris"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e23" value="governed SQL" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.9464;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="metricflow" target="doris"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e24" value="reads Parquet" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#001E3C;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.36;exitY=1;exitDx=0;exitDy=0;entryX=0.315;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="doris" target="iceberg"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e25" value="writes, commits via Polaris" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.95;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="seatunnel" target="iceberg"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="935" y="680"/><mxPoint x="648" y="680"/></Array></mxGeometry></mxCell>
<mxCell id="e26" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="sources" target="seatunnel"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e27" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=1;html=1;strokeColor=#4A6178;fontColor=#001E3C;fontSize=10;endArrow=blockThin;endFill=1;labelBackgroundColor=#FFFFFF;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="airflow" target="seatunnel"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>