Connect an external feature store¶
Register a feature store you already run, such as a Feast feature server, so Kionga can check its health and show it to the projects that may use it. For the store that ships with Kionga, see Use the built-in feature store.
Kionga connects external stores through adapters. An adapter defines what Kionga can drive in that store:
| Provider | Adapter | What Kionga can drive | Health check |
|---|---|---|---|
internal (built in) |
Yes | Online, offline, point-in-time joins, materialization, TTL, push | Redis, or the feature gateway's /healthz |
feast |
Yes | Online lookups and TTL | Feast GET /health |
tecton, hopsworks, vertex-ai, sagemaker, databricks |
Not yet | Nothing | Listed as a contract without an adapter; you cannot connect them |
Before you begin¶
- To connect, edit, test or remove a store: the
adminoroperatorrole. - To see the stores shared with your projects: the
featuresservice for a normal user, or theviewer,engineer,operatororadminrole. - A running Feast feature server that the Kionga gateway can reach over HTTP or HTTPS.
- If Feast needs a bearer token, an operator sets it as an environment variable
on the gateway, for example
FEAST_TOKEN. You never paste the secret into Kionga.
Connect a Feast feature server¶
- Open Platform. Under Feature stores and object storage, click + Feature store.
- Choose the Provider and enter a Connection name (2 to 63 lowercase letters, digits and hyphens).
- Enter the Feature server URL, for example
http://feast-feature-server:6566. - Optional: enter Feature services as a comma-separated list. Feast's HTTP server cannot list them itself.
- Optional: enter a Credential reference such as
env:FEAST_TOKEN. - Enter the Allowed projects as comma-separated project IDs. Leave it empty to share the store with every project.
- Click Save and test.
Use an administrator's session cookie (see Authentication):
curl -s -b kionga.cookies -X POST "$MLAIOPS_URL/api/v1/admin/feature-stores" \
-H 'Content-Type: application/json' \
-d '{"provider": "feast", "name": "team-feast",
"config": {"url": "http://feast-feature-server:6566",
"feature_services": "customer_profile"},
"secret_ref": "env:FEAST_TOKEN",
"allowed_projects": ["prj-123"]}'
curl -s -b kionga.cookies -X POST \
"$MLAIOPS_URL/api/v1/admin/feature-stores/<store-id>/test"
Kionga validates the connection before saving it:
configaccepts only the provider's keys (urlandfeature_servicesfor Feast). Keys that look like secrets, and URLs with embedded credentials, are rejected.secret_refis empty orenv:VARIABLE. Kionga reads the value only to run a check, and never stores, logs or returns it. Responses report only whether the secret is present.- Every project in
allowed_projectsmust exist.
Verify: the health message reads Healthy: Feast feature server is serving
at .... Other results mean:
| Health | Meaning |
|---|---|
configured |
Saved but not tested yet. Saving or editing a connection resets it to this state. |
degraded |
Feast answered, but took more than 2 seconds or returned an unexpected status |
unavailable |
Feast is unreachable, or it rejected the credential (401 or 403) |
Share a store with projects¶
To change which projects can use a store after you connect it, send the full
connection with the new allowed_projects list. The console has no edit form;
there you remove the store and connect it again.
-
Update the connection:
curl -s -b kionga.cookies -X PUT \ "$MLAIOPS_URL/api/v1/admin/feature-stores/<store-id>" \ -H 'Content-Type: application/json' \ -d '{"provider": "feast", "name": "team-feast", "config": {"url": "http://feast-feature-server:6566"}, "secret_ref": "env:FEAST_TOKEN", "allowed_projects": ["prj-123", "prj-456"]}' -
Test it again, because saving resets its health to
configured.
Project members see a store only when it is shared with one of their projects (or with every project), and they see only their own project IDs on it.
Verify: a project member sees the store in Features > Feature stores, or in the response of:
Serve online lookups from Feast¶
Registering a store records and monitors it. To make Kionga's feature gateway
answer /get-online-features from Feast instead of Redis, an operator configures
the feature gateway itself:
- Set
FEAST_URLon thefeature-gatewayservice to the Feast feature server address. - Restart the feature gateway.
With FEAST_URL set, the gateway forwards every lookup to Feast and its
/healthz returns 503 when Feast is unreachable. Its metrics carry the label
mode="feast".
Verify: a lookup returns the values that Feast serves:
curl -s -X POST "$MLAIOPS_FEATURE_GATEWAY_URL/get-online-features" \
-H 'Content-Type: application/json' \
-d '{"feature_service": "customer_profile", "entities": [{"entity_id": "u123"}]}'
Remove a store¶
Click Remove on the store under Feature stores and object storage, or
call DELETE /api/v1/admin/feature-stores/<store-id>. The built-in store, with
the ID internal, cannot be edited or removed; its addresses come from
MLAIOPS_FEATURE_GATEWAY_URL and KIONGA_FEATURE_OFFLINE_URI on the gateway.
Next steps¶
- Use the built-in feature store for materialization, versions and point-in-time joins.
- Process real-time events with online features.
- For how adapters work and how to add one, see the engineering handbook.