Apache Kafka gives enterprise applications a way to exchange events, retain them, and process them independently. Getting that infrastructure installed, understood, and operated is a separate engineering problem. My involvement in building Krate has focused on that practical layer: packaging, orchestration, monitoring, identity, and the instructions that make those pieces usable together.

Krate is a collaborative project. A mate built parts of the original setup, and my contributions build on that foundation and on the upstream projects we use. The useful question is what an operator can actually install, inspect, recover, and maintain.

Why Apache Kafka matters for enterprise applications

Consider an order accepted by a business application. Fulfilment, inventory, notifications, and reporting may each need that event. Kafka lets those consumers work independently, rather than making the original request wait for every downstream service. Retained events also give applications a way to replay data within the configured retention window. Apache Kafka’s introduction explains these publish, retain, and process capabilities.

This supports event-driven architecture, real-time data pipelines, and integration between systems that change at different speeds. Kafka Connect provides a framework for moving data between Kafka and external systems; Kafka Streams provides stream-processing capabilities. Those are part of the Kafka ecosystem, rather than services Krate automatically supplies. Kafka’s API overview separates their responsibilities.

The current interest in real-time data also extends to AI applications. Confluent’s 2026 Data Streaming Report, based on 4,625 IT leaders, reports that 88% rank data streaming as a high investment priority. It is a vendor-sponsored survey, so I treat it as industry context, not evidence of Krate’s adoption or performance. Streaming can keep downstream data fresher; application design still determines whether that data is useful.

My contribution: making Kafka deployment repeatable

An early contribution was consolidating build and packaging steps into a Makefile-driven workflow. Architecture selection, Docker packages, image handling, and validation needed a consistent entry point.

Later, I contributed digest-pinned images and release manifests. The package records image identities, platform information, and archive checksums. That gives an operator something concrete to verify when transferring a bundle to a disconnected VM.

I also worked on the single-command operating workflow. Today, ./krate handles setup, startup, packaging, installation, and upgrades for the active KRaft and EPC editions, with Make underneath. The ZooKeeper edition remains frozen. The upgrade path separates release files from site settings, certificates, and stored data. A new extraction directory should not accidentally mean an empty cluster.

Offline Kafka deployment has to include the host

Krate’s current packages target Ubuntu and RHEL VMs, with x86_64 and ARM64 builds. A connected machine prepares the images and installation files; the destination can then load them without downloading those images again.

That workflow still depends on disk space, OS dependencies, network settings, and the correct architecture. The doctor command checks prerequisites before installation, but the target machine needs its own validation. A checksum confirms the transferred archive matches the expected bytes. A healthy container confirms only part of the deployment.

KRaft is also part of the current deployment picture. Kafka 4.x uses KRaft instead of ZooKeeper for cluster metadata management. Krate’s active KRaft and EPC editions follow that approach, while its ZooKeeper edition remains frozen for existing users.

The supplied brokers also share one host. A failure of that VM takes the whole cluster offline. The two-node EPC coordination topology needs both nodes available. Those limits belong in the deployment decision, before anyone describes the result as highly available.

Kafka monitoring should make failures visible

My work on broker-outage alerts changed how outages are detected. The alerts now compare the live broker count against the configured topology, so a prolonged outage continues to alert. Regression tests covered firing at 70 and 180 minutes and clearing after recovery or an intentional topology change.

That is the kind of monitoring detail that matters during an incident. Operators need to distinguish a stopped broker, a growing consumer backlog, and a host running out of disk.

The monitoring transition is gradual. Grafana and Loki remain in place, alongside Perses, VictoriaLogs, and Alertmanager. Fluent Bit collects logs for the parallel paths. I am treating replacement as a phased change with checks, rather than calling Grafana removed while it still serves the deployment.

SSO and Kafka client security are separate responsibilities

A browser login protects access to a management interface. It does not configure authentication or encryption for the applications connecting to Kafka.

Krate’s documented defaults still use plaintext Kafka listeners without client authentication. UI HTTPS does not change that. Secure remote application access needs its own listener configuration, credentials, permissions, and network controls.

My identity work includes the Keycloak foundation: local users, database TLS, secret rotation, backup, restore, and admin recovery. The operating model keeps SSO as an explicit setup step. For support access, the goal is a read-only L1/L2 role with deliberately limited visibility and a separate administrative path.

Grafana and Perses integration with the Krate realm is still in progress. Session expiry, Linux isolation and outage recovery still need final runtime testing before I can call that work complete.

Reliability and performance need application-level decisions

Kafka supports ordered records within a partition and transactional processing across Kafka topics. End-to-end effects in an external database or service need coordination with that destination. Retrying a payment API is different from retrying a Kafka write. Kafka’s delivery-semantics documentation explains that boundary.

Performance also depends on the workload. Message sizes, partition keys, batching, compression, acknowledgements, storage, and consumer processing all affect the result. I would establish a representative workload and measure throughput, tail latency, lag, and recovery behaviour before making capacity claims. Producer configuration exposes several of those tradeoffs, including idempotence and acknowledgement settings.

What building Krate has involved

The practical work has been connecting the basic layers: a repeatable package, an understandable command flow, useful failure checks, recoverable identity, and documentation that names the limits.

Kafka provides the event-streaming foundation. My contribution to Krate is helping make the surrounding operational work more explicit and repeatable, together with the other contributors. That is the basis on which further integrations should be built.

Smart warehouse
Smarter warehouse