> ## Documentation Index
> Fetch the complete documentation index at: https://docs.conduktor.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Kafka topics — browse, produce, and consume in Console

> Browse, create, and manage Kafka topics in Conduktor Console. Filter by cleanup policy, view partition details, and produce or consume messages.

## Topic list

The Topic page lets you search for any topic on your currently selected Kafka cluster.

<Note>
  To restrict user/group access to view or manage certain topics, [configure RBAC](/guide/conduktor-in-production/admin/set-up-rbac).
</Note>

Multiple search capabilities can be combined to help you find to the topic you want faster.

**Filtering** is possible on:

* Topic name
* Show/Hide Internal topics (starts with `_`)
* Show/Hide Kafka stream topics (ends with `-repartition` or `-changelog`)
* Cleanup policy
* Labels (click on a label to add/remove it from the filters. [Find out about managing topic labels](#manage-topic-labels)).

**Sorting** is possible on all columns.

**Active columns** can be picked from a list of available columns from the **Edit columns** option.

<Info>
  Your current **filters**, active **sort**, and **visible columns** are stored in your browser's local storage for each Kafka cluster and persist across sessions.
</Info>

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-list.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=b9bf764f51bdc1dfcb6335dfd36d7222" alt="Topics" width="5422" height="3045" data-path="images/topic-list.png" />

## Operations

Several actions are also available from the topic List: create, empty or delete topics and add partitions.

### Create topic

In the **Create Topic** page, you can provide all the necessary information to create a topic.

<Info>
  The default choices made by <Tooltip tip="A user interface for managing and monitoring Kafka infrastructure, supporting Kubernetes deployment.">Console</Tooltip> are generally safe for most typical Kafka production deployments. [Find out about choosing the replication factor and partition count](https://www.conduktor.io/kafka/kafka-topics-choosing-the-replication-factor-and-partitions-count/) <Icon icon="up-right-from-square" /> and [Kafka cleanup policies](https://www.conduktor.io/kafka/kafka-topic-configuration-log-compaction/) <Icon icon="up-right-from-square" />.
</Info>

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-create.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=738adeb6d536bd3b45b7c583843ce385" alt="Create topic" style={{width: "400px"}} width="1396" height="1190" data-path="images/topic-create.png" />

**Start from template**

If your platform team has defined [topic templates](/guide/reference/self-service-reference#topictemplate), pick one from **Start from template** to pre-fill the form with a vetted set of defaults. You can change any value before you create the topic. A template may include `{{placeholder}}` values, such as a team name — replace them before you submit.

**Topic name**

As per [Kafka specification](https://github.com/apache/kafka/blob/08c437d25e74d63f11ae3f184dfb3889d4639ece/clients/src/main/java/org/apache/kafka/common/internals/Topic.java#L49-L62) <Icon icon="up-right-from-square" />, topic name must only contain the following characters `[a-zA-Z0-9._-]` and not exceed 249 characters.

**Partitions**

This lets you define how scalable your topic will be for your consumers. In general you want a multiple of your number of brokers.

Default: `3`

**Replication factor**

This configuration helps prevent data loss by writing the same data to more than one broker.

Default: `min (3, number of brokers)`

<Info>
  Use the [Insights dashboard](/guide/insights/risk-analysis) to identify topics with low replication factors or partition distribution issues that may pose risks to your infrastructure.
</Info>

**Cleanup policy**

The cleanup policy (along with its associated advanced configurations) controls how the retention of your messages is done.

**Labels**

Use labels to organize your topics and facilitate searching them in Console. Each label is a key-value pair.

**Advanced configuration**

Enable this option to use all the available options.

[Find out more about the Apache Kafka topic configuration](https://kafka.apache.org/documentation/#topicconfigs) <Icon icon="up-right-from-square" />

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-create-advanced.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=8b8b9270c13e8cc136448d8519854104" alt="Advanced create topic" style={{width: "450px"}} width="1380" height="1174" data-path="images/topic-create-advanced.png" />

### Add partitions

Increase the number of partitions for your topic. Number of partitions cannot be decreased.

<Warning>
  Adding partitions reshuffles the target partition of messages with a given key. Existing data will stay on the previous partition. Consumers that rely on partition ordering could be impacted.
</Warning>

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-add-partitions.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=54e72e419efcd213b67a71e0062b4660" alt="Add partitions" style={{width: "400px"}} width="912" height="614" data-path="images/topic-add-partitions.png" />

### Empty topic

This lets you delete all records from a topic. This operation is permanent and irreversible.

If you want to only delete all records from given partition, there's a dedicated operation on the partitions tab of the topic detail.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-empty.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=100bae6b73a0b9393190b6e555a97de0" alt="Empty topic" style={{width: "400px"}} width="1174" height="396" data-path="images/topic-empty.png" />

### Delete topic

This lets you delete the topic from Kafka. This operation is permanent and irreversible.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-delete.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=6b019e2f8964d5c1c25cfcc43e7b8750" alt="Delete topic" style={{width: "400px"}} width="1170" height="606" data-path="images/topic-delete.png" />

### Manage topic labels

You can help categorize your topics further using key-value pairs called labels.

To manage your topic's labels via the UI, click on the topic and **Edit** from the topic details view.

<img src="https://mintcdn.com/conduktor/Kbwb2r5-pp_mR-Oq/images/label-edit.png?fit=max&auto=format&n=Kbwb2r5-pp_mR-Oq&q=85&s=eb2d38b3dbb302f2b0d1af88b30f3071" alt="Label edit" style={{width: "400px"}} width="1302" height="316" data-path="images/label-edit.png" />

A side bar will appear with the current tags associated with the topic and a button to add more. To remove a label, click on the trash icon.

<img src="https://mintcdn.com/conduktor/Kbwb2r5-pp_mR-Oq/images/label-new.png?fit=max&auto=format&n=Kbwb2r5-pp_mR-Oq&q=85&s=ecee4673d7670b761021f3152b599dfc" alt="Label new" style={{width: "400px"}} width="948" height="614" data-path="images/label-new.png" />

# Topic produce overview

* [Configure producer](#configure-producer)
* [Produced messages panel](#produced-messages-panel)
* [Operations](#operations)

The produce page lets you configure all the details necessary to produce a record in your current Kafka topic.

It is already configured with [sensible defaults](#sensible-defaults) that you can customize if necessary.

## Configure producer

Each section from the accordion menu will allow you to configure the Kafka producer further: key, value, headers, flow and additional options.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-accordion.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=8b4c86a6f689b9170a55f41d4f367e89" alt="Produce accordion" width="2524" height="2088" data-path="images/produce-accordion.png" />

### Key and value

This section is similar for both key and value. The menu lets you choose your serializer to encode your message.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-serializers.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=2b5b5d52396a32d01a6d699c7f6615a7" alt="Produce serializers" style={{width: "300px"}} width="1034" height="950" data-path="images/produce-serializers.png" />

The default serializer is **String**, unless you have a matching subject name in your schema registry (with the **TopicNameStrategy**).

In that case, the serializer will be set automatically to the proper registry type (Avro, Proto, Json Schema) with the subject name of `<topic-name>-key` for the key and `<topic-name>-value` for the value.

### Confluent subject strategies

When producing messages with a schema registry, Conduktor supports Confluent subject strategies, providing control over how schemas are referenced. This gives users flexibility in schema organization and naming conventions, enabling support for different strategies based on your use case (TopicName, RecordName, TopicRecordName strategies).

You can configure these strategies directly from the produce page when working with topics that use schema registry.

#### Random data generator

Click **Generate once** to generate a message that conforms to the selected serializer.

This works with schema registry serializers as well:

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-random-data-gen.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=35d35d8dd6144a0b536e21d2a6173e7e" alt="Produce random data" style={{width: "400px"}} width="1564" height="702" data-path="images/produce-random-data-gen.png" />

### Headers

This section lets you add headers to your message.

Header key and header value both expect valid UTF8 string.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-headers.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=a0ef43b89b45c129edb0b2f497236d0b" alt="Produce headers" style={{width: "400px"}} width="964" height="392" data-path="images/produce-headers.png" />

### Flow

Using the flow mode, you can produce multiple records in one go or configure a live producer that will produce records at a configurable rate.

**Send N records at a time**

Define how many messages should be produced every time you click **Produce**.

Default: 1
Range: \[1, 10]

**Generate random key/value**

Enable this option to generate a different message each time you click **Produce**.

When enabled, it will override the key or value configured above and will rely on the random data generator to produce messages (same as if you clicked **Generate once** before producing a record).

When disabled, the producer will use the Key/Value configured above

Default: disabled

**Producer mode**

Manual mode starts a single Kafka produce each time you click the **Produce**.

Automatic mode starts a long running process that batches several Kafka produce.

**Interval (ms):**

The interval between each produce batch in milliseconds.

Range: \[1000, 60000]
Stop conditions: The first met condition stops the producer

* **Number of records produced**
* Stops the producer after that many records have been produced.
* Range: \[0, 1000000]
* **Elapsed time (ms)**
* Stops the producer after a set period of time.
* Range: \[0, 60000]

Here's an example of a produce flow that will generate a batch of 10 records, every second for a minute. Uses the same key but a random value (based on the Avro schema linked to the topic) for every record:

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-flow-mode.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=c46b5676e8b2e2f4b8da1e2e3b8f68ce" alt="Produce flow mode" style={{width: "400px"}} width="964" height="1470" data-path="images/produce-flow-mode.png" />

### Additional options

**Force partition**

This option lets you choose the partition where to produce your record.

If set to **all**, it will use the [DefaultPartitioner](https://github.com/apache/kafka/blob/3.7/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java) <Icon icon="up-right-from-square" /> from KafkaClient 3.6+

* StickyPartitioner when Key is null or `Utils.murmur2(serializedKey) % numPartitions` otherwise.

Default: all

**Compression type**

This option lets you compress your record(s) using any of the available [CompressionType](https://github.com/apache/kafka/blob/3.7/clients/src/main/java/org/apache/kafka/common/record/CompressionType.java) <Icon icon="up-right-from-square" /> from the KafkaClient

Default: none

**Acks**

This lets you change the `acks` property of the producer.

[Learn more about Kafka producer acks](https://www.conduktor.io/kafka/kafka-producer-acks-deep-dive/) <Icon icon="up-right-from-square" />.

Default: all

### Sensible defaults

The following are pre-configured by default:

* If you have connected a schema registry and there's a subject named `<topic-name>-key` and `<topic-name>-value`, the serializers will be populated automatically to the right type (Avro/Protobuf/JsonSchema); otherwise, the `StringSerializer` will be picked.
* A single header `app.name=Conduktor` will be added

## Produced messages panel

Kafka records produced through this screen will be available from the produced message panel, which acts similarly as the consume page, allowing you to review your produced record and check the key, value, headers and metadata.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-messages-panel.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=e4a3392d9e44693cd1e8da9537de7b29" alt="Produced messages" width="2884" height="1766" data-path="images/produce-messages-panel.png" />

Click on a record to see its content and metadata:

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-messages-panel-single.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=71adae1396757118b990d6b5777a4857" alt="Messages panel" width="1904" height="902" data-path="images/produce-messages-panel-single.png" />

## Operations

### Import CSV

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-import-csv-button.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=f438f301afa5ca6b526280b9593e92d0" alt="Produce import CSV" width="1372" height="842" data-path="images/produce-import-csv-button.png" />

This feature lets you produce a batch of Kafka records based on a CSV file.

The three required inputs are: the key and value serializer and the input file itself.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-import-csv.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=27237e808951ee5da534eb9db37216b4" alt="Produce import" style={{width: "400px"}} width="1178" height="1136" data-path="images/produce-import-csv.png" />

The file has to have this structure:

* named headers `key` and `value` must be present. Additional columns will be ignored.
* the separator must be `;`
* double-quoting a field `"` is optional unless it contains either `"` or `;`, then it's mandatory
* escape double-quotes by doubling them `""`

Examples

```undefined theme={null}
# Null key (empty)
key;value
;value without key

# Unused headers
topic;partition;key;value
test;0;my-key;my-value

# Mandatory Double quoting
key;value
order-123;"item1;item2"

# Json data
key;value
order-123;"{""item1"": ""value1"", ""item2"":""value2""}"
```

Click **Import** to start the process. While in progress, you'll see a loading state. Once the import is finished, you'll get a summary message.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-import-csv-success.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=df62c97783ab24e0b22572bbf7e508d2" alt="Produce import CSV success" style={{width: "400px"}} width="1174" height="1300" data-path="images/produce-import-csv-success.png" />

### Save and load producer templates

If you are regularly using the same set of producer configuration, you can save your current settings as a template for reuse.

At the bottom of the produce page, click **Save** and enter the name for this template. Click **Load** to see the available templates.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/produce-templates.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=36385eb7e7eb66cc5ab6e9333da95ffa" alt="Produce templates" style={{width: "400px"}} width="922" height="340" data-path="images/produce-templates.png" />

Use this list to add or rename your templates.

## Topic partitions

The **Partitions** tab shows all the partition information associated with the topic. You can switch from the default **Per partition** view to the **Per broker** view.

The **Per partition** view show data available for each partition:

* Total number of records (estimated using EndOffset - BeginOffset)
* Partition size
* Begin and end offsets
* Broker Ids of the partition leader (green) and followers (grey)

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/per-partition.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=30783d96a24b644b06f60f9fc48737e3" alt="Per partition" width="2542" height="1000" data-path="images/per-partition.png" />

The **Per broker** view pivots the data to show for each broker:

* partitions where the broker is Leader
* partitions where the broker is Follower

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/per-broker.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=f993ac69618c9b3617ad99029fb31ef4" alt="Per broker" width="2542" height="1000" data-path="images/per-broker.png" />

### Empty Partition

In the **Per partition** view, you can click on the trash icon to remove the Kafka records from this specific partition.

<Note>
  If you need to delete all records from all partitions, click `...` above the per partition/per broker switch and select **Empty topic**.
</Note>

## Topic linked resources

If you need to find related resources, your can use one of the following tabs to display all the Kafka resources associated to this specific topic.

### Linked consumer groups

The topic consumer groups tab displays the consumer groups associated to the current topic.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-consumers.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=dc6d13800d299396fb81389b95c38870" alt="Topic consumers" width="2542" height="930" data-path="images/topic-consumers.png" />

### Linked schema registry subjects

The **Schema** tab shows the key subject and value subject associated to your topic, assuming you've defined them using [TopicNameStrategy](https://docs.confluent.io/cloud/current/sr/fundamentals/serdes-develop/index.html#how-the-naming-strategies-work) <Icon icon="up-right-from-square" />.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-subjects.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=57b5c2bfe251ae80992e9e4c01b56538" alt="Topic subjects" width="2542" height="1926" data-path="images/topic-subjects.png" />

### Linked ACLs

The **ACL** tab displays the list of Kafka permissions associated with the current topic.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-acls.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=b2b5c27791483a312ef5fea5f2042cdf" alt="Topic ACLs" width="2542" height="1096" data-path="images/topic-acls.png" />

<Warning>
  Only the permissions from the default Kafka authorizer implementation AclAuthorizer available using AdminClient are listed. If you're using one of Console's other supported ACLs (Aiven, Confluent Cloud), we recommend using the dedicated service account page instead.
</Warning>

## Topic graphs

When you browse any topic details page, you'll see the associated graphs for this topic:

* produce and consume rate
* number of records
* disk usage

Graphs can be visualized over 24 hours, 7 or 30 day periods.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-graphs.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=0391c90068efb28f9d5b3909be8d5e83" alt="Topic graphs" width="3600" height="1696" data-path="images/topic-graphs.png" />

You can create an alert for each metric.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-create-alert.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=55d9eefe3ee705f18515df2b9b0b42c1" alt="Create a topic alert" width="3024" height="2072" data-path="images/topic-create-alert.png" />

## Alerts tab

The topic **Alert** tab lets you see all the active alerts associated to this Kafka cluster. You can edit or toggle them on/off.

<img src="https://mintcdn.com/conduktor/QbWqOoz71x3C-Q82/images/alerts-tab.png?fit=max&auto=format&n=QbWqOoz71x3C-Q82&q=85&s=74d349535364a82e1bd2f5a07d4f117a" alt="List topic alerts" width="2526" height="630" data-path="images/alerts-tab.png" />

## Topic consume

### View data quality policy violations

<Note>
  Available for Gateway clusters with Console v1.42 or later.
</Note>

When viewing topics on Gateway clusters with data quality Policies and the [mark action applied](/guide/use-cases/enforce-data-quality#mark-action), Console will display the Policy violation information:

* A Policy badge appears in the topic header (for example, "Data Quality" or "Encryption")
* The consume table includes a **Marking violations** column showing Policy and Rule violations for each message
* Hover over Policy names to see the Policy ID and violated Rules (deleted Rules appear greyed out)
* Click Policy names to navigate to Policy details
* Open any message to see full violation details in the **Metadata** tab's **Violations** section, including Policy IDs, Rule IDs, and links to Policy details

[Find out about creating and managing data quality Policies](/guide/use-cases/enforce-data-quality)

## Configure the Kafka consumer

When you access a topic from the topic list page for the first time, a consumer is automatically triggered with default settings:

* show from: `Most recent`
* limit: `500 records`
* partitions: `All`

This default setup lets you quickly browse through the 500 most recent messages produced in the topic.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-default.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=002e1eec0c7a53406b0691fd376fc012" alt="Default topic consumer" width="7170" height="3390" data-path="images/topic-default.png" />

### Show from

`Show From` defines the starting point for the Kafka consumer in your topic.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-show-from-choices.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=ffe81681c639abba449e0855c9c4ae76" alt="Show from topic" width="1802" height="946" data-path="images/topic-show-from-choices.png" />

Possible values:

* `Most recent` option works differently depending on the **Limit** that you select
  * with **Number of records** limit (let's say 500), it sets the starting point in your topic backward relative to **Now**, in order to get your the 500 *most recent* records.
  * with **None (live consume)**, it simply set the starting point to **Now**. This lets you consume only the messages produced **after** the consumer was started.
* `Latest hour`, `Today`, `Yesterday` to start the consumer, respectively:
  * 60 minutes ago
  * at the beginning of the day at 00:00:00 (local timezone based on your browser)
  * at the beginning of the day before at 00:00:00 (local timezone)
* `Beginning` to start the consumer from the very beginning of the topic.
* `Date` and `Timestamp` to start from a specific point in time datetime or an epoch
  * Date: ISO 8601 DateTime format with offset `2024-12-21T00:00:00+00:00`
  * Timestamp: Unix timestamp in **milliseconds** `1734949697000`
* `Offset` to start the consumer at a specific offset, ideal for use with a single **Partition** setting.
* `Consumer Group` to start the consumer from the last offsets committed by a consumer group on this topic.

### Limit

`Limit` defines when your consumer has to stop.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-limit-choices.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=616a1021e7093aaf87c12383459a7611" alt="Topic limit" width="1802" height="634" data-path="images/topic-limit-choices.png" />

Available options:

* `Latest offset` - stop the consumer upon reaching the end of the topic. The end offsets are calculated when you trigger the search. Records produced after that point **will not appear** in the search results.
* `None (live consume)` - start a live consumer that will look for messages indefinitely.
* `Number of records` - stop the consumer after having sent a certain number of records to the browser. When you have active filters, non-matching records will not count toward this limit.
* `Date` - stop the consumer after reaching the configured date. The ISO 8601 DateTime format with offset `2023-12-21T00:00:00+00:00`.

### Partitions

`Partitions` lets you restrict the consumer to only consume from certain partitions of your topic. By default, records from **all partitions** are consumed.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-partitions-choices.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=b47523ff4df70d213bdb859b1ded6448" alt="Partitions choices" width="1802" height="634" data-path="images/topic-partitions-choices.png" />

### Key and value format

`Key format` and `Value format` lets you force the deserializer for your topic.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-key-format-choices.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=8217635ccf26db81acc895c967d47b11" alt="Format choices" width="1802" height="724" data-path="images/topic-key-format-choices.png" />

#### Automatic deserializer

This is the default deserializer. **Automatic** infers the correct deserializer in the following order:

* schema registry deserializers (Avro, Protobuf, Json Schema)
* JsonDeserializer
* StringDeserializer
* ByteDeserializer (fallback)

Automatic deserializer applies to all the records within a topic, based on the one that matches the first record it encounters.

#### Custom deserializer

If you have installed them, your custom deserializers will appear here. Optionally, configure them using the `Properties` text and your messages will show as expected.

[Check out the tutorial on installing and configuring custom deserializers in Console](/guide/tutorials/custom-deserializers).

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-custom-deserializer.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=992ef613b148a6857fe8d68f9bf0ccc4" alt="Consume with a custom deserializer" width="2502" height="1212" data-path="images/topic-custom-deserializer.png" />

#### JSON deserializer

JSON deserializer will explicitly fail on records that doesn't match a JSON type.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-json-deser-fail.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=b8918565d16a00e9cb1006860c134734" alt="Consume with JSON deserializer" width="2498" height="670" data-path="images/topic-json-deser-fail.png" />

#### Bytes deserializer

Bytes deserializer helps you visualize your records by printing the non-ASCII characters as hexadecimal escape sequences. For instance, the following sequence of bytes:

```undefined theme={null}
00 00 00 00 07 10 49 27 6D 20 41 56 52 4F
```

corresponding to the [wire format of a Schema Registry AVRO message](https://docs.confluent.io/cloud/current/sr/fundamentals/serdes-develop/index.html#wire-format) <Icon icon="up-right-from-square" />:

```undefined theme={null}
00                            0   Magic Byte (0)
00 00 00 07                   1-4 Schema ID (7)
10 49 27 6D 20 41 56 52 4F    5+  serialized AVRO data
```

will be represented like this:

```undefined theme={null}
\x00\x00\x00\x00\x07\x10I'm AVRO
```

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-bytes-deserializer.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=7b420a47eb86671345d7a1e130e9b203" alt="Deserializer with bytes" width="1654" height="384" data-path="images/topic-bytes-deserializer.png" />

## Filter records

Console provides three methods to define filters that will be executed on the server and will only return the records that match.

This is a very powerful feature that allows you to quickly see the records that matter to you, especially in large topics.

### Global search

Global search is the most simple type of filter you can use.

1. Specify whether to look in the Key or in the value.
2. Pick an operator (contains, not contains, equals, not equals).
3. Type your search term.

<Info>
  Internally, the global will treat the record Key or Value as text to apply the operation (contains, equals, ...). This might not be the preferred approach if your record is JSON-ish
</Info>

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-global-filter.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=c122d9ca8ce6ea0c1ec45c6ceebb7949" alt="Global search" width="2500" height="928" data-path="images/topic-global-filter.png" />

### Search in a specific field

You can make your search more fine-grained by activating "Search in a specific field".

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-search-infield.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=77faefa6e3e6ccc91c6dedc8f59ae1ca" alt="Search in a specific field" width="2518" height="1160" data-path="images/topic-search-infield.png" />

<Info>
  Console will generate an autocomplete list by looking at the most recent 50 messages in the topic. If the key you're looking for is not here, you can type it manually. Examples:

  `data.event.name`\
  `data.event["correlation-id"]`\
  `data.clientAddress[0].ip`
</Info>

### JS search

If you need to construct more advanced filters, you can switch to the advanced view and use plain Javascript to build your filter.

<Warning>
  While it is the option that can potentially address the most complex use-cases, it is not the recommended or the fastest one.
</Warning>

### Statistics pop-up

While the consumer is processing, you'll see the following:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-stats-info.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=147f759538d421fd8cd4a9479da6a648" alt="Statistics" width="5476" height="2657" data-path="images/topic-stats-info.png" />

## Browse records

### From the main table

Once the search starts, you'll see messages appearing in the main table with three columns: timestamp, key and value.

<Info>
  The timestamp column uses the **local timezone** of the user. For example, if you're producing a message from Dublin, Ireland (UTC+1) at `14:57:38 local time` and you then consume this message from your browser (in Dublin), you'll see `14:57:38`.

  However, if another user consumes the same message in Console but from Paris, France (UTC+2), they'll see `15:57:38`.
</Info>

### Individual records

Click on a record from the list to see the entire record. Use the up/down arrow keys to navigate between messages.

There are three tabs at the top, displaying different elements of your record: data, headers and metadata.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-browse.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=aabe66b8a249757f106450bef0eea248" alt="Topic browse" width="1900" height="860" data-path="images/topic-browse.png" />

To share this view with others and to get more details Click **Share** to share it with your colleagues and to get more details about it.

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/record-details.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=90957029bc3fff94e64a029d953c2939" alt="Record details" width="2510" height="1370" data-path="images/record-details.png" />

### Data tab

The **Data** tab lets you visualize your record's key and value.

If your record value is serialized with JSON or using a schema registry, it's presented in the table view by default. You can also switch to the JSON view if necessary.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-browse-json-table.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=ec84d98dff011b59400f1a72c1a6bd03" alt="JSON table" width="4398" height="4164" data-path="images/topic-browse-json-table.png" />

The two views offer different features.

* **Table** view lets you visualize your message field by field and allows you to restrict your search further by applying more filters on individual fields.
  Filter types are include and exclude and are available for: string, number and boolean fields (disabled for null and fields contained within lists).

* **JSON** view lets you visualize your message and the **Enable JQ** toggle allows you to create a different projection of your record value.

The basic syntax lets you focus on sub-elements of your record:

```undefined theme={null}
{ foo: .bar }  // Renders {"foo": "value of .bar"}
.meta.domain // Renders a single String
{ id, meta } // Renders a new JSON with both elements
```

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-browse-json.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=d7f6260c355d51f75a3ac9bd9f4f73db" alt="See JQ filter" width="1894" height="406" data-path="images/topic-browse-json.png" />

[Find out more about JQ syntax reference and object construction for advanced use cases](https://jqlang.github.io/jq/manual/#object-construction) <Icon icon="up-right-from-square" />

### Headers tab

The **Headers** tab shows all the headers of your Kafka record and lets you find more messages with the same header value. Use the funnel icon to filter the view:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-header-funnel.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=293fbebf64daffa2c0e7dfd343662556" alt="Headers tab" width="1870" height="602" data-path="images/topic-header-funnel.png" />

A filter will be created:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-header-filter.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=29e00538c9f06b5bcc05fb54bccb47e6" alt="Filter on headers" width="2508" height="992" data-path="images/topic-header-filter.png" />

<Warning>
  While Kafka header values are internally stored as `byte[]`, Console uses *StringDeserializer* to display and filter them. If your producer doesn't write header values as UTF8 strings, this tab might not render properly and the header filter might not work as expected.
</Warning>

### Metadata tab

The **Metadata** tab provides all other information regarding your record that could be useful:

* record partition
* record offset
* record timestamp
* the key and value serializer inferred by the [automatic deserializer](#automatic-deserializer)
* key size and value size (how it's serialized on the broker)
* compression type
* schema ID, if any

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-metadata.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=027b4aa709211f54dafbccd977dcf3ef" alt="Topic metadata" style={{width: "550px"}} width="1906" height="2010" data-path="images/topic-metadata.png" />

## Operations

### Export records in CSV and JSON

You can export records in either JSON or CSV format.

CSV is particularly useful because you can use Console to re-import the records either in a new topic or in the same topic after modifications (if required).

Click on the three dots to see the options:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-export.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=749d8e70f09601e4b11307b2adb39f22" alt="Export records from a topic" width="2496" height="776" data-path="images/topic-export.png" />

The resulting files will look like this:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-export-result.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=6989057cdc67994b8e9fb619c7b416f7" alt="Export results" width="1678" height="596" data-path="images/topic-export-result.png" />

### Reprocess records

This feature lets you pick a record from the list and reprocess it either in the same or in a different topic, while letting you change its content beforehand.

Click **Reprocess message** (1), pick a destination topic (2) which takes you to the **Produce** tab (3) with your message pre-filled.

From there you can either produce the message directly or make adjustments:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-reprocess.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=dfe37873693a928534242e788ee1d395" alt="Reprocess a record" width="2618" height="3628" data-path="images/topic-reprocess.png" />

### Save and load views

If you're regularly using the same set of consume configuration (e.g. show from, limit) and the filters or if you'd like to share the views with others, you can save your current view as a template.

To create a view, click **Save**. This will save your current view as a template:

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/save-new-view.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=cd25bb36409459206425cde0ec2685c7" alt="Save a new view" width="2588" height="588" data-path="images/save-new-view.png" />

Give your view a name add a description and select whether it's **private** or if you want everyone in your **organization** to be able to see it and use it.

<img src="https://mintcdn.com/conduktor/YlJn6qrEZm6kp3UE/images/create-shared-view.png?fit=max&auto=format&n=YlJn6qrEZm6kp3UE&q=85&s=ac0bab40cb9521197ea34390c935f603" alt="Fill the view details" width="2492" height="740" data-path="images/create-shared-view.png" />

To see all views available to you, click the **folder**:

<img src="https://mintcdn.com/conduktor/23R4f9CHmZAh-xV6/images/shared-views.png?fit=max&auto=format&n=23R4f9CHmZAh-xV6&q=85&s=69a03d36ec6e6fcc139ff70a6827c3c7" alt="List existing views" width="2550" height="504" data-path="images/shared-views.png" />

<img src="https://mintcdn.com/conduktor/Kbwb2r5-pp_mR-Oq/images/list-shared-views.png?fit=max&auto=format&n=Kbwb2r5-pp_mR-Oq&q=85&s=f03a1dbc2f0777230a32dffd496efc3d" alt="List shared views" style={{width: "400px"}} width="944" height="916" data-path="images/list-shared-views.png" />

## Most recent 500 messages

When you first land on a topic consume page, the default search is configured with **Most Recent 500 messages**.

The intention is to show you the most relevant messages, split across the partitions.

This algorithm guarantees to return some messages irrespective of **when** the records were produced, which we believe is a good starting point when browsing a topic for the first time.

In most cases, it will give you `500 / num_partitions` messages, per partition. If your topic has:\
**10** partitions, Most Recent **500** will give you **50** messages per partition.\
**2** partitions, Most Recent **500** will give you **250** messages per partition.

Edge cases might occur and the algorithm will account for it seamlessly.

<img src="https://mintcdn.com/conduktor/Kbwb2r5-pp_mR-Oq/images/most-recent-500.png?fit=max&auto=format&n=Kbwb2r5-pp_mR-Oq&q=85&s=6e9edd5d7467e8b8cb34bce24784fca8" alt="Most recent 500" width="300" data-path="images/most-recent-500.png" />

<Warning>
  Most recent N messages doesn't work well with filters. This is because the filters will only be applied to those 500 messages instead of a large number of records. We recommend switching to a time-based *ShowFrom* when using filters
</Warning>

## JS filter syntax

JS filter is used to filter Kafka records and is evaluated on each record on the server. It's powerful and can handle complex filters but requires writing JavaScript code.

<Warning>
  We recommend that you use the simpler and more performant filters: the global search in a specific field.
</Warning>

The code has to return a boolean.

If your code returns `true`, the record will be included in the results, otherwise it will be skipped.

return value.totalPrice >= 30;
// Selects all the orders having a total price superior to or equal to 30

### Record attributes

When creating JavaScript filters, you may want to access message data or the metadata. See the parameters in the table below for accessing different message attributes.

| Attribute           | Types  |
| ------------------- | ------ |
| key                 | Object |
| value               | Object |
| headers             | Object |
| serializedKeySize   | Number |
| serializedValueSize | Number |
| keySchemaId         | Number |
| valueSchemaId       | Number |
| offset              | Number |
| partition           | Number |

### Example filters

In this example, we have these two records in our topic:

**Record 1:**

```
{
  "key": "order",
  "value": {
    "orderId": 12345,
    "paid": true,
    "totalPrice": 50,
    "items": [
      {
        "id": "9cb5cb81-b678-4f96-84dc-70096038eca9",
        "name": "beers pack"
      },
      {
        "id": "507b5045-eafd-41a6-afb5-1890f08cfd8e",
        "name": "baby diapers pack"
      }
    ]
  },
  "headers": {
    "app": "orders-microservice",
    "trace-id": "9f0f004a-70c5-4301-9d28-bf5d7ebf238d"
  }
}
```

**Record 2:**

```
{
  "key": "order",
  "value": {
    "orderId": 12346,
    "paid": false,
    "totalPrice": 10,
    "items": [
      {
        "id": "7f55662e-5ba2-4ab4-9546-45fdd1ca60ca",
        "name": "shampoo bottle"
      }
    ]
  },
  "headers": {
    "app": "orders-microservice",
    "trace-id": "1076c6dc-bd6c-4d5e-8a11-933b10bd77f5"
  }
}

```

Here are some sample filters related to these records:

```
return value.totalPrice >= 30;
// Selects all the orders having a total price superior to or equal to 30

return value.items.length > 1;
// Selects all the orders containing more than one 1 item

return value.orderId == 12345;
// Finds a specific order based in its ID

return !value.paid;
// Selects all the orders that aren't paid

return !headers.includesKey("trace-id");
// Selects all the records not having a trace-id header

const isHighPrice = value.totalPrice >= 30
const moreThanOneItem = value.items.length > 1
return isHighPrice && moreThanOneItem
// Selects all the orders having a total price superior to or equal to 30 and having more than one 1 item
```

## The configuration tab

The topic **Configuration** tab lets you visualize and edit your topic configuration.

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-config-list.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=c979fe560dba9de1a3cbb0b658d10e76" alt="Topic configuration" width="2554" height="1196" data-path="images/topic-config-list.png" />

On top of the table you have different fields to help you:

* **Search**: filters out the configurations by name. In the example below, we display only configuration with the term `retention`.

* **Raw**/**Friendly**: formats the information either in its original form or in a more human readable way. For instance, `retention.ms` can be represented as raw (`43200000`) or friendly(`12h`). Default is `Friendly`.

* **Show overrides only**: displays only the configurations that are set at topic level, as opposed to the broker level.  Default is `true`.

* **Raw view**: shows all the topic configurations as key value pairs.

* **`...`**: lets you do the same three operations that are available on the topic list page: add partitions, empty topic and delete topic.

To edit the configurations, click the **pen** button will open a new screen showing the name and description of the topic configuration, the Kafka default value and the current value:

<img src="https://mintcdn.com/conduktor/FjE8hB_sHo6Ubhbb/images/topic-config-item.png?fit=max&auto=format&n=FjE8hB_sHo6Ubhbb&q=85&s=2fd8d298b6dfb4f813d79a5107ba5bac" alt="Topic config item" style={{width: "400px"}} width="1396" height="2102" data-path="images/topic-config-item.png" />

You can either update the value or revert to the Kafka default which will apply the change directly on the Kafka cluster, similar to the `kafka-configs` commands below.

```shell-session theme={null}
# Update value
$ kafka-configs --bootstrap-server broker_host:port \
  --entity-type topics --entity-name my_topic_name  \
  --alter --add-config cleanup.policy=<new-value>

# Reset to default
$ kafka-configs --bootstrap-server broker_host:port \
  --entity-type topics --entity-name my_topic_name  \
  --alter --delete-config cleanup.policy
```

## Related resources

* [Find topic risks with Insights](/guide/insights/risk-analysis)
* [Set up topic alerts](/guide/monitor-brokers-apps/alerts)
* [Give us feedback/request a feature](https://conduktor.io/roadmap) <Icon icon="up-right-from-square" />
