Feast Feature Store — Real-Time ML Feature Management at Scale

Feast is the industry-standard open-source feature store for ML with 8,000+ GitHub stars. Online/offline feature serving, point-in-time joins, and seamless integration with all ML frameworks.

    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