ANKAA (GitHub - ualsweb/ankaa: Real-time time-series engine for Arm servers. Stream in, query in milliseconds. MQTT, Kafka, NATS in; SQL, Arrow Flight, Postgres and Python out. Rust, Apache-2.0. · GitHub, Apache-2.0) is a real-time time-series engine for aarch64 Linux; it also builds and runs on x86-64. It ingests live streams (MQTT, Kafka, NATS, exchange feeds, files), keeps recent data in columnar chunks behind a write-ahead log, compresses history with Vortex, and serves SQL through Apache DataFusion over Arrow Flight, Flight SQL and the Postgres protocol.
The parts that may interest Rust people:
- SVE2 on stable Rust through
global_asm!(the SVE intrinsics are nightly-only). The kernels are vector-length agnostic and differential-tested against scalar and NEON under QEMU at 128/256/512 bits, and on real Neoverse V2 (Google Axion). The honest result: at 128-bit vectors NEON was faster for all kernels but one, so the engine picks per kernel at run time. - A write-ahead log that went through 1,000 simulated power cuts (dm-flakey) without losing an acknowledged record. The first version of the rig passed instantly, and that was the bug:
drop_writesmakes writes succeed without reaching the device. unsafeconfined to four crates (SIMD, the SPSC ring, two small syscall wrappers); every other crate is#![forbid(unsafe_code)]. The ring is checked with loom models and a herd7 litmus test, the rest under Miri (docs/unsafe-policy.md).- Parallel ingest that must equal the one-thread result: a proptest feeds the same messages through N mapping workers and through one thread and compares rows, refusals and dictionary ids.
It is pre-alpha (0.2) and openly AI-assisted but with a personal profile of a Telecommunications Engineer that worked in Product Development and Firmware and Software Engineering for more than 15 years: I design it, review every change, write the tests that gate it and own the result. Measurements exist only as single-VM runs published with their scripts; no general performance claim is made.
To try it without building anything: examples/factory runs a simulated MQTT plant with Grafana (docker compose up -d).
Feedback I'm after: the global_asm! approach, and whether the unsafe policy has a hole you can see.
1 post - 1 participant


