Skip to content

Best tools for Kafka data masking

Comparisons
Chad Harris·September 22, 2026·14 min read

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. 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. The page sits inside the complete Kafka guide and the Kafka stream governance topic.

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.

How to score a Kafka data masking tool

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, our 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 we could verify, so this criterion is scored on where the cost sits, not on a number.

F1 Write-time or view-time masking kafka-data-masking-tools
Write-time (Connect SMT, client, proxy, stream processor) View-time (a management UI such as Kpow)
What is stored on the topic The masked or encrypted value The original value, unchanged
What consumers read The masked or encrypted value, unless they hold a decryption key The original value, subject only to their Kafka ACLs
What people browsing see The masked value, in every tool The masked value, in that UI only
Can it be undone later Only for reversible schemes such as encryption with a retained key Yes, by changing the policy, because the data was never altered
Where the masking runs decides what it protects. Most regulated topologies use one of each.

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.

Tool Placement What it protects against Schema integrity Where the latency cost lands Who can see unmasked data Source
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
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
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
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
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
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
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
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
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
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
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

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

factorhouse.io

26 out of 40 Total

Listed first because it is our product. Scores are unadjusted.

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
8 out of 10
Where latency cost lands
8 out of 10

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.

Rank 2

31 out of 40 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
10 out of 10
Where latency cost lands
5 out of 10

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.

Rank 3

Confluent client-side field level encryption

confluent.io

27 out of 40 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
4 out of 10
Where latency cost lands
4 out of 10

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.

Rank 4

Kafka Connect MaskField

kafka.apache.org

26 out of 40 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
7 out of 10
Where latency cost lands
6 out of 10

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

Conduktor Console

conduktor.io

26 out of 40 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
7 out of 10
Where latency cost lands
8 out of 10

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.

Rank 6

Lenses

lenses.io

24 out of 40 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
6 out of 10
Where latency cost lands
8 out of 10

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.

Rank 7

21 out of 40 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
5 out of 10
Where latency cost lands
8 out of 10

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.

Rank 8

kafka.apache.org, flink.apache.org

20 out of 40 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
5 out of 10
Where latency cost lands
5 out of 10

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

Conduktor Gateway

conduktor.io

20 out of 40 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
5 out of 10
Where latency cost lands
4 out of 10

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.

Rank 10

AKHQ

akhq.io

20 out of 40 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
4 out of 10
Where latency cost lands
8 out of 10

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.

Rank 11

Kroxylicious

kroxylicious.io

15 out of 40 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 out of 10
Where latency cost lands
4 out of 10

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.

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. Our 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 Admin, 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 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 view-time masking on live data

Explore Kpow's data inspection in a live environment, the surface where its data policies hide fields from the people browsing.

For platform and security teams who have to show who can do what.

Try the Kpow demo

FAQ

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.

Related reading