Overview
FerroDruid is a Rust-native, Apache-Druid-spec-compatible real-time OLAP database. It speaks the Druid REST API, native query JSON, and Druid SQL, and it reads Apache Druid segment v9 binary files (read compatibility verified against segments written by Druid 31.0.2 and 35.0.1, on local disk) - without a JVM, without ZooKeeper, and without a six-process control plane to operate. A classic Apache Druid cluster needs six or more JVM processes plus ZooKeeper plus an external metadata database, and 16 GB or more of RAM, before it serves a single query. FerroDruid's single-binary mode replaces all of that with one process that starts in under a second, uses under 200 MB of RAM, and ships as a self-contained AMI. What FerroDruid does today (v1.2.0): it serves all eight Druid native query types (timeseries, topN, groupBy, scan, search, segmentMetadata, dataSourceMetadata, timeBoundary); it runs Druid SQL with SELECT, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, more than 30 functions, EXPLAIN PLAN FOR, and an MSQ task endpoint (core SQL parity approximately 95 percent); it exposes more than 40 Druid-compatible REST endpoints; it reads Apache Druid segment v9 binaries - verified against segments written by Druid 31.0.2 and 35.0.1 - and writes segments in its own native format (the supported single-binary path uses SQLite metadata plus local-filesystem deep storage); it ingests from Kafka and Kinesis supervisors and via native batch; and it enforces Basic authentication (Argon2id) with role-based access control on by default and TLS via rustls. Admin password security: on first boot the AMI generates a NEW RANDOM admin password UNIQUE to that instance (never a default or shared password) and writes it once to the instance system log. The admin account is flagged must-change, so EVERY API endpoint returns HTTP 403 until the operator rotates the password by POSTing a new one to /druid-ext/basic-security/authentication/db/basic/users/admin/credential; the rotated credential is persisted and survives restarts. This enforces a password change on first login. Hardening posture: every crate uses forbid(unsafe_code); clippy is clean at -D warnings workspace-wide; 57k+ test functions in-tree; 21 fuzz targets on a continuous 24h farm; CycloneDX SBOM in CI; cargo-audit 0 advisory. Live wire deep-match is clean against Apache Druid 31.0.2, 32.0.1, 33.0.0, 34.0.0, 35.0.1 and 36.0.0: on each version, 42 of 48 deep-compared queries match byte-for-byte with 0 mismatches (Sections 1 through 4 are 30 of 30 deep on every version), plus 5 of 5 with an Apache Superset connector; Druid 30.0.1 is the one partial version at 24 of 48, where every diff is Druid 30's own upstream empty-result behaviour for SQL window functions, not a FerroDruid defect. New in v1.2.0: SQL UNION ALL with Druid-compatible positional column mapping; a null-generation load path so NULL-typed columns round-trip faithfully; fail-closed Historical segment routing with exact O(1) cache-limit accounting; and a verified read of a real Apache Druid v9 segment round-tripped through real AWS S3 deep storage. 3-host EC2 nemesis matrix (sym-partition, asym-partition, leader-kill, disk-full, OOM, corrupted-segment, clockskew multi-host) all PASS at the safety layer with dup_leader_terms=0 term_regressions=0 recovery_ok=1. Cluster-wire mTLS election-storm root-caused (Wave 2 W2-E) and source-fixed (Wave 2 continuation B1+B2): cluster-wire promotions per second collapsed from 0.93-1.20 to 0.19 on same-shape 3-host c7g.large re-fire, a 4.9x reduction, within 19 percent of the PSK-baseline 0.16 per second. Honest scope: single-binary mode is the supported Marketplace topology, with the multi-node classic 6-role topology in scope in-tree; multi-node deployments fail closed by default. Per-version residuals and honest limitations are disclosed in docs/known-limitations.md. Honest limitations carried forward for v1.x are enumerated in the release notes and in the in-tree docs/known-limitations.md file: CL-A1-R-mTLS-residual-churn (post-fix 0.19 per second cluster-wide steady-state, safety intact), CL-1.0-in-memory-raft (single-binary Raft log is in-memory), CL-A1-R-oomkill-choom-need-workload-rss, CL-5-R-longrun-chaos-2h-window, TG-1-finding-W2A-1-index-drd, CL-1-R1 multi-broker Kafka MSK, CL-B5 mTLS CRL-OCSP, CL-J1-R2 broker-to-coordinator wire, CL-J1-R4 single-port permissive. This listing sells a hardened, scanned, supported distribution built from the Business Source License 1.1 source at a pinned release version (github.com/abyo-software/ferrodruid; each release converts to Apache-2.0 four years after publication). The AMI is metered automatically by AWS per running instance-hour, with no metering code in the product.
Highlights
- One binary, not six JVMs: FerroDruid needs no ZooKeeper and no external metadata database in single-binary mode, and it boots in under a second on under 200 MB of RAM.
- Druid wire-compatible: speaks the Druid REST API, native query JSON, and Druid SQL, and reads Apache Druid segment v9 (verified against Druid 31.0.2 and 35.0.1, including one round-tripped through real AWS S3). Live wire deep-match is clean against Apache Druid 31.0.2 through 36.0.0 - 42 of 48 queries match byte-for-byte, 0 mismatched on each - and 5 of 5 with an Apache Superset connector (Druid 30.0.1 partial, from Druid 30's own window-function behaviour, not a FerroDruid defect).
- Hardened: 3-host EC2 nemesis matrix all PASS at the safety layer (sym-partition, asym-partition, leader-kill, disk-full, OOM, corrupted-segment, multi-host clockskew); cluster-wire mTLS election-storm source-fixed (4.9x reduction on same-shape re-fire); 57k+ tests + 21 continuous fuzz targets + workspace clippy -D warnings + forbid(unsafe_code); CycloneDX SBOM; paid support SLA.
Details
Introducing multi-product solutions
You can now purchase comprehensive solutions tailored to use cases and industries.
Features and programs
Financing for AWS Marketplace purchases
Pricing
Free trial
Dimension | Cost/hour |
|---|---|
c7g.xlarge Recommended | $0.10 |
c7g.medium | $0.03 |
t4g.medium | $0.03 |
t4g.large | $0.05 |
c7g.large | $0.05 |
m7g.large | $0.05 |
r7g.large | $0.05 |
m7g.xlarge | $0.10 |
c7g.2xlarge | $0.15 |
c7g.4xlarge | $0.20 |
Vendor refund policy
FerroDruid software charges are metered by AWS Marketplace; stop or terminate the EC2 instances running the AMI to stop all charges (you pay only for instance-hours run). Already-incurred usage is generally non-refundable. If billed in error or a defect prevented normal use, contact aws-support@abyo.net within 30 days and we will review; warranted refunds are processed through AWS Marketplace.
How can we make this page better?
Legal
Vendor terms and conditions
Content disclaimer
Delivery details
64-bit (Arm) Amazon Machine Image (AMI)
Amazon Machine Image (AMI)
An AMI is a virtual image that provides the information required to launch an instance. Amazon EC2 (Elastic Compute Cloud) instances are virtual servers on which you can run your applications and workloads, offering varying combinations of CPU, memory, storage, and networking resources. You can launch as many instances from as many different AMIs as you need.
Version release notes
FerroDruid v1.5.1 - legacy-Druid migration compatibility, aimed at migrating older Apache Druid deployments. New in 1.5.1: FerroDruid now reads the v1 numeric column serdes (long, double, float) that Apache Druid version 27 and earlier write for the time and metric columns, so ferrodruid-migrate attach and import-druid-metadata work on segments from a genuinely old Druid deployment (reverse-engineered clean-room and verified byte-exact against real Druid 27.0.0 dump-segment); Druid 31 and 35 reading is unchanged. Also in the 1.5.x line: (1) cross-engine hyperUnique read - FerroDruid now decodes Apache Druid's built-in classic-HLL hyperUnique distinct-count metric column (present in every Druid version, the standard before DataSketches), so hyperUnique native queries and SQL APPROX_COUNT_DISTINCT over such a column return estimates that match real Druid; verified against Druid 31.0.2 with the native double estimate bit-exact across single-row, rollup-folded, and multi-segment segmentations and the rounded SQL estimate exact. (2) Opt-in legacy null mode (useDefaultValueForNull, default off) that switches to Apache Druid version 27 and earlier default null semantics - string null equals empty string, numeric null becomes zero - across filters, aggregations, groupBy, COUNT DISTINCT, SQL rendering, and ingestion; verified with a legacy-versus-ANSI difference battery against real Druid 27.0.0 and 31.0.2; with the flag off, behaviour is byte-identical to the ANSI default. (3) Attach and import from S3 deep storage - ferrodruid-migrate attach --deep-storage s3://... and import-druid-metadata for an s3_zip loadSpec now stream segment artifacts directly from a Druid deployment on S3, with no local pull-first step; verified end-to-end against a real AWS S3 tree written by Druid 31.0.2. Carried forward from 1.4.0: attach an existing Druid on-disk segment v9 deployment (local or S3) so it becomes query-visible; import a Druid segment metadata table from PostgreSQL, MySQL, or SQLite; write segments in Druid's on-disk v9 format that Druid reads back (long and single-value string columns); durable Kafka and Kinesis supervisors; native batch index for local and inline JSON/CSV/TSV; and Druid segment reading of SQL-null numerics, longEncoding auto, nullable 64-bit integers above 2^53 exactly, multi-value string dimensions, and thetaSketch columns. Standing capabilities: single-binary mode runs one process - no JVM, no ZooKeeper, no external metadata database required - that boots in under a second on under 200 MB of RAM; 8/8 native query types; 40+ Druid-compatible REST endpoints; approximately 95 percent core Druid SQL parity; reads real Apache Druid segment v9 (verified against segments written by Druid 31.0.2 and 35.0.1); durable Kafka and Kinesis supervisors (PLAINTEXT or SASL_SSL/TLS) plus native batch; deep-storage persistence with fail-loud SHA-256 integrity and bootstrap reload; Basic auth (Argon2id) with RBAC on by default and TLS via rustls. Source available under the Business Source License 1.1 (github.com/abyo-software/ferrodruid; each release converts to Apache-2.0 four years after publication). Known limitations, including the migration scope, legacy-null coverage, and hyperUnique estimator scope, are published in docs/known-limitations.md. Metered automatically by AWS per instance-hour (no metering code in the AMI).
Additional details
Usage instructions
Launch the self-contained FerroDruid AMI on EC2 (Graviton/arm64). The instance boots one process (single-binary mode) directly - no additional template or orchestration is required - with SQLite metadata and local-filesystem deep storage. Run it behind an Application Load Balancer, terminate TLS at the ALB, and do not expose the service port directly to the internet. Basic auth (Argon2id) plus RBAC are on by default, and a one-time admin password is written to the instance system journal on first boot (retrieve it with sudo journalctl -u ferrodruid or from the EC2 system log). Point your Druid clients (REST API, native query JSON, Druid SQL, or an Apache Superset connector) at the load balancer endpoint. The supported topology is single-binary single-node; multi-node configurations fail closed by default. See docs/known-limitations.md.
Support
Vendor support
Support for FerroDruid is provided by abyo software LLC. Email aws-support@abyo.net for support; we respond under the published SLA.
AWS infrastructure support
AWS Support is a one-on-one, fast-response support channel that is staffed 24x7x365 with experienced and technical support engineers. The service helps customers of all sizes and technical abilities to successfully utilize the products and features provided by Amazon Web Services.