<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>KAFKA on Pigsty v5.0</title>
    <link>https://pgsty.pro/module/kafka/</link>
    <description>Recent content in KAFKA on Pigsty v5.0</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    
    
    
      <lastBuildDate>Mon, 01 Jan 0001 00:00:00 +0000</lastBuildDate>
    
    
      <atom:link href="https://pgsty.pro/module/kafka/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>Module: KAFKA</title>
        <link>https://pgsty.pro/docs/kafka/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://kafka.apache.org/&#34;&gt;Kafka&lt;/a&gt; is a distributed event-streaming platform. Pigsty&amp;rsquo;s &lt;a href=&#34;https://pgsty.pro/docs/kafka/&#34;&gt;&lt;code&gt;KAFKA&lt;/code&gt;&lt;/a&gt; module deploys &lt;strong&gt;Apache Kafka 4.1+ dynamic KRaft&lt;/strong&gt; clusters on managed nodes from RPM/DEB packages, with unified management of security, resources, lifecycle, and observability.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Current status: Beta module&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;The Kafka module is currently in Beta. Test it thoroughly and confirm it meets your requirements before using it in serious production.&#xA;That includes dynamic KRaft, strict rolling restart, TLS/SCRAM/ACL, declarative topics/users, credential and certificate rotation, and the full monitoring pipeline.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Quick Start</title>
        <link>https://pgsty.pro/docs/kafka/start/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/start/</guid>
        <description>&lt;p&gt;This tutorial starts from a minimal single-node cluster, walking through topic creation and message read/write; it then deploys a separate, secured three-node cluster with application users, ACLs, quotas, and production topics; finally, it demonstrates core parameter changes, client access, monitoring verification, and pre-launch checks.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--note&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-circle-info&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Tutorial Scope&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;Here, &amp;ldquo;from scratch&amp;rdquo; means starting before any Kafka is deployed. You will need a working Pigsty admin node with the base &lt;a href=&#34;https://pgsty.pro/docs/infra/&#34;&gt;&lt;code&gt;INFRA&lt;/code&gt;&lt;/a&gt; services already deployed; if you don&amp;rsquo;t have one yet, complete the &lt;a href=&#34;https://pgsty.pro/docs/setup/install/&#34;&gt;Pigsty quick install&lt;/a&gt; first. The target nodes require SSH/sudo access and must be manageable by the &lt;a href=&#34;https://pgsty.pro/docs/node/&#34;&gt;&lt;code&gt;NODE&lt;/code&gt;&lt;/a&gt; module.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Configuration</title>
        <link>https://pgsty.pro/docs/kafka/config/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/config/</guid>
        <description>&lt;p&gt;The KAFKA module expresses cluster intent through 15 persistent public parameters; everything else — topology, listeners, storage subdirectories, replication safety, authorization, and Exporter placement — is derived by the role in a single, consistent way. For a first deployment, start with the &lt;a href=&#34;https://pgsty.pro/docs/kafka/start/&#34;&gt;Quickstart&lt;/a&gt;; for the full field reference, see &lt;a href=&#34;https://pgsty.pro/docs/kafka/param/&#34;&gt;Parameters&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--warning&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-triangle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Plan First, Then Format&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;&lt;code&gt;kafka_seq&lt;/code&gt; becomes the KRaft &lt;code&gt;node.id&lt;/code&gt;. For a new cluster, the randomly generated Cluster ID, the initial controller identities, the security profile, and the initial replication policy are all written into the bootstrap manifest. Once storage has been formatted, do not casually change identities, the security profile, or the controller set. The role validates the live state against the manifest and fails closed on any conflict; it never silently overwrites or reformats data.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Parameters</title>
        <link>https://pgsty.pro/docs/kafka/param/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/param/</guid>
        <description>&lt;p&gt;The KAFKA role deliberately exposes only 15 persistent parameters. Details such as topology, listeners, security implementation, storage subdirectories, replication safety, and Exporter placement are derived by the role in a single, consistent way, and cannot be overridden as additional persistent variables.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;parameter-overview&#34;&gt;Parameter Overview&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--full td-table-scroll--static&#34;&gt;&#xA;&lt;table class=&#34;full-width&#34;&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Parameter&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: center&#34;&gt;Level&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Default&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34; style=&#34;text-align: left&#34;&gt;Description&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_cluster&#34;&gt;&lt;code&gt;kafka_cluster&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;required&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Kafka cluster identity&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_seq&#34;&gt;&lt;code&gt;kafka_seq&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;required&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Cluster-unique KRaft &lt;code&gt;node.id&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_role&#34;&gt;&lt;code&gt;kafka_role&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;combined&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;combined&lt;/code&gt;, &lt;code&gt;broker&lt;/code&gt;, or &lt;code&gt;controller&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_cluster_id&#34;&gt;&lt;code&gt;kafka_cluster_id&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;unset&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Takeover/recovery assertion; randomly generated for a new cluster&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_data&#34;&gt;&lt;code&gt;kafka_data&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;/data/kafka&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Role-owned data root directory&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_heap_opts&#34;&gt;&lt;code&gt;kafka_heap_opts&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;-Xms1G -Xmx1G&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Kafka JVM heap&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_port&#34;&gt;&lt;code&gt;kafka_port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;9092&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Broker/client port&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_controller_port&#34;&gt;&lt;code&gt;kafka_controller_port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;9093&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;KRaft controller port&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_rack&#34;&gt;&lt;code&gt;kafka_rack&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;unset&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Broker fault-domain label&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_parameters&#34;&gt;&lt;code&gt;kafka_parameters&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster/Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Non-role-owned broker parameters&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_jmx_exporter_port&#34;&gt;&lt;code&gt;kafka_jmx_exporter_port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;9404&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;JMX Exporter HTTP port&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_exporter_port&#34;&gt;&lt;code&gt;kafka_exporter_port&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Instance&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;9308&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Protocol Exporter HTTP port&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_security&#34;&gt;&lt;code&gt;kafka_security&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;plaintext&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;plaintext&lt;/code&gt; or the production &lt;code&gt;scram&lt;/code&gt; profile&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_users&#34;&gt;&lt;code&gt;kafka_users&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;User credentials, ACLs, and quotas&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;a href=&#34;https://pgsty.pro/docs/kafka/param/#kafka_topics&#34;&gt;&lt;code&gt;kafka_topics&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: center&#34;&gt;Cluster&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;&lt;code&gt;[]&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td style=&#34;text-align: left&#34;&gt;Declarative topics&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;code&gt;kafka_cluster&lt;/code&gt; and &lt;code&gt;kafka_seq&lt;/code&gt; must be defined; &lt;code&gt;kafka_role&lt;/code&gt; has a real default. The cluster&amp;rsquo;s roles are either all omitted or all declared explicitly.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Administration</title>
        <link>https://pgsty.pro/docs/kafka/admin/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/admin/</guid>
        <description>&lt;p&gt;The KAFKA module installs Kafka under &lt;code&gt;/opt/kafka&lt;/code&gt;, manages the service with Systemd, and keeps its persistent intent in &lt;code&gt;pigsty.yml&lt;/code&gt;. The files generated on the nodes are not meant to be edited by hand.&lt;/p&gt;&#xA;&lt;p&gt;All of the Kafka CLI examples below use the role-generated &lt;code&gt;/etc/kafka/admin.properties&lt;/code&gt;. Even when the current profile is &lt;code&gt;plaintext&lt;/code&gt;, keep &lt;code&gt;--command-config&lt;/code&gt; on every command: that way the command structure stays the same when you switch the admin channel to &lt;code&gt;scram&lt;/code&gt;. Replace &lt;code&gt;&amp;lt;broker&amp;gt;:9092&lt;/code&gt; with a reachable &lt;code&gt;inventory_hostname&lt;/code&gt; and port.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Playbook</title>
        <link>https://pgsty.pro/docs/kafka/playbook/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/playbook/</guid>
        <description>&lt;p&gt;The KAFKA module ships two playbooks: &lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/kafka.yml&#34;&gt;&lt;code&gt;kafka.yml&lt;/code&gt;&lt;/a&gt; deploys an Apache Kafka 4.1+ dynamic KRaft cluster and converges its security,&#xA;resource, and monitoring state; &lt;a href=&#34;https://github.com/pgsty/pigsty/blob/main/kafka-rm.yml&#34;&gt;&lt;code&gt;kafka-rm.yml&lt;/code&gt;&lt;/a&gt; tears down a cluster or removes a member.&lt;/p&gt;&#xA;&lt;div class=&#34;td-callout td-callout--warning&#34; role=&#34;note&#34;&gt;&#xA;  &lt;div class=&#34;td-callout__title&#34;&gt;&lt;i class=&#34;td-callout__icon fa-solid fa-triangle-exclamation&#34; aria-hidden=&#34;true&#34;&gt;&lt;/i&gt;&lt;span class=&#34;td-callout__label&#34;&gt;Cluster Completeness Constraint&lt;/span&gt;&lt;/div&gt;&#xA;  &lt;div class=&#34;td-callout__body&#34;&gt;&#xA;&lt;p&gt;Every selected &lt;code&gt;kafka_cluster&lt;/code&gt; must include all of its members: a partial selection fails before anything is written, while one cluster, several complete clusters, or a bare run over the whole inventory are all allowed. Run &lt;code&gt;--check&lt;/code&gt; first against the exact same target; before the real run, still verify the backup/rebuild intent, capacity, business window, rollback plan, and change approval by hand.&lt;/p&gt;</description>
      </item>
    <item>
        <title>Monitoring</title>
        <link>https://pgsty.pro/docs/kafka/monitor/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/monitor/</guid>
        <description>&lt;p&gt;Pigsty gives the KAFKA module a unified observability stack that combines metrics, logs, dashboards, and alerts. Monitoring covers both the Kafka JVM internals and the Kafka protocol view, so you never end up seeing only that the process is alive without visibility into partitions, ISR, and consumer lag, nor seeing only cluster metadata without visibility into the JVM, request queues, and KRaft controller health.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;scrape-architecture&#34;&gt;Scrape Architecture&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The KAFKA module uses two complementary exporters:&lt;/p&gt;</description>
      </item>
    <item>
        <title>Metrics</title>
        <link>https://pgsty.pro/docs/kafka/metric/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/metric/</guid>
        <description>&lt;p&gt;The KAFKA module uses two kinds of metric sources, both registered under the same &lt;code&gt;job=kafka&lt;/code&gt; scrape job: the JMX target (with a &lt;code&gt;role&lt;/code&gt; label) collects the internal state of each JVM, while the protocol exporter target (without a &lt;code&gt;role&lt;/code&gt; label) collects the state of the logical cluster, topics, partitions, and consumer groups over the Kafka protocol. The protocol exporter is placed only on the one or two broker-capable nodes with the smallest &lt;code&gt;kafka_seq&lt;/code&gt;, and a single-broker cluster runs just one.&lt;/p&gt;</description>
      </item>
    <item>
        <title>FAQ</title>
        <link>https://pgsty.pro/docs/kafka/faq/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://pgsty.pro/docs/kafka/faq/</guid>
        <description>&lt;h2 id=&#34;how-mature-is-the-current-kafka-module&#34;&gt;How mature is the current KAFKA module?&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The current role implements a production-grade v1 baseline: dynamic KRaft, full cluster guardrails, cold-start/repair, serial broker admission and dynamic controller join, member retirement (including dead nodes), three-command failed-node replacement, strict rolling restart, TLS/SCRAM/ACL, declarative convergence of topics/users, internal credential and certificate rotation, and the full monitoring pipeline.&lt;/p&gt;&#xA;&lt;p&gt;It is not a managed Kafka product. Production still requires &lt;code&gt;kafka_security: scram&lt;/code&gt;, an odd number of controllers, sufficient brokers/RF/minISR, plus your own capacity planning, reassignment/data balancing, upgrade, backup, restore, and failure drills. The default &lt;code&gt;plaintext&lt;/code&gt; is only suitable for development or a trusted, isolated network.&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
