Messages
The Messages tab inside any topic lets you read new messages as they arrive or query a specific range from the past. Select a message to inspect its key, value, headers, and metadata.
Live mode
In Live mode, KfVisor subscribes to all partitions and streams incoming messages in real time.
Controls:
- Pause / Resume — stop accumulating new messages without disconnecting
- Clear — remove all locally displayed messages (does not affect the Kafka topic)
- Auto-scroll — keep the view scrolled to the latest message; uncheck to scroll freely
- Message counter — shows current count vs. the selected limit
Historical mode
In Historical mode, KfVisor reads already-written messages from the topic.
Controls:
- Partition dropdown — read from all partitions or a specific one
- From offset — start at a specific offset in the selected partition
- From time — find the first offset at or after a given timestamp (mutually exclusive with From offset)
- Limit — maximum number of messages to load
- Load / Stop buttons
When a specific offset is set, the time field is not used. An offset is per-partition; offset 100 in partition 2 is unrelated to offset 100 in partition 0.
Message limit
Both modes share a limit dropdown:
50 · 100 · 200 · 500 · 1 000 · 5 000 · 10 000
Message table
Each row shows:
| Column | Description |
|---|---|
| Part. | Partition number |
| Offset | Message offset within the partition |
| Timestamp | Message timestamp |
| Key | Key preview (truncated) |
| Value | Value preview (truncated) |
| Size | Combined byte size of key + value |
Click a row to expand the message detail panel below the table.
Message detail panel
The detail panel shows the full key and value with a decoder selector for each, plus headers and size metadata.
Key decoders
| Decoder | Use |
|---|---|
| Auto | Attempts JSON first; falls back to String |
| String | Plain UTF-8 text |
| JSON | Parsed tree with collapsible nested objects |
| Hex | Raw bytes as hexadecimal pairs |
| Base64 | Decode a Base64-encoded text value |
Value decoders
The value decoder has one additional option beyond the key decoders:
| Decoder | Use |
|---|---|
| Auto | Attempts JSON first; falls back to String |
| String | Plain UTF-8 text |
| JSON | Parsed tree with collapsible nested objects |
| Hex | Raw bytes as hexadecimal pairs |
| Base64 | Decode a Base64-encoded text value |
| Avro (SR) | Confluent wire-format Avro, decoded using Schema Registry |
Avro decoding requires a Schema Registry URL in the cluster’s Integrations settings. Only values in Confluent Avro wire format (magic byte
0x00+ 4-byte schema ID) are decoded. Avro decoding is available for the value only — the key decoder does not include an Avro option.
The decoder selection is remembered per topic and cluster for the current session.
64 KiB limit: Key and value fields are truncated at 64 KiB. When truncation occurs, the original byte size is shown alongside a truncation badge. Full JSON or Avro decoding is not guaranteed for truncated data.
Headers
All message headers are shown as key-value pairs. Binary header values are displayed as (binary).
Sending a message
Click Produce (top-right of the topic view) to open the send panel.
Warning: The panel requires you to check “I understand, allow sending” before the Send button becomes active. Messages written to Kafka cannot be deleted.
Fields:
| Field | Description |
|---|---|
| Partition | Auto (let Kafka choose) or a specific partition number |
| Key | Text key; check null to send a null key |
| Value | Message value with format selector |
| Headers | Optional key-value pairs; add/remove freely |
Value format dropdown: String, JSON, Base64, Hex. Each format has live validation — a badge shows whether the current input is valid for the selected format. JSON also has a pretty-print button. The null toggle for value is labeled null (tombstone).
An estimated byte size is shown above the Send button.
Recent sends
The panel keeps a history of the last 20 send attempts for the current session. Each entry shows the time and result — partition + offset on success, an error message on failure. Pending sends that receive no result within 30 seconds are marked as unknown.
Known issue in this release: The request tracking between UI and backend is not fully synchronised. Delivery confirmations (partition + offset) may not always appear in the history even when the message was successfully written. Treat the history as a best-effort log — confirm actual delivery by reading back from the topic if it matters.
Limitations
- No full-text search across the topic
- No filter by JSONPath, key, or header value
- No export or backup of messages
- Historical read uses a dedicated consumer with auto-commit disabled; it does not affect offset positions of your application’s consumer groups