Zerobus went GA on February 23rd. Connector ecosystem: empty. I run NiFi for security telemetry so I built the processor myself. Apache 2.0, source on GitHub.
NiFi uses NAR packaging โ each archive gets its own classloader. The Zerobus Java SDK is JNI over a compiled Rust binary. When Rust spawns native threads via AttachCurrentThread, they inherit the system classloader, not the NAR one. You get NoClassDefFoundError at runtime even though the class is sitting right there in the NAR.
Fix: put the SDK JAR on NiFiโs system classpath (lib/) on top of bundling it in the NAR. The Dockerfile handles it.
Other things worth knowing before you start:
ALL_PRIVILEGES on the catalog does nothing. Zerobus uses fine-grained OAuth scoping โ only explicit MODIFY + SELECT on the target table works. Inherited grants are ignored.
ARM64 wonโt work out of the box. SDK ships linux-x86_64 native libs only. Needs --platform linux/amd64 and Rosetta.
The endpoint needs https:// prefix or the SDK canโt parse the workspace ID. Error message wonโt point you there.
Architecture: one persistent gRPC stream per processor instance, reused across all FlowFile batches. Stream auto-recovers on disconnect. Three routing paths: success, failure for non-retriables like schema mismatch, retry for transient errors.
Full writeup with diagrams, all six gotchas, and monitoring queries:
https://dere.la/posts/zerobus-nifi-ingest/
Processor source (Apache 2.0):
https://github.com/us3r/nifi-zerobus-bundle
If you found this useful, letโs connect:
https://www.linkedin.com/in/mariusz-derela-30649a69