[{"data":1,"prerenderedAt":2337},["ShallowReactive",2],{"blog-post-\u002Fblog\u002Fkafka-cli-tools":3},{"id":4,"title":5,"body":6,"date":2323,"description":2324,"extension":2325,"meta":2326,"navigation":2327,"ogImage":2328,"path":2329,"pinned":2330,"seo":2331,"sitemap":2332,"stem":2333,"tags":2334,"__hash__":2336},"blog\u002Fblog\u002Fkafka-cli-tools.md","Best Kafka CLI Tools in 2026: kcat vs kafkactl vs kaf",{"type":7,"value":8,"toc":2279},"minimark",[9,32,35,38,43,211,226,230,273,305,311,315,494,503,632,635,662,711,730,732,749,769,771,807,815,817,850,853,855,875,885,888,921,929,933,973,995,998,1002,1005,1021,1029,1032,1035,1041,1193,1217,1221,1238,1242,1333,1346,1350,1524,1528,1710,1717,1721,1826,1829,1850,1854,1883,1886,1890,1893,1900,1904,1916,1925,1929,1949,1953,1969,1977,1981,2010,2018,2025,2029,2033,2044,2048,2065,2069,2081,2085,2116,2120,2137,2141,2153,2157,2168,2172,2182,2186,2208,2212,2219,2223,2250,2254,2269,2272,2275],[10,11,12,19,20,25,26,31],"p",{},[13,14,18],"a",{"href":15,"rel":16},"https:\u002F\u002Fgithub.com\u002Fedenhill\u002Fkcat",[17],"nofollow","kcat",", formerly kafkacat, is still a widely used Kafka command-line tool. Its last GitHub release, ",[13,21,24],{"href":22,"rel":23},"https:\u002F\u002Fgithub.com\u002Fedenhill\u002Fkcat\u002Freleases",[17],"1.7.0",", shipped in August 2021, and its default branch has had no commits since November 2022. Yet Homebrew recorded ",[13,27,30],{"href":28,"rel":29},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fkcat",[17],"11,094 kcat installs"," in the year ending 28 September 2026.",[10,33,34],{},"So in 2026, should you keep using kcat, and if not, which Kafka CLI should replace it?",[10,36,37],{},"This guide compares kcat with kafkactl, kaf, kcl, rpk, Confluent CLI, and Kafka's built-in scripts across authentication (including MSK IAM), consumer group administration, Schema Registry formats, JSON output, and maintenance activity. It also covers declarative topic tools and terminal UIs.",[39,40,42],"h2",{"id":41},"quick-decision","Quick decision",[44,45,46,62],"table",{},[47,48,49],"thead",{},[50,51,52,56,59],"tr",{},[53,54,55],"th",{},"If you need to...",[53,57,58],{},"Start with",[53,60,61],{},"Why",[63,64,65,84,104,124,136,148,161,172,183,197],"tbody",{},[50,66,67,71,77],{},[68,69,70],"td",{},"Replace kcat with one maintained CLI for records and administration",[68,72,73],{},[74,75,76],"code",{},"kafkactl",[68,78,79,80],{},"Named contexts, group and ACL commands, and regular releases; see ",[13,81,83],{"href":82},"#moving-from-kcat","Moving from kcat",[50,85,86,93,97],{},[68,87,88,89,92],{},"Keep existing kcat pipelines and ",[74,90,91],{},"-f"," format strings",[68,94,95],{},[74,96,18],{},[68,98,99,100,103],{},"Still handles produce and consume, but has had no GitHub release since 2021; check the linked ",[74,101,102],{},"librdkafka"," version",[50,105,106,109,118],{},[68,107,108],{},"Connect to AWS MSK with IAM without a plugin",[68,110,111,114,115],{},[74,112,113],{},"kcl"," or ",[74,116,117],{},"kaf",[68,119,120,121,123],{},"Built-in MSK IAM support; ",[74,122,76],{}," needs a separate plugin",[50,125,126,129,133],{},[68,127,128],{},"Decode Avro, Protobuf, and JSON Schema from Schema Registry on Apache Kafka",[68,130,131],{},[74,132,113],{},[68,134,135],{},"All three registry formats, plus newer APIs such as share groups",[50,137,138,141,145],{},[68,139,140],{},"Use short commands for everyday topic and group work",[68,142,143],{},[74,144,117],{},[68,146,147],{},"Resource-oriented commands; recent repository activity has slowed",[50,149,150,153,158],{},[68,151,152],{},"Operate Redpanda",[68,154,155],{},[74,156,157],{},"rpk",[68,159,160],{},"Redpanda's documented CLI for records and cluster operations",[50,162,163,166,169],{},[68,164,165],{},"Operate Confluent Cloud or Confluent Platform",[68,167,168],{},"Confluent CLI",[68,170,171],{},"Platform resources and schema-aware produce and consume",[50,173,174,177,180],{},[68,175,176],{},"Run a command on a Kafka host with nothing else to install",[68,178,179],{},"Kafka's built-in scripts",[68,181,182],{},"Ship with Kafka; require Java",[50,184,185,188,194],{},[68,186,187],{},"Browse records in an SSH terminal",[68,189,190],{},[13,191,193],{"href":192},"#terminal-uis-kaskade-and-ktea","kaskade or ktea",[68,195,196],{},"Keyboard-driven terminal interfaces",[50,198,199,202,208],{},[68,200,201],{},"Manage topic definitions in Git",[68,203,204],{},[13,205,207],{"href":206},"#kafka-topics-as-code-topicctl-and-jikkou","topicctl or Jikkou",[68,209,210],{},"Declarative resource configuration",[212,213,214],"blockquote",{},[10,215,216,220,221,225],{},[217,218,219],"strong",{},"Tip:"," To search and decode many records, or copy them across clusters, see ",[13,222,224],{"href":223},"#when-a-desktop-ui-is-faster-than-a-cli","Kafma's desktop workflow",".",[39,227,229],{"id":228},"built-in-scripts-or-a-standalone-cli","Built-in scripts or a standalone CLI?",[10,231,232,233,236,237,240,241,244,245,248,249,248,252,248,255,248,258,261,262,265,266,248,269,272],{},"Apache Kafka ships its own command-line tools in ",[74,234,235],{},"bin\u002F"," (with ",[74,238,239],{},".bat"," versions in ",[74,242,243],{},"bin\\windows\\","): ",[74,246,247],{},"kafka-topics.sh",", ",[74,250,251],{},"kafka-console-producer.sh",[74,253,254],{},"kafka-console-consumer.sh",[74,256,257],{},"kafka-consumer-groups.sh",[74,259,260],{},"kafka-configs.sh",", and more. They match the Kafka release they ship with, and the distribution includes dedicated tools for cluster operations such as partition reassignment (",[74,263,264],{},"kafka-reassign-partitions.sh",") and KRaft storage and quorum management (",[74,267,268],{},"kafka-storage.sh",[74,270,271],{},"kafka-metadata-quorum.sh",").",[10,274,275,276,284,285,287,288,290,291,294,295,300,301,304],{},"The costs show up in daily use. The scripts require Java and a Kafka distribution, different operations use separate scripts and flags, and SASL or TLS settings usually go into client properties files. The Apache distribution cannot decode Schema Registry records; ",[13,277,280,281],{"href":278,"rel":279},"https:\u002F\u002Fdocs.confluent.io\u002Fplatform\u002Fcurrent\u002Fschema-registry\u002Ffundamentals\u002Fserdes-develop\u002Fserdes-avro.html",[17],"Confluent Platform adds ",[74,282,283],{},"kafka-avro-console-consumer"," and similar tools for that. Older tutorials may run ",[74,286,247],{}," and ",[74,289,264],{}," with ",[74,292,293],{},"--zookeeper","; ",[13,296,299],{"href":297,"rel":298},"https:\u002F\u002Fkafka.apache.org\u002F35\u002Fgetting-started\u002Fupgrade\u002F",[17],"Kafka removed that option from these commands",", so use ",[74,302,303],{},"--bootstrap-server"," instead.",[10,306,307,308,310],{},"A standalone CLI such as ",[74,309,76],{}," is a single binary with named contexts, record formatting, and JSON output, which makes it easier to use on a laptop or in a container. Many teams use both: a standalone CLI for daily work, and the bundled scripts for cluster operations on a Kafka host.",[39,312,314],{"id":313},"kafka-cli-tools-compared","Kafka CLI tools compared",[44,316,317,339],{},[47,318,319],{},[50,320,321,324,327,330,333,336],{},[53,322,323],{},"Tool",[53,325,326],{},"Contexts or profiles",[53,328,329],{},"SASL\u002FTLS",[53,331,332],{},"MSK IAM",[53,334,335],{},"Consumer group lag \u002F offset reset",[53,337,338],{},"JVM required",[63,340,341,369,394,418,437,456,474],{},[50,342,343,350,353,356,364,367],{},[68,344,345],{},[13,346,349],{"href":347,"rel":348},"https:\u002F\u002Fkafka.apache.org\u002F43\u002Foperations\u002Fbasic-kafka-operations\u002F",[17],"Kafka scripts",[68,351,352],{},"— (properties file per command)",[68,354,355],{},"Yes",[68,357,358,359],{},"External ",[13,360,363],{"href":361,"rel":362},"https:\u002F\u002Fgithub.com\u002Faws\u002Faws-msk-iam-auth",[17],"AWS Java library",[68,365,366],{},"Both",[68,368,355],{},[50,370,371,376,383,385,388,391],{},[68,372,373],{},[13,374,18],{"href":15,"rel":375},[17],[68,377,378,379,382],{},"Single config file (",[74,380,381],{},"-F",")",[68,384,355],{},[68,386,387],{},"—",[68,389,390],{},"— \u002F —",[68,392,393],{},"No",[50,395,396,402,405,407,414,416],{},[68,397,398],{},[13,399,76],{"href":400,"rel":401},"https:\u002F\u002Fgithub.com\u002Fdeviceinsight\u002Fkafkactl",[17],[68,403,404],{},"Named contexts",[68,406,355],{},[68,408,409],{},[13,410,413],{"href":411,"rel":412},"https:\u002F\u002Fgithub.com\u002Fdeviceinsight\u002Fkafkactl-plugins\u002Fblob\u002Fmain\u002Faws\u002FREADME.adoc",[17],"AWS plugin",[68,415,366],{},[68,417,393],{},[50,419,420,426,429,431,433,435],{},[68,421,422],{},[13,423,117],{"href":424,"rel":425},"https:\u002F\u002Fgithub.com\u002Fbirdayz\u002Fkaf",[17],[68,427,428],{},"Named clusters",[68,430,355],{},[68,432,355],{},[68,434,366],{},[68,436,393],{},[50,438,439,445,448,450,452,454],{},[68,440,441],{},[13,442,157],{"href":443,"rel":444},"https:\u002F\u002Fdocs.redpanda.com\u002Fstreaming\u002Fcurrent\u002Freference\u002Frpk\u002F",[17],[68,446,447],{},"Profiles",[68,449,355],{},[68,451,387],{},[68,453,366],{},[68,455,393],{},[50,457,458,464,466,468,470,472],{},[68,459,460],{},[13,461,113],{"href":462,"rel":463},"https:\u002F\u002Fgithub.com\u002Ftwmb\u002Fkcl",[17],[68,465,447],{},[68,467,355],{},[68,469,355],{},[68,471,366],{},[68,473,393],{},[50,475,476,482,485,487,489,492],{},[68,477,478],{},[13,479,168],{"href":480,"rel":481},"https:\u002F\u002Fdocs.confluent.io\u002Fconfluent-cli\u002Fcurrent\u002Findex.html",[17],[68,483,484],{},"Contexts",[68,486,355],{},[68,488,387],{},[68,490,491],{},"Cloud Dedicated or Platform \u002F —",[68,493,393],{},[10,495,496,497,502],{},"Confluent CLI ",[13,498,501],{"href":499,"rel":500},"https:\u002F\u002Fdocs.confluent.io\u002Fconfluent-cli\u002Fcurrent\u002Fcommand-reference\u002Fkafka\u002Fconsumer\u002Fgroup\u002Flag\u002Fconfluent_kafka_consumer_group_lag_describe.html",[17],"reads group lag"," on Confluent Cloud Dedicated clusters and, through REST Proxy, on Confluent Platform; it has no group offset reset command.",[44,504,505,523],{},[47,506,507],{},[50,508,509,511,514,517,520],{},[53,510,323],{},[53,512,513],{},"Registry Avro decode",[53,515,516],{},"Registry Protobuf decode",[53,518,519],{},"Registry JSON Schema decode",[53,521,522],{},"JSON output",[63,524,525,537,557,575,591,607,619],{},[50,526,527,529,531,533,535],{},[68,528,349],{},[68,530,387],{},[68,532,387],{},[68,534,387],{},[68,536,387],{},[50,538,539,541,547,549,551],{},[68,540,18],{},[68,542,543,544],{},"Yes, with ",[74,545,546],{},"libserdes",[68,548,387],{},[68,550,387],{},[68,552,553,554,382],{},"Records (",[74,555,556],{},"-J",[50,558,559,561,563,570,572],{},[68,560,76],{},[68,562,355],{},[68,564,565,566,569],{},"Local ",[74,567,568],{},".proto"," or protoset only",[68,571,355],{},[68,573,574],{},"Commands and records",[50,576,577,579,581,586,588],{},[68,578,117],{},[68,580,355],{},[68,582,565,583,585],{},[74,584,568],{}," only",[68,587,387],{},[68,589,590],{},"Records",[50,592,593,595,597,599,605],{},[68,594,157],{},[68,596,355],{},[68,598,355],{},[68,600,601],{},[13,602,355],{"href":603,"rel":604},"https:\u002F\u002Fgithub.com\u002Fredpanda-data\u002Fredpanda\u002Freleases\u002Ftag\u002Fv24.2.1",[17],[68,606,590],{},[50,608,609,611,613,615,617],{},[68,610,113],{},[68,612,355],{},[68,614,355],{},[68,616,355],{},[68,618,574],{},[50,620,621,623,625,627,629],{},[68,622,168],{},[68,624,355],{},[68,626,355],{},[68,628,355],{},[68,630,631],{},"Commands",[633,634,18],"h3",{"id":18},[10,636,637,640,641,643,644,647,648,651,652,655,656,658,659,661],{},[13,638,18],{"href":15,"rel":639},[17]," is a single C binary built on ",[74,642,102],{}," for producing, consuming, and listing metadata. It is at its best in pipelines: records come from stdin and go to stdout, ",[74,645,646],{},"-e"," stops at the current end, ",[74,649,650],{},"-c"," stops after a record count, ",[74,653,654],{},"-o s@\u003Cms>"," starts at a timestamp, and ",[74,657,91],{}," formats each record. With a build that includes ",[74,660,546],{},", it decodes Avro through Schema Registry.",[663,664,669],"pre",{"className":665,"code":666,"language":667,"meta":668,"style":668},"language-sh shiki shiki-themes kafma-dark kafma-light","kcat -b localhost:9092 -C -t orders -o s@1759017600000 -e -f '%p %o %k %s\\n'\n","sh","",[74,670,671],{"__ignoreMap":668},[672,673,676,679,683,687,690,693,696,699,702,705,708],"span",{"class":674,"line":675},"line",1,[672,677,18],{"class":678},"sS_Im",[672,680,682],{"class":681},"spVhG"," -b",[672,684,686],{"class":685},"sIsOz"," localhost:9092",[672,688,689],{"class":681}," -C",[672,691,692],{"class":681}," -t",[672,694,695],{"class":685}," orders",[672,697,698],{"class":681}," -o",[672,700,701],{"class":685}," s@1759017600000",[672,703,704],{"class":681}," -e",[672,706,707],{"class":681}," -f",[672,709,710],{"class":685}," '%p %o %k %s\\n'\n",[10,712,713,714,718,719,287,721,723,724,727,728,225],{},"Its last GitHub release was 1.7.0 in August 2021, and kcat itself has received no commits since November 2022. ",[13,715,717],{"href":28,"rel":716},[17],"Homebrew"," links kcat against its packaged ",[74,720,102],{},[74,722,546],{},", so client-library fixes can still arrive through those packages (check with ",[74,725,726],{},"kcat -V","). Keep it for pipelines that already work; for new scripts, see ",[13,729,83],{"href":82},[633,731,76],{"id":76},[10,733,734,737,738,248,741,744,745,748],{},[13,735,76],{"href":400,"rel":736},[17]," uses kubectl-style commands such as ",[74,739,740],{},"kafkactl get topics",[74,742,743],{},"kafkactl describe consumer-group",", and ",[74,746,747],{},"kafkactl config use-context",". One binary covers topics, consumer groups and offset resets, ACLs, produce, and consume, and it installs through Homebrew, winget, Docker, or a release binary.",[10,750,751,752,757,758,761,762,764,765,225],{},"Two features stand out. If your brokers are reachable only from inside Kubernetes, ",[13,753,756],{"href":754,"rel":755},"https:\u002F\u002Fgithub.com\u002Fdeviceinsight\u002Fkafkactl#running-in-kubernetes",[17],"Kubernetes mode"," runs each command in a pod through ",[74,759,760],{},"kubectl",". Credentials can come from an interactive prompt or the OS keyring instead of a plaintext config file. The trade-offs are in the matrix: Protobuf uses local ",[74,763,568],{}," files, and MSK IAM needs a ",[13,766,768],{"href":411,"rel":767},[17],"separate plugin",[633,770,117],{"id":117},[10,772,773,776,777,248,780,248,783,786,787,790,791,794,795,798,799,802,803,806],{},[13,774,117],{"href":424,"rel":775},[17]," keeps commands short: ",[74,778,779],{},"kaf topics",[74,781,782],{},"kaf groups",[74,784,785],{},"kaf consume orders",". Two commands have no direct equivalent in kcat: ",[74,788,789],{},"kaf group peek"," shows records before and after a group's committed offset, and ",[74,792,793],{},"kaf query"," scans a topic for a key (",[74,796,797],{},"--key",") or a value substring (",[74,800,801],{},"--grep","). ",[74,804,805],{},"kaf config select-cluster"," switches clusters from an interactive list, and kaf can import a Confluent Cloud configuration or add an Azure Event Hubs namespace.",[10,808,809,810,287,812,814],{},"Activity has slowed. The latest release is v0.2.14 from February 2026, there were no commits in the 90 days before 28 September 2026, and open issues have a median age of 5.9 years. Choose it when ",[74,811,789],{},[74,813,793],{}," fit your day-to-day inspection work.",[633,816,157],{"id":157},[10,818,819,822,823,826,827,829,830,833,834,837,838,841,842,849],{},[13,820,157],{"href":443,"rel":821},[17]," is Redpanda's CLI. Its record commands will feel familiar to kcat users: ",[74,824,825],{},"rpk topic consume"," takes ",[74,828,91],{}," format strings and timestamp offsets, ",[74,831,832],{},"--regex"," reads every topic matching a pattern, and ",[74,835,836],{},"--use-schema-registry"," decodes Avro, Protobuf, and JSON Schema. ",[74,839,840],{},"rpk profile"," stores named clusters, and ",[13,843,846],{"href":844,"rel":845},"https:\u002F\u002Fdocs.redpanda.com\u002Fstreaming\u002Fcurrent\u002Freference\u002Frpk\u002Frpk-container\u002Frpk-container-start\u002F",[17],[74,847,848],{},"rpk container start"," starts a local Redpanda cluster in Docker for testing.",[10,851,852],{},"Common topic, group, and record commands speak the Kafka protocol and work with Apache Kafka. Commands for cluster configuration, health, tuning, and Redpanda Cloud need Redpanda's Admin API or Redpanda Cloud. If you run Redpanda, make it your main CLI; on Apache Kafka, it is a capable record tool rather than a full admin CLI.",[633,854,113],{"id":113},[10,856,857,860,861,866,867,870,871,874],{},[13,858,113],{"href":462,"rel":859},[17]," is a pure-Go CLI from the author of franz-go that aims to cover the whole Kafka API: produce and consume with kcat-style format verbs, administration, transactions, ACLs, and ",[13,862,865],{"href":863,"rel":864},"https:\u002F\u002Fgithub.com\u002Ftwmb\u002Fkcl#share-groups",[17],"share groups"," (KIP-932, Kafka 4.0+). It encodes and decodes Avro, Protobuf, and JSON Schema through Schema Registry. For protocol debugging, ",[74,868,869],{},"kcl misc api-versions"," shows what a broker supports and ",[74,872,873],{},"kcl misc raw-req"," sends a raw request.",[10,876,877,880,881,884],{},[74,878,879],{},"kcl fake"," starts an in-process fake cluster for CI and demos without Docker; it is not a production broker. Administrative commands offer stable ",[74,882,883],{},"--format json"," output; produce and consume use per-record format strings. Choose kcl when you need share groups, raw protocol access, or scriptable JSON from the same binary you use for records.",[633,886,168],{"id":887},"confluent-cli",[10,889,890,893,894,897,898,287,901,908,909,912,913,920],{},[13,891,168],{"href":480,"rel":892},[17]," (",[74,895,896],{},"confluent",") manages Confluent Cloud and Confluent Platform resources, including environments, clusters, API keys, RBAC, connectors, and Schema Registry, alongside topics. Its ",[74,899,900],{},"kafka topic produce",[13,902,905],{"href":903,"rel":904},"https:\u002F\u002Fdocs.confluent.io\u002Fconfluent-cli\u002Fcurrent\u002Fcommand-reference\u002Fkafka\u002Ftopic\u002Fconfluent_kafka_topic_consume.html",[17],[74,906,907],{},"kafka topic consume"," commands handle Avro, Protobuf, and JSON Schema through Schema Registry, and with ",[74,910,911],{},"--bootstrap"," they connect directly to brokers. ",[13,914,917],{"href":915,"rel":916},"https:\u002F\u002Fdocs.confluent.io\u002Fconfluent-cli\u002Fcurrent\u002Fcommand-reference\u002Flocal\u002Fkafka\u002Fconfluent_local_kafka_start.html",[17],[74,918,919],{},"confluent local kafka start"," runs a local Apache Kafka instance in Docker for testing.",[10,922,923,924,928],{},"Most other commands need a Confluent Cloud login or, for self-managed clusters, ",[13,925,927],{"href":480,"rel":926},[17],"Confluent REST Proxy",". Choose it if you run on Confluent. For an existing Apache Kafka cluster without REST Proxy, its direct broker access is limited to produce and consume.",[39,930,932],{"id":931},"kafka-topics-as-code-topicctl-and-jikkou","Kafka topics as code: topicctl and Jikkou",[10,934,935,940,941,944,945,948,949,248,952,248,955,958,959,962,963,966,967,287,970,225],{},[13,936,939],{"href":937,"rel":938},"https:\u002F\u002Fgithub.com\u002Fsegmentio\u002Ftopicctl",[17],"topicctl",", from Segment, keeps each topic's settings in a YAML file in Git. ",[74,942,943],{},"topicctl apply"," creates the topic or brings it in line with the file, and ",[74,946,947],{},"topicctl check"," validates configs and compares them with cluster state before you apply them. It also manages replica placement across racks (",[74,950,951],{},"cross-rack",[74,953,954],{},"in-rack",[74,956,957],{},"balanced-leaders","), and ",[74,960,961],{},"topicctl rebalance"," can rebalance eligible topics under a config path. For ad hoc inspection, ",[74,964,965],{},"topicctl repl"," opens a shell with ",[74,968,969],{},"get",[74,971,972],{},"tail",[10,974,975,980,981,984,985,988,989,994],{},[13,976,979],{"href":977,"rel":978},"https:\u002F\u002Fgithub.com\u002Fstreamthoughts\u002Fjikkou",[17],"Jikkou"," covers more resource types: topics, ACLs, quotas, Schema Registry schemas, and Kafka Connect connectors. ",[74,982,983],{},"jikkou diff"," compares the files in Git with the live cluster, without a state file, and ",[74,986,987],{},"jikkou apply"," makes only the necessary changes. Jinja templates and provider groups let one definition target several environments or clusters. Its ",[13,990,993],{"href":991,"rel":992},"https:\u002F\u002Fwww.jikkou.io\u002Fdocs\u002Freleases\u002Frelease-v1.1.0\u002F",[17],"August 2026 release"," added CI drift detection and Kafka 4.x share-group support.",[10,996,997],{},"Choose topicctl if you focus on topics and replica placement; choose Jikkou if schemas or connectors belong in the same repository.",[39,999,1001],{"id":1000},"terminal-uis-kaskade-and-ktea","Terminal UIs: kaskade and ktea",[10,1003,1004],{},"A terminal UI gives you navigable screens when you're working inside an SSH session.",[10,1006,1007,1012,1013,1016,1017,1020],{},[13,1008,1011],{"href":1009,"rel":1010},"https:\u002F\u002Fgithub.com\u002Fsauljabin\u002Fkaskade",[17],"kaskade"," has two modes. ",[74,1014,1015],{},"kaskade admin"," browses topics, partitions, consumer groups, and lag, and can create, edit, or delete topics. ",[74,1018,1019],{},"kaskade consumer -t orders"," reads records, filters them by key, value, header, or partition, and decodes Avro and Protobuf through Confluent Schema Registry or Apicurio Registry. It supports SASL, TLS, and MSK IAM, and installs with Homebrew or pipx.",[10,1022,1023,1028],{},[13,1024,1027],{"href":1025,"rel":1026},"https:\u002F\u002Fgithub.com\u002Fjonas-grgt\u002Fktea",[17],"ktea"," will feel familiar to k9s users. It switches between several clusters, lists and modifies topics, searches consumed records, shows consumer group lag, and browses and registers Schema Registry schemas. It can also browse Kafka Connect clusters. Record decoding covers text, JSON, and Avro; Protobuf is on its to-do list.",[10,1030,1031],{},"Both suit interactive browsing. For repeatable scripts and pipeline output, use a line-oriented CLI.",[39,1033,83],{"id":1034},"moving-from-kcat",[10,1036,1037,1038,225],{},"These examples assume a local broker or an already selected CLI profile and a topic named ",[74,1039,1040],{},"orders",[44,1042,1043,1056],{},[47,1044,1045],{},[50,1046,1047,1050,1052,1054],{},[53,1048,1049],{},"Task",[53,1051,18],{},[53,1053,76],{},[53,1055,117],{},[63,1057,1058,1078,1097,1114,1135,1155,1173],{},[50,1059,1060,1063,1068,1073],{},[68,1061,1062],{},"Read from the beginning and follow new records",[68,1064,1065],{},[74,1066,1067],{},"kcat -b localhost:9092 -t orders -C -o beginning",[68,1069,1070],{},[74,1071,1072],{},"kafkactl consume orders --from-beginning",[68,1074,1075],{},[74,1076,1077],{},"kaf consume orders -f",[50,1079,1080,1083,1088,1093],{},[68,1081,1082],{},"Read historical records and exit at the current end",[68,1084,1085],{},[74,1086,1087],{},"kcat -b localhost:9092 -t orders -C -o beginning -e",[68,1089,1090],{},[74,1091,1092],{},"kafkactl consume orders --from-beginning --exit",[68,1094,1095],{},[74,1096,785],{},[50,1098,1099,1102,1107,1112],{},[68,1100,1101],{},"Start at a timestamp",[68,1103,1104],{},[74,1105,1106],{},"kcat -b localhost:9092 -t orders -C -o s@1759017600000",[68,1108,1109],{},[74,1110,1111],{},"kafkactl consume orders --from-timestamp 2025-09-28T00:00:00Z",[68,1113,387],{},[50,1115,1116,1119,1124,1129],{},[68,1117,1118],{},"Stop after 10 records",[68,1120,1121],{},[74,1122,1123],{},"kcat -b localhost:9092 -t orders -C -o beginning -c 10",[68,1125,1126],{},[74,1127,1128],{},"kafkactl consume orders --from-beginning --max-messages 10",[68,1130,1131,1134],{},[74,1132,1133],{},"kaf consume orders -l 10"," (up to 10 per partition)",[50,1136,1137,1140,1145,1150],{},[68,1138,1139],{},"Print records as JSON",[68,1141,1142],{},[74,1143,1144],{},"kcat -b localhost:9092 -t orders -C -J",[68,1146,1147],{},[74,1148,1149],{},"kafkactl consume orders -o json",[68,1151,1152],{},[74,1153,1154],{},"kaf consume orders --output json",[50,1156,1157,1160,1165,1169],{},[68,1158,1159],{},"List topics",[68,1161,1162],{},[74,1163,1164],{},"kcat -b localhost:9092 -L",[68,1166,1167],{},[74,1168,740],{},[68,1170,1171],{},[74,1172,779],{},[50,1174,1175,1178,1183,1188],{},[68,1176,1177],{},"Send one keyed record with a header",[68,1179,1180],{},[74,1181,1182],{},"printf 'hello\\n' | kcat -b localhost:9092 -t orders -P -k order-1 -H source=manual",[68,1184,1185],{},[74,1186,1187],{},"kafkactl produce orders --key=order-1 --value=hello --header source:manual",[68,1189,1190],{},[74,1191,1192],{},"printf 'hello\\n' | kaf produce orders --key order-1 --header source:manual",[10,1194,1195,1196,1198,1199,1202,1203,1206,1207,287,1210,1213,1214,1216],{},"kcl and rpk offer similar format strings, making them closer fits for scripts built around ",[74,1197,91],{},", but their verbs differ: kcat's ",[74,1200,1201],{},"%s"," becomes ",[74,1204,1205],{},"%v",". JSON output also differs: ",[74,1208,1209],{},"kafkactl -o json",[74,1211,1212],{},"kaf --output json"," do not follow kcat's ",[74,1215,556],{}," field layout. When a script parses kcat output, check how the new tool prints null values, binary payloads, and headers.",[39,1218,1220],{"id":1219},"github-repository-metrics","GitHub repository metrics",[10,1222,1223,1224,287,1229,1231,1232,1237],{},"The tables below compare the GitHub activity, maintenance, and public interest of the five CLIs that have their own repositories. Snapshot: 28 Sep 2026. Kafka's scripts ship in ",[13,1225,1228],{"href":1226,"rel":1227},"https:\u002F\u002Fgithub.com\u002Fapache\u002Fkafka",[17],"apache\u002Fkafka",[74,1230,157],{}," in the ",[13,1233,1236],{"href":1234,"rel":1235},"https:\u002F\u002Fgithub.com\u002Fredpanda-data\u002Fredpanda",[17],"Redpanda monorepo","; those repositories measure the broker rather than the CLI, so they are not included.",[633,1239,1241],{"id":1240},"project-overview","Project overview",[44,1243,1244,1276],{},[47,1245,1246],{},[50,1247,1248,1250,1255,1260,1265,1270],{},[53,1249],{},[53,1251,1252],{},[13,1253,18],{"href":15,"rel":1254},[17],[53,1256,1257],{},[13,1258,76],{"href":400,"rel":1259},[17],[53,1261,1262],{},[13,1263,117],{"href":424,"rel":1264},[17],[53,1266,1267],{},[13,1268,113],{"href":462,"rel":1269},[17],[53,1271,1272],{},[13,1273,168],{"href":1274,"rel":1275},"https:\u002F\u002Fgithub.com\u002Fconfluentinc\u002Fcli",[17],[63,1277,1278,1298,1317],{},[50,1279,1280,1283,1286,1289,1292,1295],{},[68,1281,1282],{},"Repository created",[68,1284,1285],{},"30 Mar 2014",[68,1287,1288],{},"10 Dec 2018",[68,1290,1291],{},"11 Sep 2018",[68,1293,1294],{},"11 Apr 2019",[68,1296,1297],{},"3 Apr 2018",[50,1299,1300,1303,1306,1309,1311,1314],{},[68,1301,1302],{},"License",[68,1304,1305],{},"BSD-2-Clause",[68,1307,1308],{},"Apache-2.0",[68,1310,1308],{},[68,1312,1313],{},"BSD-3-Clause",[68,1315,1316],{},"Confluent Community License 1.0",[50,1318,1319,1322,1325,1327,1329,1331],{},[68,1320,1321],{},"Repository status",[68,1323,1324],{},"Not archived · original",[68,1326,1324],{},[68,1328,1324],{},[68,1330,1324],{},[68,1332,1324],{},[10,1334,1335,1336,1339,1340,1345],{},"GitHub does not detect kcat's license automatically because its ",[74,1337,1338],{},"LICENSE"," file keeps the librdkafka heading; the text is the BSD 2-clause license. Confluent CLI is source-available under the ",[13,1341,1344],{"href":1342,"rel":1343},"https:\u002F\u002Fgithub.com\u002Fconfluentinc\u002Fcli\u002Fblob\u002Fmain\u002FLICENSE",[17],"Confluent Community License",", not an OSI-approved open source license.",[633,1347,1349],{"id":1348},"activity","Activity",[44,1351,1352,1384],{},[47,1353,1354],{},[50,1355,1356,1359,1364,1369,1374,1379],{},[53,1357,1358],{},"Metric",[53,1360,1361],{},[13,1362,18],{"href":15,"rel":1363},[17],[53,1365,1366],{},[13,1367,76],{"href":400,"rel":1368},[17],[53,1370,1371],{},[13,1372,117],{"href":424,"rel":1373},[17],[53,1375,1376],{},[13,1377,113],{"href":462,"rel":1378},[17],[53,1380,1381],{},[13,1382,168],{"href":1274,"rel":1383},[17],[63,1385,1386,1406,1426,1446,1466,1485,1504],{},[50,1387,1388,1391,1394,1397,1400,1403],{},[68,1389,1390],{},"Latest default-branch commit",[68,1392,1393],{},"17 Nov 2022",[68,1395,1396],{},"30 Jul 2026",[68,1398,1399],{},"19 Apr 2026",[68,1401,1402],{},"27 Sep 2026",[68,1404,1405],{},"25 Sep 2026",[50,1407,1408,1411,1414,1417,1420,1423],{},[68,1409,1410],{},"Latest GitHub Release",[68,1412,1413],{},"1.7.0 (23 Aug 2021)",[68,1415,1416],{},"v5.20.0 (30 Jul 2026)",[68,1418,1419],{},"v0.2.14 (27 Feb 2026)",[68,1421,1422],{},"v0.20.0 (18 Sep 2026)",[68,1424,1425],{},"v4.77.0 (22 Sep 2026)",[50,1427,1428,1431,1434,1437,1440,1443],{},[68,1429,1430],{},"GitHub Releases (12 mo)",[68,1432,1433],{},"0",[68,1435,1436],{},"8",[68,1438,1439],{},"1",[68,1441,1442],{},"4",[68,1444,1445],{},"43",[50,1447,1448,1451,1454,1457,1460,1463],{},[68,1449,1450],{},"Commits",[68,1452,1453],{},"0 (90 d) · 0 (12 mo)",[68,1455,1456],{},"8 (90 d) · 87 (12 mo)",[68,1458,1459],{},"0 (90 d) · 12 (12 mo)",[68,1461,1462],{},"254 (90 d) · 350 (12 mo)",[68,1464,1465],{},"78 (90 d) · 222 (12 mo)",[50,1467,1468,1471,1474,1477,1479,1482],{},[68,1469,1470],{},"Issue flow (90 d)",[68,1472,1473],{},"0 opened · 0 closed",[68,1475,1476],{},"2 opened · 0 closed",[68,1478,1473],{},[68,1480,1481],{},"1 opened · 3 closed",[68,1483,1484],{},"1 opened · 1 closed",[50,1486,1487,1490,1493,1496,1498,1501],{},[68,1488,1489],{},"PR flow (90 d)",[68,1491,1492],{},"0 opened · 0 merged",[68,1494,1495],{},"12 opened · 3 merged",[68,1497,1492],{},[68,1499,1500],{},"31 opened · 31 merged",[68,1502,1503],{},"130 opened · 80 merged",[50,1505,1506,1509,1512,1515,1518,1521],{},[68,1507,1508],{},"Activity assessment",[68,1510,1511],{},"🔴 No commit on the default branch in 1,410 days.",[68,1513,1514],{},"🟢 8 commits and 3 merged PRs in the last 90 days.",[68,1516,1517],{},"🔴 No commits and no merged PRs in the last 90 days.",[68,1519,1520],{},"🟢 254 commits and 31 merged PRs in the last 90 days.",[68,1522,1523],{},"🟢 78 commits and 80 merged PRs in the last 90 days.",[633,1525,1527],{"id":1526},"maintenance","Maintenance",[44,1529,1530,1561],{},[47,1531,1532],{},[50,1533,1534,1536,1541,1546,1551,1556],{},[53,1535,1358],{},[53,1537,1538],{},[13,1539,18],{"href":15,"rel":1540},[17],[53,1542,1543],{},[13,1544,76],{"href":400,"rel":1545},[17],[53,1547,1548],{},[13,1549,117],{"href":424,"rel":1550},[17],[53,1552,1553],{},[13,1554,113],{"href":462,"rel":1555},[17],[53,1557,1558],{},[13,1559,168],{"href":1274,"rel":1560},[17],[63,1562,1563,1580,1598,1618,1638,1657,1672,1692],{},[50,1564,1565,1568,1570,1572,1574,1577],{},[68,1566,1567],{},"Active commit authors (12 mo)",[68,1569,1433],{},[68,1571,1436],{},[68,1573,1442],{},[68,1575,1576],{},"3",[68,1578,1579],{},"48",[50,1581,1582,1585,1588,1591,1593,1595],{},[68,1583,1584],{},"PR merge distribution (12 mo)",[68,1586,1587],{},"0 people · no recorded non-bot merges",[68,1589,1590],{},"1 person · 100% of merges",[68,1592,1590],{},[68,1594,1590],{},[68,1596,1597],{},"40 people · Top 1: 25% · Top 2: 42%",[50,1599,1600,1603,1606,1609,1612,1615],{},[68,1601,1602],{},"Issue backlog",[68,1604,1605],{},"138 open · median age 5.3 y",[68,1607,1608],{},"12 open · median age 2.4 y",[68,1610,1611],{},"66 open · median age 5.9 y",[68,1613,1614],{},"0 open issues",[68,1616,1617],{},"14 open · median age 2.5 y",[50,1619,1620,1623,1626,1629,1632,1635],{},[68,1621,1622],{},"PR backlog",[68,1624,1625],{},"23 open · median age 4 y",[68,1627,1628],{},"5 open · median age 19 d",[68,1630,1631],{},"15 open · median age 1.1 y",[68,1633,1634],{},"0 open PRs",[68,1636,1637],{},"71 open · median age 73 d",[50,1639,1640,1643,1646,1649,1651,1654],{},[68,1641,1642],{},"Median PR merge time (90 d)",[68,1644,1645],{},"N\u002FA — no merged PRs in window",[68,1647,1648],{},"1.4 h (n=3 — small sample)",[68,1650,1645],{},[68,1652,1653],{},"\u003C1 h (n=31)",[68,1655,1656],{},"1 d (n=80)",[50,1658,1659,1662,1664,1666,1668,1670],{},[68,1660,1661],{},"Published GitHub security advisories",[68,1663,1433],{},[68,1665,1433],{},[68,1667,1433],{},[68,1669,1433],{},[68,1671,1433],{},[50,1673,1674,1677,1680,1683,1686,1689],{},[68,1675,1676],{},"Responsiveness assessment",[68,1678,1679],{},"🔴 No PRs merged in 90 d, while 23 open PRs have a median age of 4 y.",[68,1681,1682],{},"🟢 The median open PR age is 19 d.",[68,1684,1685],{},"🔴 No PRs merged in 90 d, while 15 open PRs have a median age of 1.1 y.",[68,1687,1688],{},"🟢 New PRs merge in a median of \u003C1 h (n=31).",[68,1690,1691],{},"🟡 Median open PR age 73 d exceeds 60 d.",[50,1693,1694,1697,1700,1703,1705,1707],{},[68,1695,1696],{},"PR merge concentration assessment",[68,1698,1699],{},"N\u002FA — no recorded merges in 12 mo.",[68,1701,1702],{},"🔴 1 person merged PRs in 12 mo and handled 100% of merges.",[68,1704,1702],{},[68,1706,1702],{},[68,1708,1709],{},"🟢 40 people merged PRs in 12 mo; the most active account handled 25% of merges.",[10,1711,1712,1713,1716],{},"PR merge distribution counts non-bot ",[74,1714,1715],{},"mergedBy"," accounts, so automated merges may undercount human reviewers.",[633,1718,1720],{"id":1719},"public-usage-and-interest","Public usage and interest",[44,1722,1723,1754],{},[47,1724,1725],{},[50,1726,1727,1729,1734,1739,1744,1749],{},[53,1728,1358],{},[53,1730,1731],{},[13,1732,18],{"href":15,"rel":1733},[17],[53,1735,1736],{},[13,1737,76],{"href":400,"rel":1738},[17],[53,1740,1741],{},[13,1742,117],{"href":424,"rel":1743},[17],[53,1745,1746],{},[13,1747,113],{"href":462,"rel":1748},[17],[53,1750,1751],{},[13,1752,168],{"href":1274,"rel":1753},[17],[63,1755,1756,1776,1796],{},[50,1757,1758,1761,1764,1767,1770,1773],{},[68,1759,1760],{},"Stars",[68,1762,1763],{},"5,782",[68,1765,1766],{},"1,071",[68,1768,1769],{},"2,442",[68,1771,1772],{},"232",[68,1774,1775],{},"80",[50,1777,1778,1781,1784,1787,1790,1793],{},[68,1779,1780],{},"Forks",[68,1782,1783],{},"498",[68,1785,1786],{},"110",[68,1788,1789],{},"163",[68,1791,1792],{},"25",[68,1794,1795],{},"37",[50,1797,1798,1801,1807,1814,1821,1824],{},[68,1799,1800],{},"Homebrew installs (365 d)",[68,1802,1803],{},[13,1804,1806],{"href":28,"rel":1805},[17],"11,094",[68,1808,1809],{},[13,1810,1813],{"href":1811,"rel":1812},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fkafkactl",[17],"2,394",[68,1815,1816],{},[13,1817,1820],{"href":1818,"rel":1819},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fkaf",[17],"226",[68,1822,1823],{},"Not in Homebrew core",[68,1825,1823],{},[10,1827,1828],{},"Homebrew figures count installs through the main formula catalog in the 365 days ending 28 September 2026, not unique users. They are the closest public usage signal for a CLI; GitHub dependents are left out because people install these tools as binaries rather than import them as libraries. Stars measure interest, not use: kaf has more than twice kafkactl's stars but about a tenth of its Homebrew installs.",[10,1830,1831,1832,1836,1837,1841,1842,1846,1847,1849],{},"Among the other tools in this guide, ",[13,1833,1011],{"href":1834,"rel":1835},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fkaskade",[17]," had 1,028 Homebrew installs, ",[13,1838,1027],{"href":1839,"rel":1840},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Fktea",[17]," 330, and ",[13,1843,939],{"href":1844,"rel":1845},"https:\u002F\u002Fformulae.brew.sh\u002Fformula\u002Ftopicctl",[17]," 63 over the same period. ",[74,1848,157],{}," installs through Redpanda's own tap, which does not publish comparable figures.",[633,1851,1853],{"id":1852},"overall-repository-signals","Overall repository signals",[1855,1856,1857,1863,1868,1873,1878],"ul",{},[1858,1859,1860,1862],"li",{},[217,1861,18],{}," has no default-branch commit since November 2022 and no release since August 2021, with 138 open issues and 23 open PRs waiting; it still leads Homebrew installs by a wide margin.",[1858,1864,1865,1867],{},[217,1866,76],{}," ships releases steadily (8 in 12 months) and has the second-highest Homebrew installs; one account handled all recorded PR merges in the past year.",[1858,1869,1870,1872],{},[217,1871,117],{}," has more stars than kafkactl but no commits or merged PRs in the last 90 days, and its open issues have a median age of 5.9 years.",[1858,1874,1875,1877],{},[217,1876,113],{}," has the most commits of the five, 254 in 90 days, and no open issues or PRs; it has the fewest GitHub stars among the four standalone Apache Kafka CLIs, and one account handled all merges.",[1858,1879,1880,1882],{},[217,1881,168],{}," releases most often and spreads PR merges across the most accounts; its GitHub stars say little about its use, which follows Confluent Cloud and Platform adoption.",[10,1884,1885],{},"These are maintenance and adoption signals, not evidence of runtime quality or feature fit.",[39,1887,1889],{"id":1888},"when-a-desktop-ui-is-faster-than-a-cli","When a desktop UI is faster than a CLI",[10,1891,1892],{},"A Kafka CLI is the right tool for scripts, CI jobs, and SSH sessions. It slows down when an investigation means reading many records, moving between topics, schemas, and consumer groups, and re-running commands with different flags to compare results.",[10,1894,1895,1899],{},[13,1896,1898],{"href":1897},"\u002F","Kafma"," is a desktop Kafka UI that connects to the same clusters as your CLI, including over SASL, TLS, and AWS MSK IAM.",[633,1901,1903],{"id":1902},"search-and-inspect-records","Search and inspect records",[10,1905,1906,1907,1910,1911,1915],{},"With kcat, finding one record means piping a bounded read through ",[74,1908,1909],{},"grep"," and reformatting the match. In Kafma's ",[13,1912,1914],{"href":1913},"\u002Ffeatures\u002Fkafka-console","Kafka console",", load a range from the beginning, an offset, or a timestamp, then filter by key or value. Expand a match to see its headers, partition, offset, timestamp, and decoded value in one place. Search covers the records already loaded; it does not scan the whole topic.",[10,1917,1918],{},[1919,1920],"img",{"alt":1921,"height":1922,"src":1923,"width":1924},"Kafma filtering Kafka records by key and inspecting a decoded Avro record with its headers and metadata",1520,"https:\u002F\u002Fmedia.kafma.app\u002Fblog\u002Fkafka-viewer-debugging-workflow\u002Ffind-and-inspect-kafka-message.png",2160,[633,1926,1928],{"id":1927},"decode-avro-protobuf-and-json-schema","Decode Avro, Protobuf, and JSON Schema",[10,1930,1931,1932,1934,1935,1939,1940,1943,1944,1948],{},"kcat's Schema Registry decoding is limited to Avro, and kafkactl and kaf need local ",[74,1933,568],{}," files for Protobuf. Kafma reads the schema ID from Confluent-framed records and ",[13,1936,1938],{"href":1937},"\u002Fdocs\u002Fconsole\u002Fdecoding-messages","decodes"," Avro, Protobuf, and JSON Schema through Schema Registry, while ",[217,1941,1942],{},"Raw"," always shows the original bytes. The ",[13,1945,1947],{"href":1946},"\u002Ffeatures\u002Fkafka-schema-registry","Schema Registry UI"," lists subjects, versions, and schema IDs, so you can match a record to the schema that wrote it.",[633,1950,1952],{"id":1951},"watch-consumer-lag-over-time","Watch consumer lag over time",[10,1954,1955,1958,1959,1963,1964,1968],{},[74,1956,1957],{},"kafka-consumer-groups.sh --describe"," prints one snapshot; to see a trend, you run it again and compare. Kafma's ",[13,1960,1962],{"href":1961},"\u002Ffeatures\u002Fkafka-consumer-groups","consumer group UI"," shows total and max lag, a recent lag trend, and lag per partition, with unassigned partitions flagged. ",[13,1965,1967],{"href":1966},"\u002Fdocs\u002Fconsole\u002Fconsuming-messages#live-and-watch-group-modes","Watch Group"," opens records around each partition's committed offset without joining the group or changing its offsets.",[10,1970,1971],{},[1919,1972],{"alt":1973,"height":1974,"src":1975,"width":1976},"Kafma consumer group lag details with total and maximum lag, a recent trend, and lag by partition",1356,"https:\u002F\u002Fmedia.kafma.app\u002Fdocs\u002Fconsumer-groups\u002Flag\u002Fconsumer-lag-details.png",1562,[633,1978,1980],{"id":1979},"copy-records-between-clusters","Copy records between clusters",[10,1982,1983,1984,1987,1988,1991,1992,1995,1996,2000,2001,2004,2005,2009],{},"A ",[74,1985,1986],{},"kcat -C | kcat -P"," pipe can carry keys with ",[74,1989,1990],{},"-K",", but ",[74,1993,1994],{},"-H"," only adds fixed headers, so each record's own headers are lost. ",[13,1997,1999],{"href":1998},"\u002Ffeatures\u002Fkafka-data-clone","Kafma Data Clone"," copies a selected range of records to a topic on another cluster with keys, values, timestamps, headers, and tombstones, and can mask selected value fields on the way. With ",[217,2002,2003],{},"Structure + Data",", it also registers the schemas those records use and rewrites their schema IDs for the target registry. See the ",[13,2006,2008],{"href":2007},"\u002Fdocs\u002Fdata-clone\u002Foverview","Data Clone guide"," for copy behavior.",[10,2011,2012],{},[1919,2013],{"alt":2014,"height":2015,"src":2016,"width":2017},"Kafma cloning selected Kafka records and masked fields into another cluster",1564,"https:\u002F\u002Fmedia.kafma.app\u002Fchangelog\u002Fv1.0.0\u002Fhomepage-data-clone.png",2740,[10,2019,2020,2024],{},[13,2021,2023],{"href":2022},"\u002Fdownload","Download Kafma"," and connect to the cluster you already use with your CLI.",[39,2026,2028],{"id":2027},"frequently-asked-questions","Frequently asked questions",[633,2030,2032],{"id":2031},"is-kcat-still-maintained","Is kcat still maintained?",[10,2034,2035,2036,2040,2041,2043],{},"Not actively. Its last GitHub release was ",[13,2037,2039],{"href":22,"rel":2038},[17],"1.7.0 in August 2021",", and its default branch has had no commits since November 2022. Homebrew links it against a separately updated ",[74,2042,102],{},", so client-library fixes can still reach packaged builds.",[633,2045,2047],{"id":2046},"what-is-the-best-kcat-alternative","What is the best kcat alternative?",[10,2049,2050,2051,2053,2054,2056,2057,287,2059,2061,2062,2064],{},"For a general Apache Kafka CLI, start with ",[74,2052,76],{},": it covers records and administration and ships regular releases. If your scripts depend on kcat's ",[74,2055,91],{}," format strings, ",[74,2058,113],{},[74,2060,157],{}," are closer fits. See ",[13,2063,83],{"href":82}," for command equivalents.",[633,2066,2068],{"id":2067},"can-kcat-decode-protobuf-from-schema-registry","Can kcat decode Protobuf from Schema Registry?",[10,2070,2071,2072,248,2074,2076,2077,225],{},"No. kcat's Schema Registry support covers Avro only. ",[74,2073,113],{},[74,2075,157],{},", and Confluent CLI decode Avro, Protobuf, and JSON Schema through Schema Registry; see the ",[13,2078,2080],{"href":2079},"#kafka-cli-tools-compared","feature matrix",[633,2082,2084],{"id":2083},"how-do-i-check-consumer-group-lag-from-the-command-line","How do I check consumer group lag from the command line?",[10,2086,2087,2088,2091,2092,248,2095,744,2098,2101,2102,248,2105,744,2108,2111,2112,225],{},"Run ",[74,2089,2090],{},"bin\u002Fkafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group"," from an Apache Kafka installation. Its ",[74,2093,2094],{},"CURRENT-OFFSET",[74,2096,2097],{},"LOG-END-OFFSET",[74,2099,2100],{},"LAG"," columns show the backlog for each partition. ",[74,2103,2104],{},"kafkactl describe consumer-group my-group",[74,2106,2107],{},"kaf group describe my-group",[74,2109,2110],{},"kcl group describe my-group"," offer the same kind of snapshot. To see whether lag rises or falls while group details refresh, use ",[13,2113,2115],{"href":2114},"\u002Fdocs\u002Fconsumer-groups\u002Flag","Kafma's recent lag trend",[633,2117,2119],{"id":2118},"how-do-i-install-kcat-on-windows","How do I install kcat on Windows?",[10,2121,2122,2123,2128,2129,225],{},"The project does not publish an official prebuilt Windows executable with its GitHub releases. Follow the ",[13,2124,2127],{"href":2125,"rel":2126},"https:\u002F\u002Fgithub.com\u002Fedenhill\u002Fkcat#build-for-windows",[17],"source build instructions",", which use NuGet and MSBuild, or run a Linux build through WSL. For a Windows install through a package manager, ",[13,2130,2133,2134],{"href":2131,"rel":2132},"https:\u002F\u002Fgithub.com\u002Fdeviceinsight\u002Fkafkactl#installation",[17],"kafkactl documents ",[74,2135,2136],{},"winget install kafkactl",[633,2138,2140],{"id":2139},"what-is-the-difference-between-kcat-and-kafkacat","What is the difference between kcat and kafkacat?",[10,2142,2143,2144,2149,2150,225],{},"They are the same project. It was ",[13,2145,2148],{"href":2146,"rel":2147},"https:\u002F\u002Fgithub.com\u002Fedenhill\u002Fkcat#what-happened-to-kafkacat",[17],"renamed in August 2021",", so older packages and examples may still say ",[74,2151,2152],{},"kafkacat",[633,2154,2156],{"id":2155},"is-there-an-official-kafka-cli","Is there an official Kafka CLI?",[10,2158,2159,2160,2164,2165,2167],{},"Yes. Apache Kafka ships ",[13,2161,2163],{"href":2162},"#built-in-scripts-or-a-standalone-cli","command-line scripts"," with every distribution; they require Java. Confluent CLI and ",[74,2166,157],{}," are the official CLIs for Confluent and Redpanda.",[633,2169,2171],{"id":2170},"can-confluent-cli-connect-directly-to-an-apache-kafka-broker","Can Confluent CLI connect directly to an Apache Kafka broker?",[10,2173,2174,2175,2177,2178,2181],{},"Yes. Its produce and consume commands connect through ",[74,2176,911],{},"; see ",[13,2179,168],{"href":2180},"#confluent-cli"," for the REST Proxy requirement on other cluster operations.",[633,2183,2185],{"id":2184},"which-cli-should-i-use-for-aws-msk-iam","Which CLI should I use for AWS MSK IAM?",[10,2187,2188,287,2190,2192,2193,2195,2196,2199,2200,2204,2205,2207],{},[74,2189,113],{},[74,2191,117],{}," support AWS MSK IAM out of the box. ",[74,2194,76],{}," needs its ",[13,2197,413],{"href":411,"rel":2198},[17],", and the bundled Kafka scripts need ",[13,2201,2203],{"href":361,"rel":2202},[17],"AWS's Java IAM library"," on the classpath. kcat and ",[74,2206,157],{}," have no built-in MSK IAM support.",[633,2209,2211],{"id":2210},"does-rpk-work-with-apache-kafka","Does rpk work with Apache Kafka?",[10,2213,2214,2215,2218],{},"Yes. Common topic, group, and record commands use the Kafka protocol; see ",[13,2216,157],{"href":2217},"#rpk"," for the Redpanda-specific limits.",[633,2220,2222],{"id":2221},"how-do-i-manage-kafka-connect-from-the-command-line","How do I manage Kafka Connect from the command line?",[10,2224,2225,2226,290,2231,2234,2235,2237,2238,2245,2246,2249],{},"Use the ",[13,2227,2230],{"href":2228,"rel":2229},"https:\u002F\u002Fkafka.apache.org\u002F43\u002Fkafka-connect\u002Fuser-guide\u002F#rest-api",[17],"Kafka Connect REST API",[74,2232,2233],{},"curl",", or your platform's tooling. To manage connectors declaratively from Git, ",[13,2236,979],{"href":206}," covers them too. ",[13,2239,2242],{"href":2240,"rel":2241},"https:\u002F\u002Fgithub.com\u002Fkcctl\u002Fkcctl\u002Freleases",[17],[74,2243,2244],{},"kcctl"," is a Connect-specific CLI; its latest candidate release is ",[74,2247,2248],{},"v1.0.0.CR4"," from November 2024, and the project also publishes early-access builds.",[39,2251,2253],{"id":2252},"conclusion","Conclusion",[10,2255,2256,2257,2259,2260,2262,2263,2265,2266,2268],{},"Keep kcat for existing pipelines that already work, especially those built around ",[74,2258,91],{}," format strings. For new work on Apache Kafka, start with ",[74,2261,76],{},", which covers records and administration and ships regular releases. Choose ",[74,2264,113],{}," when you need share groups, MSK IAM without a plugin, or all three Schema Registry formats, and use ",[74,2267,157],{}," or Confluent CLI when you run Redpanda or Confluent. For browsing over SSH, try kaskade or ktea.",[10,2270,2271],{},"When an investigation spans many records, schemas, and consumer groups, use Kafma alongside your CLI.",[10,2273,2274],{},"This guide is maintained by the team behind Kafma.",[2276,2277,2278],"style",{},"html pre.shiki code .sS_Im, html code.shiki .sS_Im{--shiki-default:#FFFFFF;--shiki-light:#0A0B10}html pre.shiki code .spVhG, html code.shiki .spVhG{--shiki-default:#E7E8EA;--shiki-light:#1A1C22}html pre.shiki code .sIsOz, html code.shiki .sIsOz{--shiki-default:#83CFAE;--shiki-light:#1F7A52}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":668,"searchDepth":2280,"depth":2280,"links":2281},3,[2282,2284,2285,2293,2294,2295,2296,2303,2309,2322],{"id":41,"depth":2283,"text":42},2,{"id":228,"depth":2283,"text":229},{"id":313,"depth":2283,"text":314,"children":2286},[2287,2288,2289,2290,2291,2292],{"id":18,"depth":2280,"text":18},{"id":76,"depth":2280,"text":76},{"id":117,"depth":2280,"text":117},{"id":157,"depth":2280,"text":157},{"id":113,"depth":2280,"text":113},{"id":887,"depth":2280,"text":168},{"id":931,"depth":2283,"text":932},{"id":1000,"depth":2283,"text":1001},{"id":1034,"depth":2283,"text":83},{"id":1219,"depth":2283,"text":1220,"children":2297},[2298,2299,2300,2301,2302],{"id":1240,"depth":2280,"text":1241},{"id":1348,"depth":2280,"text":1349},{"id":1526,"depth":2280,"text":1527},{"id":1719,"depth":2280,"text":1720},{"id":1852,"depth":2280,"text":1853},{"id":1888,"depth":2283,"text":1889,"children":2304},[2305,2306,2307,2308],{"id":1902,"depth":2280,"text":1903},{"id":1927,"depth":2280,"text":1928},{"id":1951,"depth":2280,"text":1952},{"id":1979,"depth":2280,"text":1980},{"id":2027,"depth":2283,"text":2028,"children":2310},[2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321],{"id":2031,"depth":2280,"text":2032},{"id":2046,"depth":2280,"text":2047},{"id":2067,"depth":2280,"text":2068},{"id":2083,"depth":2280,"text":2084},{"id":2118,"depth":2280,"text":2119},{"id":2139,"depth":2280,"text":2140},{"id":2155,"depth":2280,"text":2156},{"id":2170,"depth":2280,"text":2171},{"id":2184,"depth":2280,"text":2185},{"id":2210,"depth":2280,"text":2211},{"id":2221,"depth":2280,"text":2222},{"id":2252,"depth":2283,"text":2253},"2026-09-28","kcat has not shipped a release since 2021. Compare Kafka CLI alternatives in 2026: kafkactl, kcl, kaf, rpk, Confluent CLI, and Kafka scripts.","md",{},true,null,"\u002Fblog\u002Fkafka-cli-tools",false,{"title":5,"description":2324},{"loc":2329},"blog\u002Fkafka-cli-tools",[2335,18],"Kafka CLI","MjIsgvjcyd9rH90lXRu8MBupCD0TidVtkDUFeCL37Cs",1790595073487]