Kafka data masking tools hide the value of sensitive fields such as card numbers, emails and dates of birth, either before a record is written or when a person views it. Where the masking runs decides what it protects against.
The realistic options are the Kafka Connect MaskField transform, Kryptonite for Kafka, Confluent’s client-side field level encryption, redaction in Kafka Streams or Flink, the Conduktor Gateway and Kroxylicious proxies, and view-time masking in Kpow, Kafbat UI, AKHQ, Conduktor Console and Lenses. The page sits inside the complete Kafka guide and the Kafka stream governance topic.
At a glance
Eleven options are scored here on this page's four weighted criteria, 100 points in all. The rubric is weighted: Schema integrity counts three times, Where latency cost lands counts five times, and What placement protects against and Who can see unmasked data count once. The five listed first, of eleven, each out of 100: Kpow data policies 74, which takes its best score on Schema integrity (8 out of 10) and its lowest on What placement protects against (4 out of 10); Kryptonite for Kafka 71; Lenses 68; Kafka Connect MaskField 64; Kafbat UI 63, Cost: Free.
Where to mask sensitive data in Kafka
Apache Kafka has no masking at the broker. The broker stores and serves bytes, and the authorization layer decides who can read a topic, not which fields they see. Every masking option therefore sits somewhere in the path around the broker, and each placement protects against something different.
At ingestion, in Kafka Connect. A Single Message Transform rewrites a field as a record passes through a connector. The Apache transform is MaskField, which the Kafka Connect user guide describes as replacing a field with “a valid null value for the field type (i.e. 0, false, empty string, and so on)”, or with a custom string or numeric replacement:
transforms=mask
transforms.mask.type=org.apache.kafka.connect.transforms.MaskField$Value
transforms.mask.fields=card_number,date_of_birth
This protects against the plaintext ever reaching the broker, for data that arrives through that connector.
In the producer or consumer client. A serializer encrypts selected fields before the record leaves the application and decrypts them for consumers that hold the key. This protects against anyone with broker or disk access, including administrators, reading the field.
In a proxy between clients and brokers. A Kafka protocol proxy intercepts produce and fetch requests and masks, tokenizes or encrypts on the way through, without code changes in every producer. This protects against exposure to clients that connect through the proxy.
In a stream processor. A Kafka Streams or Flink job reads the raw topic and writes a redacted copy for wider consumption. This protects the downstream topic’s readers, while the source topic stays sensitive.
In a management UI, at view time. The record on the topic is untouched and the UI redacts fields before showing them to a person. This protects against over-exposure to engineers who browse or search production data. It does not change what is stored, and it does not change what consumers read.
If you are still establishing which topics carry regulated fields and who can read them today, how to find and mask PII in Kafka topics walks through finding every field that carries PII, choosing where to mask it and proving the masking holds.
The options
- Ingestion: the Kafka Connect MaskField transform, and Kryptonite for Kafka’s CipherField transform.
- Client: Confluent client-side field level encryption (CSFLE), and Kryptonite’s UDFs and HTTP service.
- Proxy: Conduktor Gateway, and Kroxylicious with its record encryption filter.
- Stream processing: redaction jobs in Kafka Streams or Apache Flink.
- View time: Kpow data policies, Kafbat UI masking, AKHQ masking, Conduktor Console data masking and Lenses data policies.
Kafka data masking tools compared
Same fields for every option, taken from each tool’s own documentation.
| Rank | Tool | Placement | What it protects against | Schema integrity | Where the latency cost lands | Who can see unmasked data | Source |
|---|---|---|---|---|---|---|---|
| 1 | Kpow data policies | View time, server-side in Kpow | People inspecting data or running ksqlDB queries in Kpow | Redacts inside Avro, Protobuf, JSON, Transit and EDN, falling back to full redaction when a rule cannot apply | Only when a query runs | Nobody through Kpow while a policy applies, apart from topics you exclude. Consumers are unaffected | Kpow data policies docs |
| 2 | Kryptonite for Kafka | Ingestion (SMT), stream processing (ksqlDB and Flink UDFs), or a Kroxylicious proxy filter | Plaintext on the broker, with decryption for key holders | Deterministic AES-SIV for keys, and format-preserving FF3-1 encryption | Wherever the SMT, UDF or filter runs, per record | Holders of the encryption keys | Kryptonite README |
| 3 | Confluent CSFLE | Producer and consumer clients | Anyone without key access, including administrators | Encrypts selected fields, so the field holds ciphertext rather than a value of its original format | Producer and consumer, per record | Clients granted access to the key encryption keys | Confluent documentation, CSFLE overview |
| 4 | Kafka Connect MaskField | Ingestion, in a connector | Plaintext reaching the broker through that connector | Keeps the field’s type by substituting a type-valid null or a replacement value | Connect worker, per record | Nobody downstream. Irreversible | Kafka Connect guide |
| 5 | Lenses | View time | People using Lenses interfaces | Redaction by field name across topics, Postgres tables and Elasticsearch indices | Only when data is viewed | Nobody, including admins, until the policy changes | Lenses documentation, Data policies |
| 6 | Kafbat UI | View time, in its backend | People browsing messages in Kafbat UI | Remove, replace or mask on JSON fields matched by name or regex | Only when messages are viewed | Nobody through the UI. No per-role override yet | Kafbat UI masking docs |
| 7 | Kafka Streams or Flink redaction | Stream processor writing a masked copy | Readers of the downstream topic | Whatever your code produces | The processing job, per record | Readers of the source topic | Kafka Streams DSL, Flink operators |
| 8 | AKHQ | View time | People browsing records in AKHQ | Regex replacement, or JSON field masking with one filter per topic | Only when records are viewed | Nobody through the UI. Policies are global | AKHQ configuration docs |
| 9 | Kroxylicious | Proxy between clients and brokers | Data at rest on the broker, as record encryption | Whole-record encryption, not field masking | The proxy, per request | Clients that fetch through the proxy | Kroxylicious docs |
| 10 | Conduktor Gateway | Proxy between clients and brokers | Consumers reading through Gateway | Masking, tokenization and field-level encryption interceptors | The proxy, per request | Clients not covered by the interceptor, and anyone bypassing the proxy | Conduktor documentation, data security interceptors |
| 11 | Conduktor Console | View time | People consuming messages in Console | Masking rules on dot-separated field paths. Mask-all keeps types valid | Only when messages are viewed | Users or groups you exclude from a policy | Conduktor documentation, Kafka data masking and PII protection |
Each option in detail
Every entry has the same four parts: what it is, where it masks, the strongest case for it, and where it falls short.
Rank 1 Kpow data policies
74 out of 100 Total
Try Kpow in the live demo No signup needed.
- Placement
- View time, server-side in Kpow
- Applies to
- Data Inspect and ksqlDB results
- What placement protects against
- 4 out of 10
- Who can see unmasked data
- 6 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 8 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 8 out of 10
Why these scores for Kpow data policies
- What placement protects against 4 out of 10
- Covers people in Data Inspect and ksqlDB results only; “does not change what is stored or what consumers read”.
- Who can see unmasked data 6 out of 10
- Bypass resistance (String SerDes removed, audit log omits values) but no per-role exemption; “Conduktor Console can”, so it scores higher.
- Schema integrity 8 out of 10
- The page’s summary says it “scores highest on schema handling... of the UI tools”, with nested redaction across five formats and a full-redaction fallback.
- Where latency cost lands 8 out of 10
- The cost lands “Only when a query runs”.
What it is. Declarative redaction for Kpow’s Data Inspect and ksqlDB query results, set in a YAML file with DATA_POLICY_CONFIGURATION_FILE.
Where it masks. Server-side in Kpow, before results reach the browser.
Strongest case. Twelve redaction functions, from full redaction and SHA-512 hashing to show-last-four and show-email-host, applied to keys, values and headers, including inside nested structures. When a function cannot apply to a field, such as show-last-four on a map, Kpow falls back to full redaction rather than guessing. Because a raw deserializer could bypass redaction, String SerDes are removed from Data Inspect while policies are active, and since release 95.4 the Auto deserializer only falls back to String after it has ruled out every structured format.
Where it falls short. It is view-time masking, so it hides data from people browsing and does not change what is stored or what consumers read. The documented policy model is keyed by cluster, topic and record part, with per-topic exclusions, not by role, so it cannot show one team the real value and another team the masked one on the same topic. Conduktor Console can.
Staying patched. Kpow’s release notes name the CVEs each release remediates, and the 96.4 image built on 5 August 2026 bundles 311 dependencies of which one carries a high or critical advisory, none of them published before that release. That is not a claim to patch faster than a community project: Kpow’s own dependency remediation has run from 14 to 128 days, and the current image still ships CVE-2026-75595 in netty, a 9.1 critical public since 19 August 2026, unpatched. What a licence buys here is not a different deployment model, because Kpow is self-hosted too. It is a company contracted to ship the fix. Every dependency figure on this page was read on 24 September 2026 from the published artefacts and from nvd.nist.gov.
Kryptonite for Kafka
71 out of 100 Total
- Placement
- SMT, UDF, HTTP service or proxy
- Maintained by
- Community
- What placement protects against
- 8 out of 10
- Who can see unmasked data
- 8 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 10 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 5 out of 10
Why these scores for Kryptonite for Kafka
- What placement protects against 8 out of 10
- It keeps plaintext off the broker while key holders can still decrypt, so the data is “protected rather than destroyed”, which covers disks, consumers and browsing.
- Who can see unmasked data 8 out of 10
- Only holders of the encryption keys see the real value, so access follows key grants.
- Schema integrity 10 out of 10
- It uses deterministic AES-SIV for keys and FF3-1 format-preserving encryption, and the page’s summary says it “scores highest on schema integrity among the open-source options”.
- Where latency cost lands 5 out of 10
- The cost lands wherever the SMT, UDF or filter runs, per record, and criterion 4 cites its key-encryption write-path trade-off.
What it is. A community project for field-level cryptography, which its README describes as an “UNOFFICIAL community project”.
Where it masks. In a Kafka Connect SMT called CipherField, in ksqlDB and Flink UDFs, in a Quarkus HTTP service, or as a pair of Kroxylicious proxy filters.
Strongest case. It is the only open-source option here that addresses schema integrity directly, with deterministic AES-SIV for keys and FF3-1 format-preserving encryption that keeps a field’s format and length. Key holders can decrypt, so the data is protected rather than destroyed.
Where it falls short. It is encryption, so it brings key management with it, and it is maintained by the community rather than a vendor.
Staying patched. The GitHub API returns no licence identifier for Kryptonite for Kafka, so this page makes no claim about its licence. It has ten releases and was last pushed in August 2026. It performs the encryption itself, which puts its release cadence inside your cryptographic dependency chain rather than beside it.
Rank 3 Lenses
lenses.io
68 out of 100 Total
- Placement
- View time, in Lenses interfaces
- Covers
- Kafka, Postgres, Elasticsearch
- What placement protects against
- 4 out of 10
- Who can see unmasked data
- 6 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 6 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 8 out of 10
Why these scores for Lenses
- What placement protects against 4 out of 10
- Its policies “apply to Lenses interfaces only”, so applications processing the data have full access.
- Who can see unmasked data 6 out of 10
- The page’s summary says “Lenses is the strictest”, with no escape even for admins, but there is no per-group exemption, so it sits below Conduktor Console.
- Schema integrity 6 out of 10
- It redacts by field name across topics, Postgres tables and Elasticsearch indices, with no format handling or fallback named.
- Where latency cost lands 8 out of 10
- Redaction runs “Only when data is viewed”.
What it is. Data policies in Lenses that redact by field name.
Where it masks. In Lenses interfaces, across Kafka topics, Postgres tables and Elasticsearch indices.
Strongest case. The strictest view-time model. Its documentation says governance “is global and applies to all users”, with no way to escape a policy even as an admin, and it shows which applications use each affected dataset.
Where it falls short. Its documentation also says applications processing the data have full access to it, because the policies apply to Lenses interfaces only.
Compare Kpow vs Lenses.ioConduktor vs LensesAKHQ vs LensesKafbat UI vs LensesLenses.io review
Rank 4 Kafka Connect MaskField
64 out of 100 Total
- Placement
- Ingestion, in a connector
- Ships with
- Apache Kafka Connect
- What placement protects against
- 6 out of 10
- Who can see unmasked data
- 7 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 7 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 6 out of 10
Why these scores for Kafka Connect MaskField
- What placement protects against 6 out of 10
- Keeps plaintext off the broker, so browsing, consumers and disks are all covered, but “only protects data that enters through that connector”.
- Who can see unmasked data 7 out of 10
- Masking here is one-way, “Nobody downstream. Irreversible”, and it “cannot give some readers the real value and others a masked one”, so there are no exemptions.
- Schema integrity 7 out of 10
- It keeps the field’s type with a type-valid null or replacement, and no deterministic or format-preserving mode is named.
- Where latency cost lands 6 out of 10
- The cost lands on the Connect worker, per record, and the page’s summary calls it “the cheapest” write-path choice, with “no new system”.
What it is. A transform that ships with Apache Kafka Connect, with $Key and $Value variants.
Where it masks. In the Connect worker, as records pass through one connector.
Strongest case. No new system. For a CDC source pulling a table that contains a column nobody downstream needs, it keeps that column’s real value off the broker entirely.
Where it falls short. It only protects data that enters through that connector, and the masked value is gone for good. It cannot give some readers the real value and others a masked one.
Rank 5 Kafbat UI
63 out of 100 Total
- Placement
- View time, in its backend
- Cost
- Free
- What placement protects against
- 4 out of 10
- Who can see unmasked data
- 4 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 5 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 8 out of 10
Why these scores for Kafbat UI
- What placement protects against 4 out of 10
- It covers people browsing messages in Kafbat UI, at view time only.
- Who can see unmasked data 4 out of 10
- There is “No per-role override yet”, and issue #1311 has been open since September 2025 with no bypass guard named.
- Schema integrity 5 out of 10
- It can remove, replace or mask JSON fields matched by name or regex, with no other formats named.
- Where latency cost lands 8 out of 10
- Masking happens “Only when messages are viewed”.
What it is. The open-source Kafka web UI’s built-in masking.
Where it masks. In the application backend, in its service/masking package, before messages reach the page.
Strongest case. Free, with remove, replace and mask policies selected by field name or regex, and topic patterns for keys and values.
Where it falls short. Policies apply to every viewer. A request to let RBAC-allowed users see unmasked values, issue #1311, has been open since September 2025.
Staying patched. Kafbat UI released v1.5.0 in April 2026 and has not shipped since. In the 157 days since, at least 20 high or critical advisories have been published against libraries that release bundles, including the same netty critical CVE-2026-75595 that the current Kpow image carries. Only 150 of its 266 bundled jars resolved to a Maven coordinate, so that count is a floor and the state of the release itself is unmeasured. Kafbat does publish a security policy, which AKHQ and Kafdrop do not, and the one CVE filed against its own code, CVE-2025-49127, was already fixed in the release that preceded the advisory. Six releases in two years.
Compare Kpow vs Kafbat UIAKHQ vs Kafbat UIConduktor vs Kafbat UIKafbat UI vs LensesKafbat UI review
Rank 6 AKHQ
60 out of 100 Total
- Placement
- View time
- Cost
- Free
- What placement protects against
- 4 out of 10
- Who can see unmasked data
- 4 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 4 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 8 out of 10
Why these scores for AKHQ
- What placement protects against 4 out of 10
- Only people browsing records in AKHQ are covered, and only at view time.
- Who can see unmasked data 4 out of 10
- Every viewer sees the same thing, since “Policies are global” and “Masking does not vary by viewer”, and no bypass guard is named.
- Schema integrity 4 out of 10
- It supports only one JSON filter per topic, and with RecordNameStrategy there is “no way to tell record types apart”.
- Where latency cost lands 8 out of 10
- The work happens “Only when records are viewed”.
What it is. The open-source UI’s data masking, configured under akhq.security.data-masking.
Where it masks. In AKHQ, when records are displayed.
Strongest case. Free, with a regex mode for any payload and JSON modes that mask by default or show by default.
Where it falls short. Its documentation notes that only one JSON filter per topic is supported, and that with RecordNameStrategy there is no way to tell record types apart. Masking does not vary by viewer.
Staying patched. AKHQ has no CVE filed against its own code, and that is the wrong number to plan against. Release 0.28.0, cut on 6 August 2026, bundles 270 libraries and 18 of them carry a high or critical advisory. Sixteen were already public, with fixed versions already on Maven Central, on the day it shipped, and five are netty advisories Kpow had remediated three weeks earlier in 96.2: CVE-2026-44249, CVE-2026-45416, CVE-2026-45674, CVE-2026-47691 and CVE-2026-50010. The oldest has been open 108 days. That is exposure and remediation latency rather than a working attack, and every figure resolves against the published jar and nvd.nist.gov. Four releases in two years, and no security policy at any path GitHub reads.
Compare Kpow vs AKHQAKHQ vs Kafbat UIAKHQ vs LensesAKHQ review
Rank 7 Confluent client-side field level encryption
confluent.io
51 out of 100 Total
- Placement
- Producer and consumer clients
- Documented for
- Confluent Enterprise
- What placement protects against
- 10 out of 10
- Who can see unmasked data
- 9 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 4 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 4 out of 10
Why these scores for Confluent client-side field level encryption
- What placement protects against 10 out of 10
- It gives “The strongest protection against broker-side exposure on this page”, and the page’s summary says it “scores highest on protection from administrators”.
- Who can see unmasked data 9 out of 10
- Only clients granted access to the key encryption keys see the value, so no user or application in Confluent Enterprise reads the fields in plaintext.
- Schema integrity 4 out of 10
- Encryption means “the field holds ciphertext rather than a value of its original format”, and Flink and ksqlDB cannot operate on the encrypted fields.
- Where latency cost lands 4 out of 10
- It runs in the producer and the consumer, per record, so the cost lands on both sides of every client.
What it is. Confluent’s client-side field level encryption, documented for Confluent Enterprise, which encrypts selected fields in the client using key encryption keys held in your KMS.
Where it masks. In the producer and consumer. Confluent’s overview says no user or application in Confluent Enterprise can read the encrypted fields in plaintext.
Strongest case. The strongest protection against broker-side exposure on this page, with the customer holding the key encryption keys.
Where it falls short. The same documentation says stream processing with Flink and ksqlDB on the encrypted data is not possible, because it cannot be decrypted to perform operations. Every producer and consumer needs the right configuration and key access.
Kafka Streams or Flink redaction
kafka.apache.org, flink.apache.org
50 out of 100 Total
- Placement
- Stream processor writing a masked copy
- What placement protects against
- 5 out of 10
- Who can see unmasked data
- 5 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 5 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 5 out of 10
Why these scores for Kafka Streams or Flink redaction
- What placement protects against 5 out of 10
- It protects readers of the downstream topic only, and “the source topic stays sensitive”.
- Who can see unmasked data 5 out of 10
- Readers of the source topic still see the real value, leaving “two topics to govern”.
- Schema integrity 5 out of 10
- The output is “Whatever your code produces”, and the logic is yours to “keep in step with schema changes”.
- Where latency cost lands 5 out of 10
- The cost sits in the processing job, per record, off the producer and consumer path.
What it is. A processing job you write that reads a sensitive topic and publishes a redacted one.
Where it masks. In the job, between two topics.
Strongest case. Full control, and a clean pattern for publishing a safe copy of a sensitive stream to a wider audience.
Where it falls short. You now have two topics to govern, and the source topic still needs its own access controls. The masking logic is yours to write, test and keep in step with schema changes.
Rank 9 Kroxylicious
37 out of 100 Total
- Placement
- Proxy between clients and brokers
- Licence
- Apache License 2.0
- What placement protects against
- 5 out of 10
- Who can see unmasked data
- 3 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 3 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 4 out of 10
Why these scores for Kroxylicious
- What placement protects against 5 out of 10
- It covers data at rest on the broker and “protects the stored bytes, not the view a legitimate reader gets”.
- Who can see unmasked data 3 out of 10
- Every client that fetches through the proxy sees the value, because “Record encryption is not field masking”.
- Schema integrity 3 out of 10
- It is “Whole-record encryption, not field masking”, so there is no field-level schema handling.
- Where latency cost lands 4 out of 10
- The proxy takes the cost, per request, in the path of every client that uses it.
What it is. An open-source Kafka protocol proxy under the Apache License 2.0, per its GitHub repository.
Where it masks. In the proxy, through a record encryption filter that its documentation describes as “encryption-at-rest for Apache Kafka”.
Strongest case. An open-source proxy option for keeping readable data off broker disks.
Where it falls short. Record encryption is not field masking. It protects the stored bytes, not the view a legitimate reader gets.
Staying patched. Kroxylicious is Apache-2.0 and actively developed, twenty-nine releases, with one published CVE: CVE-2024-8285 from August 2024, a TLS upstream verification flaw. It is a proxy in the data path, so an unpatched advisory in it is an unpatched advisory in front of every client.
Rank 10 Conduktor Console
conduktor.io
72 out of 100 Total
- Placement
- View time, in Console
- What placement protects against
- 4 out of 10
- Who can see unmasked data
- 7 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 7 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 8 out of 10
Why these scores for Conduktor Console
- What placement protects against 4 out of 10
- Masks only “within Console at runtime”; “view-time only, like every UI”.
- Who can see unmasked data 7 out of 10
- Exemptions can be per user or group, which means “That beats Kpow and every open-source UI here on who can see unmasked data”, though Flink SQL results bypass masking.
- Schema integrity 7 out of 10
- Rules work on dot-separated field paths and “Mask-all keeps types valid”, but it sits below Kpow, which the page’s summary names highest among UIs.
- Where latency cost lands 8 out of 10
- Masking runs “Only when messages are viewed”.
What it is. Data masking policies in Conduktor’s web UI.
Where it masks. In Console. Conduktor’s page says data “will only be masked within Console at runtime for specified users/groups only, the underlying Kafka data remains unchanged.”
Strongest case. Per-viewer control. A policy can exclude users or groups, so an owning team sees the real value while everyone else sees it masked. That beats Kpow and every open-source UI here on who can see unmasked data.
Where it falls short. The same page warns that its Flink SQL workbench reads topic data directly, so masking policies do not apply to Flink statement results. It is view-time only, like every UI.
Compare Conduktor vs Kafbat UIConduktor vs LensesConduktor review
Rank 11 Conduktor Gateway
conduktor.io
46 out of 100 Total
- Placement
- Proxy between clients and brokers
- What placement protects against
- 6 out of 10
- Who can see unmasked data
- 5 out of 10
- Schema integrity ×3 weight, this criterion counts 3 times toward the total
- 5 out of 10
- Where latency cost lands ×5 weight, this criterion counts 5 times toward the total
- 4 out of 10
Why these scores for Conduktor Gateway
- What placement protects against 6 out of 10
- It protects consumers reading through Gateway and needs no code changes, though “Only traffic routed through Gateway is covered”.
- Who can see unmasked data 5 out of 10
- Clients not covered by the interceptor still see the value, as does anyone bypassing the proxy.
- Schema integrity 5 out of 10
- It gives masking, tokenization and field-level encryption interceptors, and no format-preserving or deterministic property is stated.
- Where latency cost lands 4 out of 10
- The cost lands on the proxy, per request, because it “sits in the request path of every client that uses it”.
What it is. Conduktor’s Kafka protocol proxy, configured with interceptors.
Where it masks. In the proxy. Conduktor’s data security reference lists a data masking interceptor for the job “Hide sensitive fields from consumers”, alongside encryption, tokenization and crypto shredding.
Strongest case. Consumer-facing masking without changing producer or consumer code, which matters most to teams running hundreds of services.
Where it falls short. Only traffic routed through Gateway is covered, and the proxy sits in the request path of every client that uses it.
Compare Conduktor review
Which placement to choose
Scored against the four criteria, the answer is usually two tools, not one.
If the threat is plaintext on the broker, mask or encrypt in the write path. MaskField is the cheapest when a field is never needed downstream. Kryptonite scores highest on schema integrity among the open-source options. Confluent CSFLE scores highest on protection from administrators if you run Confluent, at the cost of stream processing on those fields. A proxy such as Conduktor Gateway suits teams that cannot touch hundreds of producers.
If the threat is engineers seeing too much while they debug production, mask at view time. On who can see unmasked data, Conduktor Console scores highest because exemptions can be per group, and Lenses is the strictest. Kpow scores highest on schema handling and bypass resistance of the UI tools, with nested redaction across five formats, the String SerDes guard and the full-redaction fallback. Kafbat UI and AKHQ cover the basics for free.
For regulated data the usual design is both, and the Kafka governance tools for financial services comparison sets masking beside the access, change and audit controls that DORA, PCI DSS and GDPR ask for. Write-path controls keep the value off the broker where nobody needs it, and view-time masking covers the topics where people do need to look at records to fix a failed payment.
How Factor House approaches Kafka data masking
Kpow treats masking as one of three controls that decide what a person sees. RBAC decides whether a role can inspect a topic at all, through the TOPIC_INSPECT action. Multi-tenancy decides which topics a role can even see. Data policies decide what the fields look like for everyone who gets that far. The combination gives three levels of access, no access, masked or full, where full is reached by excluding a topic from redaction, not by exempting a person. The Kafka multi-tenancy page shows the three working together.
A policy that shows only the last four digits of card fields on every topic looks like this:
policies:
- name: Credit Card
category: PII
resources:
- ["cluster", "*", "topic", "*", "value"]
redaction: ShowLast4
type: non-scalar
fields: [credit_card, creditcard, pan]
Kpow includes a Data policy sandbox under Settings, Data policies, for testing a policy against sample records before it goes live. Every user action is recorded in the audit log, and Kpow is self-hosted, so records and policies stay inside your own infrastructure.

