Title: Feature Request: Add configurable batching for offline store writes in Feature Server push API · Issue #5683 · feast-dev/feast · GitHub
Open Graph Title: Feature Request: Add configurable batching for offline store writes in Feature Server push API · Issue #5683 · feast-dev/feast
X Title: Feature Request: Add configurable batching for offline store writes in Feature Server push API · Issue #5683 · feast-dev/feast
Description: Is your feature request related to a problem? Please describe. Currently, when using the Feature Server's push API with streaming ingestion, offline store writes are not automatically batched. Users must either: Manually batch calls to w...
Open Graph Description: Is your feature request related to a problem? Please describe. Currently, when using the Feature Server's push API with streaming ingestion, offline store writes are not automatically batched. User...
X Description: Is your feature request related to a problem? Please describe. Currently, when using the Feature Server's push API with streaming ingestion, offline store writes are not automatically batched. ...
Opengraph URL: https://github.com/feast-dev/feast/issues/5683
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Feature Request: Add configurable batching for offline store writes in Feature Server push API","articleBody":"## Is your feature request related to a problem? Please describe.\n\nCurrently, when using the Feature Server's push API with streaming ingestion, offline store writes are not automatically batched. Users must either:\n1. Manually batch calls to `write_to_offline_store()` in their application code\n2. Set up a separate stream processing pipeline (e.g., Spark with Kafka) to handle batching\n\nFor users receiving high-frequency feature updates (e.g., 100 requests/second) who want to write to both online and offline stores, this creates unnecessary complexity and can lead to inefficient writes to offline stores like BigQuery or Parquet.\n\n## Describe the solution you'd like\n\nAdd configurable automatic batching for offline store writes in the Feature Server, similar to how the Spark-Kafka processor handles batching via the `processingTime` parameter.\n\n**Proposed configuration options:**\n- `offline_write_batch_size`: Number of records to buffer before flushing to offline store\n- `offline_write_batch_interval`: Time interval (seconds) to wait before flushing to offline store\n- Flush on whichever threshold is reached first\n\n**Example configuration in `feature_store.yaml`:**\n```yaml\nonline_store:\n type: redis\n ...\noffline_store:\n type: bigquery\n ...\nfeature_server:\n offline_write_batching:\n enabled: true\n batch_size: 1000\n batch_interval_seconds: 30\n```\n\n## Describe alternatives you've considered\n\n1. **Current approach with stream processor**: Users can set up a Spark Structured Streaming job that reads from Kafka and uses `processingTime` to control batching. This works but requires additional infrastructure and complexity.\n\n2. **Manual batching in application code**: Users can implement their own buffering logic before calling `write_to_offline_store()`, but this duplicates effort across different applications.\n\n3. **Use only online store**: Skip offline store writes entirely during streaming and rely on periodic materialization from batch sources, but this loses the real-time historical logging capability.\n\n## Additional context\n\nThis feature request came from a community discussion about streaming ingestion patterns. When using `PushMode.ONLINE_AND_OFFLINE` with high-frequency updates, the lack of automatic batching can result in:\n- Excessive API calls to offline stores (one per feature update)\n- Higher costs for cloud data warehouses like BigQuery\n- Increased latency for write operations\n\n**Current implementation reference:**\nThe Spark-Kafka processor already implements batching at `sdk/python/feast/infra/contrib/spark_kafka_processor.py:134-173` using `foreachBatch`. Similar batching logic could be added to the Feature Server's push endpoint.\n\n**Benefits:**\n- Simplified architecture for users who want real-time serving + historical logging\n- Reduced costs for offline store writes\n- Better alignment with best practices for data warehouse ingestion\n- No breaking changes (feature would be opt-in via configuration)\n\nRelated code:\n- Feature Server: `sdk/python/feast/feature_store.py:1786-1828` (`write_to_offline_store`)\n- Spark batching example: `sdk/python/feast/infra/contrib/spark_kafka_processor.py:134-173`\n\ncc @feast-dev/maintainers","author":{"url":"https://github.com/devin-ai-integration[bot]","@type":"Person","name":"devin-ai-integration[bot]"},"datePublished":"2025-10-20T13:24:26.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/5683/feast/issues/5683"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1f582cc2-3926-5ac5-6bdc-67a42c25ad9b |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DB80:3790:4BE75F2:65A7EC3:696E0035 |
| html-safe-nonce | ee67df2dca64e6a8910132772e8072222c5f86b381c8ab6010799bf6156a9a6c |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQjgwOjM3OTA6NEJFNzVGMjo2NUE3RUMzOjY5NkUwMDM1IiwidmlzaXRvcl9pZCI6IjI0NTkwODYxNDcwMjM2NjcyNTMiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 1cc8392e92d5810ebd55fb1589b45155136f7e59db0bf3e5e4fe166ec8a9cedc |
| hovercard-subject-tag | issue:3532442461 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/feast-dev/feast/5683/issue_layout |
| twitter:image | https://opengraph.githubassets.com/410716ee961caef72efdc329adfe30b0cf21f50c75d4ea25be7664c7d1b609b2/feast-dev/feast/issues/5683 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/410716ee961caef72efdc329adfe30b0cf21f50c75d4ea25be7664c7d1b609b2/feast-dev/feast/issues/5683 |
| og:image:alt | Is your feature request related to a problem? Please describe. Currently, when using the Feature Server's push API with streaming ingestion, offline store writes are not automatically batched. User... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | devin-ai-integration[bot] |
| hostname | github.com |
| expected-hostname | github.com |
| None | 4922b452d03cd8dbce479d866a11bc25b59ef6ee2da23aa9b0ddefa6bd4d0064 |
| turbo-cache-control | no-preview |
| go-import | github.com/feast-dev/feast git https://github.com/feast-dev/feast.git |
| octolytics-dimension-user_id | 57027613 |
| octolytics-dimension-user_login | feast-dev |
| octolytics-dimension-repository_id | 161133770 |
| octolytics-dimension-repository_nwo | feast-dev/feast |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 161133770 |
| octolytics-dimension-repository_network_root_nwo | feast-dev/feast |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7e5ae23c70136152637ceee8d6faceb35596ec46 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width