The Java Feature Server is a high-performance, JVM-based implementation of Feast's online feature serving service. It provides low-latency retrieval of feature values for real-time inference workloads. This server is designed for production environments where performance and resource efficiency are critical requirements.
This document covers the Java Feature Server's architecture, deployment model, configuration options, and integration with the broader Feast ecosystem. For information about the Python-based feature server implementation, see Python Feature Server. For the Go implementation, see Go Feature Server.
Sources: infra/charts/feast/README.md1-82 infra/charts/feast/charts/feature-server/README.md1-68
The Java Feature Server is built on Spring Boot with reactive programming support via Project Reactor. It exposes gRPC endpoints for feature retrieval and is designed to integrate seamlessly with multiple online store backends.
Maven Module Structure
The Java Feature Server is organized into multiple Maven modules:
| Module | Purpose |
|---|---|
feast-parent | Root POM with shared configuration |
datatypes | Protobuf-generated types and data structures |
serving | Main feature server implementation |
serving-client | Java client library for the server |
coverage | Code coverage aggregation |
Sources: java/pom.xml18-35 java/pom.xml162-247
Key Dependencies:
Sources: java/pom.xml44-72 java/pom.xml228-232
The Java Feature Server is distributed as a Docker container and deployed via Helm charts on Kubernetes. The primary deployment target is cloud-native environments where it can scale horizontally.
The server is published as a Docker image to Quay.io:
quay.io/feastdev/feature-server-java:0.60.0
This image contains:
application.yaml)Sources: infra/charts/feast/charts/feature-server/values.yaml4-10
Helm Chart Structure:
The feature server is deployed as a subchart within the main Feast Helm chart at infra/charts/feast/charts/feature-server/. The chart creates:
application-override.yaml configurationapplication-secret.yaml for sensitive configSources: infra/charts/feast/README.md1-82 infra/charts/feast/requirements.yaml1-15
The Kubernetes Service exposes the feature server on a ClusterIP by default:
| Parameter | Default Value | Description |
|---|---|---|
service.type | ClusterIP | Kubernetes service type |
service.grpc.port | 6566 | Service port for gRPC requests |
service.grpc.targetPort | 6566 | Container port serving gRPC |
service.grpc.nodePort | (unset) | NodePort if service type is NodePort |
For production deployments, an Ingress resource can be configured to expose the service externally with TLS termination:
Sources: infra/charts/feast/charts/feature-server/values.yaml71-80 infra/charts/feast/charts/feature-server/values.yaml82-122
The Java Feature Server uses a layered configuration system based on Spring Boot's application.yaml mechanism. Configuration can be provided through multiple sources with clear precedence rules.
Configuration Precedence (Lowest to Highest):
application.yaml: Default configuration bundled in the JARapplication-generated.yaml: Generated by Helm from chart valuesapplication-secret.yaml: Sensitive configuration (Kubernetes Secret)application-override.yaml: User-provided overrides (Kubernetes ConfigMap)Sources: infra/charts/feast/charts/feature-server/values.yaml18-32
To configure the feature server to use Redis as the online store:
Sources: infra/charts/feast/README.md33-54
| Configuration Path | Description |
|---|---|
feast.active_store | Name of the active online store configuration |
feast.stores | List of online store configurations |
feast.entityKeySerializationVersion | Entity key serialization version (2 or 3) |
global.registry.path | Path to the Feast registry file |
global.registry.cache_ttl_seconds | Registry cache TTL in seconds |
global.project | Feast project name |
transformationService.host | Host for transformation service |
transformationService.port | Port for transformation service |
The transformation service configuration allows the feature server to delegate on-demand feature transformations to a separate Python service:
Sources: infra/charts/feast/charts/feature-server/values.yaml13-15 infra/charts/feast/README.md76-82
For production deployments, JVM options can be configured to optimize heap size and garbage collection:
Recommended settings:
-Xms and -Xmx to the same value for predictable performance-XX:+UseG1GC) for balanced throughput and latency-XX:MaxGCPauseMillis=200Sources: infra/charts/feast/charts/feature-server/values.yaml34-35
The Java Feature Server integrates with multiple components of the Feast ecosystem to provide end-to-end feature serving capabilities.
The feature server loads feature definitions from the registry, which is managed by the Python SDK. The registry contains:
The registry is cached in-memory with a configurable TTL (cache_ttl_seconds) to minimize latency. The server supports multiple registry backend types:
gs:// URIs)s3:// URIs)Sources: infra/charts/feast/README.md49-52
The feature server reads pre-materialized feature values from online stores. Each online store connector implements a common interface for:
Value messages to typed featuresThe online store type is configured via the feast.stores[].type configuration parameter. Each store type has its own configuration section under feast.stores[].config.
Sources: infra/charts/feast/README.md40-46
For on-demand feature views that require Python-based transformations, the Java Feature Server delegates to the Transformation Service:
The transformation service is configured via:
When deployed via Helm, the transformation service is automatically deployed as a sidecar if transformation-service.enabled: true in the parent Feast chart.
Sources: infra/charts/feast/charts/feature-server/values.yaml13-15 infra/charts/feast/requirements.yaml7-11
The feature server implements Kubernetes health check endpoints for liveness and readiness probes:
| Probe Type | Default Config | Purpose |
|---|---|---|
| Liveness | initialDelaySeconds: 60periodSeconds: 10timeoutSeconds: 5 | Determines if the pod should be restarted |
| Readiness | initialDelaySeconds: 15periodSeconds: 10timeoutSeconds: 10 | Determines if the pod can receive traffic |
Both probes check:
Sources: infra/charts/feast/charts/feature-server/values.yaml43-69
Logging output format and level are configurable:
logType: Console: Human-readable format for developmentlogType: JSON: Structured JSON logs for production (ELK/Splunk ingestion)Sources: infra/charts/feast/charts/feature-server/values.yaml37-40
Resource requirements should be configured based on workload characteristics:
Sizing Guidelines:
Sources: infra/charts/feast/charts/feature-server/values.yaml124-125
The Java Feature Server is optimized for low-latency feature serving:
Typical latencies (P99):
Sources: java/pom.xml71-72 java/pom.xml228-232
The Java Feature Server is built using Apache Maven with a multi-module structure:
Build artifacts:
serving/target/feast-serving-{version}.jar - Executable Spring Boot JARserving-client/target/feast-serving-client-{version}.jar - Java client librarydatatypes/target/feast-datatypes-{version}.jar - Protobuf data typesBuild requirements:
Sources: java/pom.xml354-396
Docker images are built as part of the CI/CD pipeline and published to Quay.io:
quay.io/feastdev/feature-server-java:{version}
The image build process:
Sources: infra/charts/feast/charts/feature-server/values.yaml4-10
The version is managed centrally in the parent POM using the ${revision} property:
This version is synchronized with:
The flatten-maven-plugin resolves the ${revision} variable during deployment to Maven Central.
Sources: java/pom.xml37-38 java/pom.xml459-482
| Feature | Java Feature Server | Python Feature Server | Go Feature Server |
|---|---|---|---|
| Runtime | JVM (Java 11+) | CPython 3.10+ | Native Go binary |
| Framework | Spring Boot | FastAPI | Standard library |
| RPC Protocol | gRPC | gRPC + HTTP | gRPC |
| Concurrency | Reactive (Project Reactor) | asyncio | Goroutines |
| Memory Footprint | Medium (JVM overhead) | Low-Medium | Low |
| Startup Time | Slow (JVM warmup) | Fast | Very fast |
| Throughput | High | Medium | Very high |
| Latency P99 | 5-20ms | 10-30ms | 3-15ms |
| Deployment | Kubernetes via Helm | Kubernetes/Docker/Local | Kubernetes/Binary |
| Primary Use Case | Production serving at scale | Development, prototyping | High-performance production |
The Java Feature Server is recommended when:
For maximum performance, consider the Go Feature Server (Go Feature Server). For rapid development and experimentation, use the Python Feature Server (Python Feature Server).
Sources: infra/charts/feast/README.md1-82
Refresh this wiki
This wiki was recently refreshed. Please wait 4 days to refresh again.