v1.0.17 latest
This release adds the otter-stream-sql module — full Flink SQL integration with a
scalar UDF, a lookup table function, a dynamic table connector, and MinIO/S3 model loading
support. It also introduces the shade-plugin configuration that bundles all runtime dependencies
into the *-flink-udf.jar classifier artifact required for SQL Gateway deployment.
What is new
- otter-stream-sql module —
MLInferenceFunction(ScalarFunction),MLInferenceLookupFunction(TableFunction),MLInferenceDynamicTableFactory(connector identifier:ml-inference). - MinIO model loader —
MinioModelLoaderdownloads SavedModel directories and single-file formats (ONNX, XGBoost, PMML) from any S3-compatible endpoint at engine initialisation time. - Shaded JAR classifier — running
mvn packageinsideotter-stream-sqlnow produces both the thin JAR and the*-flink-udf.jarshaded artifact with all runtime deps bundled. - SqlInferenceConfig — typed DDL option parser covering model path, format, MinIO credentials, cache TTL, batch size, async flag, and retry policy.
- ModelCache TTL default raised from 30 to 60 minutes.
- Caffeine upgraded to 3.1.8 to resolve a thread-local memory leak under high eviction rates.
Bug fixes
- Fixed
NullPointerExceptioninMLInferenceFunction.eval()whenInferenceResult.getOutputs()returned an empty map rather thannull. - Fixed
ClassCastExceptionwhen the first output tensor was anint[]rather than afloat[]ordouble[]. - Fixed serialisation of
SqlInferenceConfigacross Flink task slot boundaries.
Maven coordinates
<dependency> <groupId>com.codedstreams</groupId> <artifactId>otter-stream-sql</artifactId> <version>1.0.17</version> </dependency>
v1.0.15
Maintenance release. Upgraded ONNX Runtime to 1.23.2 and resolved a memory-leak in the
TensorFlow engine when SavedModelBundle was not closed on engine eviction from
ModelCache.
Changes
- ONNX Runtime upgraded from 1.16.3 to 1.23.2.
TensorFlowInferenceEngine.close()now properly callsSavedModelBundle.close()on cache eviction.- XGBoost4J upgraded to 3.1.1.
- AWS SDK upgraded to 2.21.29.
- Added
EngineCapabilitiesinterface so callers can query whether an engine supports GPU acceleration before committing to it. - Improved error messages on
InferenceExceptionto include the model name and path that failed.
Maven coordinates
<dependency> <groupId>com.codedstreams</groupId> <artifactId>ml-inference-core</artifactId> <version>1.0.15</version> </dependency>
v1.0.12
Added the otter-stream-remote module and otter-stream-pytorch module.
Introduced Micrometer metrics instrumentation across all engines.
Changes
- New module:
otter-stream-remote— HTTP and gRPC clients for SageMaker, Vertex AI, Azure ML, and arbitrary REST endpoints. - New module:
otter-stream-pytorch— TorchScript inference via Deep Java Library 0.25.0. - All engines now emit Micrometer metrics:
inference.latency,inference.requests.total,inference.errors.total. ModelCacheemitscache.hitsandcache.missescounters.- Flink version in parent POM updated from 1.16.0 to 1.17.0.
v1.0.0 initial release
Initial public release. Established the core architecture: InferenceEngine
interface, InferenceResult and InferenceException value types,
ModelCache singleton, InferenceConfig builder, and the Flink
AsyncModelInferenceFunction wrapper. Shipped with ONNX, TensorFlow, XGBoost,
and PMML engine implementations.
Compatibility Matrix
| Otter Streams | Flink | Java | Scala (table planner) | ONNX Runtime | TensorFlow Java |
|---|---|---|---|---|---|
| 1.0.17 latest | 1.17.x, 1.18.x, 1.19.x, 1.20.x | 11, 17 | 2.12 | 1.23.2 | 0.5.0 |
| 1.0.15 | 1.17.x, 1.18.x | 11, 17 | 2.12 | 1.23.2 | 0.5.0 |
| 1.0.12 | 1.17.x | 11 | 2.12 | 1.16.3 | 0.5.0 |
| 1.0.0 | 1.16.x | 11 | 2.12 | 1.14.0 | 0.4.2 |
flink-table-planner_2.12 artifact
in the parent POM pins Scala 2.12. If your Flink cluster was built with Scala 2.13 you
must override ${scala.binary.version} in your build before shading.
Upgrade Notes
From 1.0.15 to 1.0.17
- The
otter-stream-sqlmodule is new in 1.0.17. No changes to existing module APIs. - If you were using
ModelCachedirectly, the TTL default has changed from 30 to 60 minutes. Override viaSET 'otter.model.cache.ttl-minutes' = '30'if you need the old behaviour. - Rebuild your shaded JAR — the new shade configuration in
otter-stream-sql/pom.xmlis required for SQL Gateway deployment. The old thin JAR will produce aNoClassDefFoundErrorat registration time.
From 1.0.12 to 1.0.15
- ONNX Runtime 1.23.2 drops support for AVX without AVX2. If your CPUs do not support
AVX2 pin to
onnxruntime:1.16.3in your dependency overrides. - The
TensorFlowInferenceEnginenow callsclose()automatically on cache eviction. If you were managing the lifecycle manually viaengine.close(), remove those calls to avoid double-close errors.
From 1.0.0 to 1.0.12
- Parent POM Flink version bumped from 1.16.0 to 1.17.0. Rebuild all modules against your target Flink version before deploying.
InferenceConfignow requiresmodelConfig(ModelConfig)to be set; previouslymodelPathcould be set directly on the top-level builder. Update call sites accordingly.