Skip to main content
Open a topic from the Topics page and switch to its Messages tab. Everything on this page is per-topic, and your serde choices are remembered per topic — shared between browsing and producing.

Browsing messages

The toolbar drives what you see:
  • Key / Value deserializer — how records are decoded: String, Integer, Long, Float, Double, JSON, Avro, Protobuf.
  • Partitions — all partitions by default, or a subset.
  • Max results — the total cap for a fetch (10 up to 1000).
  • Seek typewhere in the topic to read:
Live mode streams into the table as records land, with Pause / Continue and a clear control; the other seek types fetch a page and offer Reload.
On a very large or slow topic a fetch can hit its polling budget before reaching the requested count — the table then flags the result as incomplete rather than stalling. Narrow the partitions or lower Max results and reload.

Producing a message

Click Produce Message on the topic’s page. The form slides in as a resizable drawer from the right — the page stays usable behind it, so with the Messages tab in Live mode you can watch your own message arrive.
  1. Pick the Key and Value serdes — the same list as browsing, plus Void for an intentional null (a compaction tombstone). Numeric and JSON serdes deliberately reject empty input — “I mean null” is Void, never a forgotten field.
  2. Enter the key and value — a full editor with live validation for JSON and schema serdes, a plain input for scalars.
  3. For a schema serde, pick the Subject — the Schema Registry subject the record is encoded against. The picker filters to subjects whose registered type matches the serde, and a scope switch (Default = topic-prefixed subjects / All subjects) narrows the list.
  4. (Optional) expand the collapsed Partition, Timestamp, Headers, or Compression panels to override the defaults (Kafka picks the partition, the broker stamps the time, no headers, no compression).
  5. Submit — a success toast confirms, and the Messages tab behind the drawer refreshes.
Producing is deliberately permissive: any serde can be produced to any topic, and a serde that doesn’t match the topic’s registered schema raises a non-blocking warning rather than a hard stop — the same behaviour as comparable Kafka UIs. Hard enforcement, where you want it, belongs to broker-side schema validation.
Two power details for schema users: the Schema ID in headers toggle places the Schema Registry id in a record header instead of the payload prefix (Confluent’s header format — consumers with the default deserializer handle both), and the Compression choice sets the producer codec — mostly useful for testing a topic and its consumers against a specific codec, since a single hand-produced record gains nothing from compression.