feature_store_team_b.yaml #
project: team_b_recommendations registry: path: s3://shared-bucket/registry_team_b.db online_store: type: redis connection_string: “redis://shared-redis:6379/1” offline_store: type: bigquery project: my-gcp-project dataset: team_b_features
```python
# Tag feature definitions with version metadata
user_transaction_features_v2 = FeatureView(
name="user_transaction_features_v2",
entities=[user],
schema=[...],
source=transaction_stats_source,
tags={
"version": "2.0",
"model": "fraud_xgboost_v3",
"changelog": "Added velocity features",
"owner": "ml-team@company.com",
},
)
``````yaml
# RBAC configuration (Feast 0.60+)
auth:
type: oidc
oidc_server_url: "https://auth.company.com"
client_id: "feast-app"
client_secret: "${OIDC_CLIENT_SECRET}"
token_introspection_url: "https://auth.company.com/introspect"
authorization:
enabled: true
policies:
- resource: "feature_view:user_transaction_features"
actions: ["read", "materialize"]
roles: ["ml-engineer", "data-scientist"]
- resource: "feature_service:fraud_detection_v1"
actions: ["read"]
roles: ["model-server"]
``````python
# stream_ingestion.py
from feast import FeatureStore
from confluent_kafka import Consumer
import json
store = FeatureStore(repo_path=".")
consumer = Consumer({
"bootstrap.servers": "kafka:9092",
"group.id": "feast-stream-ingestion",
"auto.offset.reset": "latest",
})
consumer.subscribe(["transaction-events"])
while True:
msg = consumer.poll(timeout=1.0)
if msg is None:
continue
event = json.loads(msg.value().decode("utf-8"))
# Push feature update directly to online store
store.push(
feature_view_name="user_transaction_features",
df=pd.DataFrame([{
"user_id": event["user_id"],
"event_timestamp": event["timestamp"],
"avg_transaction_amount_7d": event["amount"],
}]),
)
``````bash
pip install feast[redis,bigquery]
feast init
# Define your entities, feature views, and feature services
feast apply
feast materialize-incremental $(date -u +"%Y-%m-%dT%H:%M:%S")
💬 Discussion