Kpow Settings, Data policies sandbox: the ShowLast4 redaction is set on the credit_card field against a test JSON record, with the Execute policy button below it.
Kpow does not alter records on the topic, and it does not mask anything for consumer applications. Pair it with a write-path control, MaskField, Kryptonite or client-side encryption, for any field that no reader needs in plaintext, and with Kafka ACLs so that the only people reading sensitive topics are reading them through a tool that masks. For the access model underneath, RBAC roles covers role design, the Kafka RBAC tools comparison scores the layers that enforce it, and what is envelope encryption? covers the encryption side.
Kpow live demo
See how Data Inspect reports masking
Open the Kpow demo, switch the cluster picker from MSK Secondary to MSK Primary, and query airline.cdc.public.passenger in Data Inspect, the view Kpow's data policies redact. Its Context panel reads Data policies applied: 0, because the demo has no data policies configured, so it shows the records a policy would act on and cannot show masking itself.
For platform and security teams who have to show who can do what.
Try the Kpow demoFAQ
Does Apache Kafka have built-in data masking?
Not at the broker. The only masking that ships with Apache Kafka is the Kafka Connect MaskField transform, which replaces named fields as records pass through a connector. Everything else comes from clients, proxies, stream processors or management tools.
Does masking in a Kafka UI protect the data on the topic?
No. UI masking in Kpow, Kafbat UI, AKHQ, Conduktor Console or Lenses hides fields from people viewing records in that tool. The stored record and what consumer applications read are unchanged.
What is the difference between masking and field-level encryption in Kafka?
Masking replaces a value so the reader sees a redacted version, and write-time masking cannot be undone. Field-level encryption, such as Confluent CSFLE or Kryptonite, stores ciphertext that key holders can decrypt. Encryption protects against broker and disk access, masking at view time protects against over-exposure to people.
Can different users see different masking on the same Kafka topic?
Conduktor Console supports that by excluding users or groups from a policy. Kpow, Kafbat UI, AKHQ and Lenses apply masking to every viewer of a topic, and Kpow controls which roles can reach the topic at all through RBAC and tenants.
How these tools were scored
Four criteria, taken from the constraints engineers raise when they evaluate masking against GDPR, HIPAA or PCI DSS obligations.
1. What the placement protects against. Access to a topic and visibility inside a record are separate controls, and requirement lists tend to name both. One requirements list that Derek Troy-West, Factor House’s co-founder and CEO, relayed from a prospect had them as two separate lines: segregating access to PII, PCI and HIPAA data from other data, and masking specific fields such as social security numbers and dates of birth. The first is an authorization question. The second is masking, and the answer depends on whether the threat is a person browsing, a consumer application, or someone with the disks. Score each tool on which of those threats its placement covers.
2. Who can still see unmasked data. Every masking layer has a population that sees the real value, and a set of side doors. Audit logs are one of those side doors, because a log that records what a user did can record the data they did it with. That is why Kpow’s audit log leaves the record key and value out of data produce events. The Kafka audit logging tools comparison covers what each tool’s trail records. Score each tool on who is exempt from masking, whether exemptions can be per role or group, and which secondary surfaces (query text, logs, raw deserializers, other tools) could leak the value.
3. Schema integrity. Downstream consumers, Schema Registry and analytics jobs break if a masked field changes type or shape. Format-preserving or deterministic schemes keep the field usable, for example so a masked customer ID still joins across topics. The same problem hits view-time masking in reverse. A redaction rule can only apply to a field the tool can parse, and Kpow shipped a fix this year for masking policies that had been blocking the inspection of simpler data types, so policies apply across serializers without breaking deserialization. Score each tool on whether masked output still validates against the schema and whether keys stay deterministic.
4. Where the latency cost lands. Masking in the write path costs CPU on every record, in the producer, the Connect worker or the proxy. Masking at view time costs work only when someone runs a query. The Kryptonite for Kafka documentation gives a concrete example of a write-path trade-off: its default probabilistic encryption produces a different ciphertext each time, so applying it to a record key would send records with the same original key to different partitions, and it recommends deterministic AES-SIV for keys to keep partitioning and ordering intact. None of the tools below publishes a throughput figure this page could verify, so this criterion is scored on where the cost sits, not on a number.
Every option is scored from 0 to 10 on each criterion, from the evidence and sources this page cites, and the reason for each score is on its card. The criteria are weighted: What placement protects against counts once, Who can see unmasked data counts once, Schema integrity counts three times and Where latency cost lands counts five times, for a total out of 100. Where latency cost lands counts five times and Schema integrity three times here, because this page is written for teams adding masking to a Kafka deployment that is already in production, where a control that costs throughput on every record is the control that gets switched off. What placement protects against and who can see unmasked data count once each, and those two are where the encryption and proxy options on this page score highest. This page is published by Factor House, which makes Kpow data policies. Every option is scored on the same rubric and the same sources: Kpow data policies's per-criterion scores are set the same way as every other option's and are not adjusted, and the weights apply to every option alike. Kpow data policies ranks first on its total of 74 out of 100. The other options follow by total. Conduktor Console is listed last whatever its total; on its total of 72 it would place second. Conduktor Gateway is listed last whatever its total; on its total of 46 it would place tenth.