The best tools for Kafka audit logging depend on which layer you need evidence from. At the broker, Kafka’s own kafka.authorizer.logger, Confluent Server audit logs, Apache Ranger’s audit and the managed-service logs from Amazon MSK and Google Cloud record authorization decisions. At the control plane, the audit logs in Kpow, AKHQ, Kafbat UI, Klaw and Conduktor record what people did through those tools. Data lineage, through OpenLineage-based tooling, answers where data went. Kpow is Factor House’s product, and I work at Factor House as a Solutions Architect, so it is scored on the same rubric and the same sources as every other option.
Apache Kafka ships no audit log as such. It ships an authorizer that can log its decisions, and everything else is built by tools around it. The Kafka security architecture guide covers audit alongside encryption, authentication and authorization as the four pillars. This page is about choosing the tools that produce audit evidence. For the wider governance picture, see Kafka stream governance and the complete Kafka guide.
What an audit logging tool has to do
A data platform engineer looking for Kafka audit tooling wants three things: tracking of who did what across the control and data plane, collection that does not load the brokers, and storage an auditor will accept. Those become the five criteria every option below is scored on.
1. Layer covered. Does the tool record broker authorization decisions, actions taken by people in a tool, or data movement? Each layer answers a different auditor question, and no single tool covers all three.
2. Reads as well as writes. A record of who deleted a topic is table stakes. Regulated teams also get asked who looked at a sensitive topic’s data. Sandy Yang, a staff engineer on TD’s Event Streaming Platform, described in her talk with us how TD grants data inspect access through a ServiceNow form, scoped for an hour or two, and said plainly: “This gives TD an audit trail.” A tool that logs mutations but not queries cannot produce that evidence.
3. The real identity. Does the record name the person, or a shared credential? When someone works through a Kafka UI, the broker sees the UI’s own principal. Tom Crowley, our founding engineer, explains this to customers asking how Kpow relates to ACLs: ACLs are “assigned to Kpow’s AdminClient connection”, while users are authorized by Kpow’s RBAC. The broker’s log will therefore show the tool’s service account for every action any user takes. Only the tool’s own audit log can say which person it was.
4. Overhead on the brokers. Audit that has to be switched on at DEBUG level on every broker is audit most teams switch off again. Collection that happens outside the broker request path costs the cluster nothing.
5. Retention and export. Can the trail be kept for as long as your regulator requires, and shipped to your SIEM or immutable storage? An audit log you can only browse in the tool for a week is a troubleshooting aid, not evidence.
There is a reason this matters in regulated environments that goes beyond access. Discussing retry topics with our team, I pointed out that on a SOC 2 audit, auditors “will want to ensure for example, that the data on the topic is exactly how the producing service intended it to be (i.e. no other person/process was able to put malicious data that could be used to hide financial crime etc)”. That makes the produce actions of people, not just their admin changes, part of what the audit log has to show.
Three layers of Kafka audit
Broker authorization. Every Kafka request passes the authorizer, and the authorizer can log each decision to kafka.authorizer.logger. In Apache Kafka’s StandardAuthorizer, denied requests are logged at INFO and allowed requests at DEBUG, and the default log4j2.yaml sets that logger to INFO, writing to kafka-authorizer.log:
- name: kafka.authorizer.logger
level: INFO
So an out-of-the-box broker records denials only. Raising the level to DEBUG records allowed operations too, at the cost of a line per authorized request. The sources are the StandardAuthorizer code and the default log4j2 config.
Control plane. Tools that people use to change or read Kafka, such as UIs and self-service portals, keep their own audit logs. This is the layer that records the person, the request and its outcome in one place. The figure above sets it against the broker log. Tom made the case for this layer in 2021, writing about temporary access (now covered in break-glass access with temporary policies) about production fixes done the old way: a jump host that “generally has full access to the Kafka cluster, and there is no audit log recording the actions being committed.”
Data plane and lineage. Which producers wrote to a topic and which jobs consumed from it is lineage, not audit, but auditors increasingly ask for both. OpenLineage is the open standard here, a specification for events about datasets, jobs and runs. It tells you where data flowed, not who clicked what.
Options by layer
Rank 1 Kpow
37 out of 50 Total
Listed first because it is our product. Scores are unadjusted.
- Layer
- Control plane
- Audit topic
- __oprtr_audit_log
- In-app view
- Last seven days
- Layer covered
- 6 out of 10
- Reads as well as writes
- 7 out of 10
- Real identity
- 9 out of 10
- Broker overhead
- 8 out of 10
- Retention and export
- 7 out of 10
Layer. Control plane. Covered in the Factor House section below.
Source. Kpow data governance (audit log).
Compare Kpow vs AKHQKpow vs Kafbat UI
Rank 2 Kafbat UI
34 out of 50 Total
- Layer
- Control plane
- Default level
- ALTER_ONLY
- Layer covered
- 6 out of 10
- Reads as well as writes
- 7 out of 10
- Real identity
- 8 out of 10
- Broker overhead
- 8 out of 10
- Retention and export
- 5 out of 10
What it is. An open-source Kafka UI.
Covers. Operations done in the UI, to a Kafka topic, the console or both. Its audit level is ALTER_ONLY by default, and ALL also logs read operations.
Weaknesses. The audit topic has no keys, so its docs warn it must not be compacted, and reading it is up to you.
Source. Kafbat UI audit log.
Compare Kpow vs Kafbat UIAKHQ vs Kafbat UIConduktor vs Kafbat UIKafbat UI review
Rank 3 Conduktor Console
conduktor.io
33 out of 50 Total
- Layer
- Control plane
- Type
- Commercial Kafka console
- Layer covered
- 6 out of 10
- Reads as well as writes
- 4 out of 10
- Real identity
- 8 out of 10
- Broker overhead
- 8 out of 10
- Retention and export
- 7 out of 10
What it is. A commercial Kafka console. Conduktor’s documentation, audit logs page, says Console audit events can be browsed and filtered in the UI and exported from a Kafka topic in CloudEvents format, with event types such as topic delete carrying the topic’s prior state.
Source. Conduktor’s documentation (not linked).
Amazon MSK logs and CloudTrail
31 out of 50 Total
- Layer
- Broker and API
- Delivery
- CloudWatch Logs, S3, Data Firehose
- Layer covered
- 7 out of 10
- Reads as well as writes
- 6 out of 10
- Real identity
- 4 out of 10
- Broker overhead
- 6 out of 10
- Retention and export
- 8 out of 10
What it is. MSK can deliver broker and authorizer logs to CloudWatch Logs, S3 or Data Firehose, and its API calls, such as cluster changes, go to CloudTrail.
Strengths. Delivery to durable AWS storage is configuration, not code.
Weaknesses. MSK only, and the same principal limitation.
Source. Amazon MSK logging.
Rank 5 Google Cloud Managed Service for Apache Kafka
30 out of 50 Total
- Layer
- Service API
- Logs
- Admin activity, data access
- Layer covered
- 6 out of 10
- Reads as well as writes
- 7 out of 10
- Real identity
- 5 out of 10
- Broker overhead
- 6 out of 10
- Retention and export
- 6 out of 10
What it is. Cloud Audit Logs for the managedkafka.googleapis.com service, split into admin activity and data access logs.
Weaknesses. Google Cloud only, and data access logs must be enabled.
Rank 6 AKHQ
29 out of 50 Total
- Layer
- Control plane
- Default
- Off
- Layer covered
- 6 out of 10
- Reads as well as writes
- 2 out of 10
- Real identity
- 8 out of 10
- Broker overhead
- 8 out of 10
- Retention and export
- 5 out of 10
What it is. An open-source Kafka UI.
Covers. Its audit docs list topic creation, config change, partition increase and deletion, producing and deleting records, emptying topics, consumer group offset changes and deletes, schema changes and connector changes. Reading data is not in that list.
Strengths. Events go to a Kafka topic on a cluster you nominate.
Weaknesses. Off by default, no reads, and no UI for reading the trail, so you build the consumer.
Source. AKHQ audit configuration.
Rank 7 28 out of 50 Total
- Layer
- Control plane
- Type
- Self-service portal
- Layer covered
- 5 out of 10
- Reads as well as writes
- 2 out of 10
- Real identity
- 9 out of 10
- Broker overhead
- 8 out of 10
- Retention and export
- 4 out of 10
What it is. An open-source self-service portal.
Covers. An audit of all topic, ACL, schema and connector requests and their approvals.
Weaknesses. It records requests made in Klaw, not direct changes or data reads.
Source. Klaw.
Rank 8 Confluent Server audit logs
confluent.io
27 out of 50 Total
- Layer
- Broker
- Scope
- Confluent Platform only
- Layer covered
- 6 out of 10
- Reads as well as writes
- 6 out of 10
- Real identity
- 3 out of 10
- Broker overhead
- 5 out of 10
- Retention and export
- 7 out of 10
What it is. Confluent Platform’s audit logging, built on the Confluent Server Authorizer. Confluent’s documentation, Audit Log Concepts page, says audit logs record “the runtime decisions of the permission checks” for ACLs and RBAC into Kafka topics, as CloudEvents, and are enabled by default.
Weaknesses. Confluent Platform only, and like any broker log it sees principals rather than the people behind a tool.
Source. Confluent’s documentation (not linked).
Compare Apache Kafka vs Confluent Kafka
Rank 9 Apache Ranger audit
26 out of 50 Total
- Layer
- Broker
- Requires
- Ranger as your authorizer
- Layer covered
- 6 out of 10
- Reads as well as writes
- 6 out of 10
- Real identity
- 3 out of 10
- Broker overhead
- 5 out of 10
- Retention and export
- 6 out of 10
What it is. Ranger’s Kafka plugin replaces the authorizer, and Ranger centralises auditing of access decisions across the platform.
Strengths. One audit store for Kafka and the rest of a Hadoop-style data platform.
Weaknesses. You adopt Ranger as your authorizer to get it.
Sources. Apache Ranger, plugin source.
Rank 10 Apache Kafka authorizer log
24 out of 50 Total
- Layer
- Broker
- Default output
- Denials only, at INFO
- Layer covered
- 7 out of 10
- Reads as well as writes
- 6 out of 10
- Real identity
- 3 out of 10
- Broker overhead
- 3 out of 10
- Retention and export
- 5 out of 10
What it is. The kafka.authorizer.logger output of whichever authorizer you run.
Covers. Broker decisions, reads and writes, by principal.
Strengths. Free, complete for the protocol, and the only record of requests from clients that never touch a tool.
Weaknesses. Denials only by default, the principal is whatever authenticated, and at DEBUG the volume grows with request rate, so it needs a log pipeline to be useful.
Source. Apache Kafka source, above.
Factor Platform lineage
16 out of 50 Total
- Layer
- Lineage
- Status
- Early access
- Layer covered
- 5 out of 10
- Reads as well as writes
- 1 out of 10
- Real identity
- 1 out of 10
- Broker overhead
- 5 out of 10
- Retention and export
- 4 out of 10
What it is. Our unified control plane for Kafka, Flink and Iceberg, currently in early access, which maps governance metadata embedded in Avro and JSON schemas to OpenLineage dataset facets. The approach is written up in data lineage support in Factor Platform.
Covers. The lineage layer, not user actions.
Tools compared
| Tool | Layer | Reads as well as writes | Real identity | Broker overhead | Retention and export | Source |
|---|---|---|---|---|---|---|
| Kafka authorizer log | Broker | Yes at DEBUG. Denials only at the default INFO | Connection principal only | Grows with request rate at DEBUG | Log files you ship yourself | Apache Kafka source |
| Confluent Server audit logs | Broker | Authorization decisions for protected actions | Principal | Runs in the broker | Kafka topics, then sink connectors | Confluent's documentation (not linked) |
| Apache Ranger | Broker | Access decisions | Principal | Runs in the broker plugin | Ranger's audit store | ranger.apache.org |
| Amazon MSK | Broker and API | Authorizer logs, API calls in CloudTrail | Principal or IAM identity | Managed by AWS | CloudWatch, S3, Firehose | AWS docs |
| Google Managed Kafka | Service API | Admin activity and data access logs | Google identity | Managed by Google | Cloud Logging | Google Cloud docs |
| Kpow | Control plane | Yes. Mutations always, data queries through the webhook's query setting | The user from your IdP, with the RBAC decision | None. Outside the broker path | Internal Kafka topic, webhooks to Slack, Teams or any endpoint. UI shows seven days | Kpow docs |
| AKHQ | Control plane | Writes only | The logged-in user | None | Kafka topic you nominate | AKHQ docs |
| Kafbat UI | Control plane | Writes by default, reads with level ALL |
The logged-in user | None | Kafka topic or console | Kafbat docs |
| Klaw | Control plane | Requests and approvals | The requester and approver | None | Klaw's database | GitHub |
| Conduktor Console | Control plane | Console events | The logged-in user | None | UI and a Kafka topic in CloudEvents | Conduktor's documentation (not linked) |
| OpenLineage tooling | Lineage | Data flow, not access | Jobs and datasets | Depends on emitter | Lineage backend | openlineage.io |
Read the table by column rather than by row. The identity column splits cleanly: broker-layer tools record principals and control-plane tools record people. A complete audit story takes one from each, alongside the permission models in Kafka RBAC tools, plus a rule that people do not hold broker credentials directly, so that everything they do passes through a tool that records it.
How Factor House approaches it
Kpow records every user action in an audit log retained in an internal Kafka topic, __oprtr_audit_log, and shows it in the UI. The audit log documentation shows what one record holds: the request itself, the user’s identity from the authentication provider, whether the user was authorized, the RBAC policies that were evaluated, and the action the request required. That last part is what lets an auditor see not just that a topic was created, but which policy allowed it.
For delivery, the webhook integration posts audit records as JSON to Slack, Microsoft Teams or any HTTP endpoint, which is how teams route them into a SIEM. Verbosity is set to mutations, queries or both, so data inspect queries can go to the same place as changes. Staged mutations and temporary policies, compared with other approval controls in Kafka destructive operations tools, land in the same log, so an approved break-glass grant and everything done under it sit in one trail. Jaehyeon Kim, on our team, walks through wiring this into Slack in real-time audit trail for Kafka via webhooks.
The trail needs no new infrastructure. It is a Kafka topic on a cluster you already run, inside your own network, so the audit data never leaves your environment on its way to your SIEM.
Where Kpow does not win: the in-app audit view shows the last seven days, so long-term retention is your audit topic’s retention settings plus whatever the webhook feeds. It records actions taken through Kpow, not requests from other clients, so keep the broker authorizer log for everything else. For how audit, RBAC and tenancy combine for shared clusters, see Kpow multi-tenancy.
To see the surface this log covers, open the Kpow demo and explore data inspect and the topic and consumer group screens on a live cluster. Data queries and the actions on those screens are the two event types the audit log and webhook record in your own deployment.
Product demo · 3 min
Apache Kafka audit logging: Kpow demo
Chad Harris walks through audit logging in Kpow: how every meaningful action is recorded on a Kafka topic you can inspect directly, tracing an entry back to the exact query and data it exposed, and forwarding audit events to Slack, Teams, or a SIEM via webhook.
Kpow live demo
See a Kafka audit trail in action
Explore Kpow in a live environment and see the operations its audit log records against the person who ran them.
For platform and security teams who have to show who can do what.
Try the Kpow demoFAQ
Does Apache Kafka have audit logging?
Not as a dedicated feature. The authorizer logs its decisions to kafka.authorizer.logger, with denials at INFO and allowed requests at DEBUG, and the default config writes denials only to kafka-authorizer.log. Audit of what people did comes from the tools they use.
How do I see who deleted a Kafka topic?
If the delete came through a tool with an audit log, that log names the user. If it came from a client directly, enable DEBUG on the authorizer logger beforehand, since allowed operations are not logged at the default level, and the record will name the principal that authenticated.
Can Kafka audit logs record who read a topic’s data?
At the broker, the authorizer log at DEBUG records allowed fetch requests by principal. In tools, it depends: Kpow’s webhook can include data queries, Kafbat UI logs reads at audit level ALL, and AKHQ’s audit events cover changes only.
Where should Kafka audit logs be stored for compliance?
Somewhere with retention set by your regulatory requirement and restricted write access, typically a SIEM or object storage fed from a Kafka topic. Keep the audit topic itself on restrictive ACLs so the trail cannot be edited by the people it records.