{"id":1141,"date":"2026-08-19T01:25:58","date_gmt":"2026-08-19T01:25:58","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1141"},"modified":"2026-08-19T01:26:00","modified_gmt":"2026-08-19T01:26:00","slug":"kafka-master-tutorials-series-3-capacity-planning-in-confluent-cloud","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/kafka-master-tutorials-series-3-capacity-planning-in-confluent-cloud\/","title":{"rendered":"Kafka Master Tutorials Series: 3 -Capacity Planning in Confluent Cloud"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1. What is Kafka Capacity Planning?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Capacity planning means calculating how much Kafka capacity your application needs before production traffic arrives.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In simple words:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">How big should my Kafka cluster be so that it can handle normal traffic, peak traffic, failures, and future growth without slowing down?<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">For a <strong>Confluent Cloud Dedicated cluster<\/strong>, capacity is primarily expressed using <strong>CKUs \u2014 Confluent Units for Kafka<\/strong>. Adding CKUs increases the capacity of the Dedicated cluster. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/cluster-types.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your original production checklist already identifies the right inputs: peak produce\/consume throughput, messages\/sec, message size, partitions, producers, consumer groups, connections, retention, and expected growth.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. Why Capacity Planning Matters<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose normal traffic is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>20 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">but peak traffic reaches:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you designed Kafka only for 20 MB\/sec:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Normal Traffic\n     \u2502\n     \u25bc\n   Kafka\n     \u2502\n     \u2705<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">during peak traffic:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Traffic Spike\n100 MB\/sec\n     \u2502\n     \u25bc\nKafka Saturation\n     \u2502\n     \u25bc\nThrottling\n     \u2502\n     \u25bc\nProducer Latency\n     \u2502\n     \u25bc\nConsumer Lag\n     \u2502\n     \u25bc\nApplication Problems<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Never size Kafka for average traffic only.\n\nSize primarily for:\n\nPeak Traffic\n     +\nCapacity Headroom\n     +\nExpected Growth\n     +\nFailure\/Burst Capacity<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. What is a CKU?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a Confluent Cloud <strong>Dedicated cluster<\/strong>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CKU\n=\nConfluent Unit for Kafka<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think of a CKU as a unit of Kafka capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Current Confluent documentation gives these per-CKU planning values for Dedicated clusters: (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/cluster-types.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Capacity dimension<\/th><th>Dedicated CKU<\/th><\/tr><\/thead><tbody><tr><td>Ingress<\/td><td><strong>60 MB\/sec<\/strong><\/td><\/tr><tr><td>Egress<\/td><td><strong>180 MB\/sec<\/strong><\/td><\/tr><tr><td>Partitions, pre-replication<\/td><td><strong>4,500<\/strong><\/td><\/tr><tr><td>Client connections<\/td><td><strong>18,000<\/strong><\/td><\/tr><tr><td>New connection attempts<\/td><td><strong>500\/sec<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This means you do <strong>not<\/strong> calculate Kafka size from only one number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You evaluate several dimensions.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. Five Important Capacity Dimensions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Think of cluster capacity as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>                   Kafka Capacity\n                         \u2502\n       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n       \u2502                 \u2502                  \u2502\n       \u25bc                 \u25bc                  \u25bc\n    Ingress            Egress           Partitions\n                                            \u2502\n                              \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n                              \u25bc                          \u25bc\n                         Connections                 Requests<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You calculate each separately.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then the <strong>largest requirement<\/strong> normally determines the starting CKU count.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. Dimension 1 \u2014 Ingress<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is ingress?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ingress means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Data being written <strong>into Kafka<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>Producer\n   \u2502\n   \u2502 Events\n   \u25bc\n Kafka<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Messages\/sec = 100,000\nAverage message = 1 KB<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Approximate ingress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100,000 \u00d7 1 KB\n\n\u2248 100 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A Dedicated CKU currently provides approximately:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>60 MB\/sec ingress<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Required CKUs\n=\n100 \/ 60\n\n=\n1.67<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Always round up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But there is a problem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two CKUs provide approximately:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 \u00d7 60\n=\n120 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Your peak is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Usage:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 \/ 120\n\u2248 83%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That leaves little headroom.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A better production candidate could therefore be:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 \u00d7 60\n=\n180 MB\/sec\n\n100 \/ 180\n\u2248 56%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Much healthier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Dimension 2 \u2014 Egress<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">What is egress?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Egress means:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Data consumers read <strong>out of Kafka<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>                   Kafka\n                     \u2502\n          \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n          \u25bc          \u25bc          \u25bc\n       Billing    Analytics    Fraud<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is extremely important because <strong>multiple consumer groups independently consume the same records<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Producer throughput = 50 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And four consumer groups read every event:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Billing      = 50 MB\/sec\nAnalytics    = 50 MB\/sec\nFraud        = 50 MB\/sec\nSearch       = 50 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Total egress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>50 \u00d7 4\n=\n200 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Notice:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ingress = 50 MB\/sec\n\nEgress = 200 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Do not assume ingress and egress are equal.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. Egress CKU Example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dedicated CKU egress capacity is currently approximately:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>180 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you need:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>200 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">calculate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>200 \/ 180\n\n=\n1.11<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Round up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Again, production headroom still needs to be considered.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. Dimension 3 \u2014 Partitions<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A Kafka topic is divided into partitions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>orders\n\n\u251c\u2500\u2500 P0\n\u251c\u2500\u2500 P1\n\u251c\u2500\u2500 P2\n\u251c\u2500\u2500 P3\n\u251c\u2500\u2500 P4\n\u2514\u2500\u2500 ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Partitions provide much of Kafka&#8217;s:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Parallelism\nScalability\nConsumer concurrency<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A Dedicated CKU currently supports up to <strong>4,500 pre-replication partitions<\/strong> as the published capacity dimension. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/cluster-types.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose your cluster needs:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8,000 partitions<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>8,000 \/ 4,500\n\n=\n1.78<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Round up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Important<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This does <strong>not<\/strong> mean:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u201c4,500 partitions per CKU is the recommended number of partitions.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">It means it is a capacity limit\/dimension.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your actual partition count should depend on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Throughput\n+\nConsumer Parallelism\n+\nOrdering Requirements\n+\nKey Distribution<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">We will cover this deeply in the dedicated <strong>Partition Strategy tutorial<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Dimension 4 \u2014 Connections<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Kafka clients maintain connections to Kafka.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Examples:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Producers\nConsumers\nKafka Connect\nKafka Streams\nFlink\nAdmin clients\nCluster Linking<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Current Dedicated guidance provides:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>18,000 client connections \/ CKU<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">as the per-CKU capacity dimension. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/cluster-types.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Expected connections\n=\n25,000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>25,000 \/ 18,000\n\n=\n1.39<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Round up:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. Connections vs Connection Attempts<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">These are different.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Existing connections<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Application\n     \u2502\n     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 persistent connection \u2500\u2500\u2500\u2500\u2500\u2500\u2500 Kafka<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Connection attempts<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Connect\nDisconnect\n\nConnect\nDisconnect\n\nConnect\nDisconnect<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Repeated connection creation can create additional load.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Kafka clients should normally be <strong>long-lived<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bad:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP request\n   \u2193\nCreate producer\n   \u2193\nProduce\n   \u2193\nClose producer<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Better:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Application starts\n       \u2193\nCreate Producer\n       \u2193\nReuse Producer\n       \u2193\nApplication shuts down\n       \u2193\nClose Producer<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. Dimension 5 \u2014 Request Rate<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose Producer A sends:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>1 message\nper Kafka request<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">while Producer B sends:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>500 messages\nper Kafka request<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Producer A creates far more requests.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Tiny Messages\n+\nNo Batching\n=\nLots of Kafka Requests<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is one reason why producer batching matters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Later, in the <strong>Producer Performance tutorial<\/strong>, we will tune:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>batch.size\nlinger.ms\ncompression.type\nbuffer.memory<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. The Master CKU Formula<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Calculate each dimension separately.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ingress CKUs\n=\nPeak Ingress \/ CKU Ingress Capacity<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Egress CKUs\n=\nPeak Egress \/ CKU Egress Capacity<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Partition CKUs\n=\nPartition Count \/ CKU Partition Capacity<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Connection CKUs\n=\nConnections \/ CKU Connection Capacity<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Required CKUs\n=\nMAX(\n    Ingress CKUs,\n    Egress CKUs,\n    Partition CKUs,\n    Connection CKUs,\n    Other Capacity Constraints\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finally:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Round Up\n    +\nHA requirement\n    +\nHeadroom\n    +\nExpected growth\n    +\nBenchmark result<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Complete Real-World Example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose an e-commerce platform expects:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Peak ingress    = 90 MB\/sec\nPeak egress     = 250 MB\/sec\nPartitions      = 8,000\nConnections     = 25,000<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Ingress<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>90 \/ 60\n=\n1.5\n\n\u2192 2 CKUs<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Egress<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>250 \/ 180\n=\n1.39\n\n\u2192 2 CKUs<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Partitions<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>8000 \/ 4500\n=\n1.78\n\n\u2192 2 CKUs<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Connections<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>25000 \/ 18000\n=\n1.39\n\n\u2192 2 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore mathematical minimum:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But look at ingress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 \u00d7 60\n=\n120 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Peak traffic:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>90 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Approximate usage:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>90 \/ 120\n=\n75%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s already fairly high for expected peak production traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So I would benchmark:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">as the stronger candidate.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. Why Multi-Zone Starts at 2 CKUs<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a <strong>Dedicated Multi-Zone Confluent Cloud cluster<\/strong>, the current minimum is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>2 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Confluent spreads a Multi-Zone Dedicated cluster across three availability zones and requires at least two CKUs. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/cluster-types.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore even if your calculation says:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0.8 CKU<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">your architecture requirement can say:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Dedicated\n+\nMulti-Zone\n\n\u2192 minimum 2 CKUs<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. Cluster Load<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">One of the most important Confluent Dedicated metrics is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Cluster Load %<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">It ranges from:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0%\n\u2502\n\u2502 No load\n\n...\n\n100%\n\u2502\n\u2514 Fully saturated<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Confluent provides both:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Average Cluster Load<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">and:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Maximum Cluster Load<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/monitoring\/monitor-performance.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. Why Average AND Maximum Matter<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Average Cluster Load = 35%\n\nMaximum Cluster Load = 92%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is suspicious.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It often suggests:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Skewed Traffic\n     \u2193\nHot Partition\n     \u2193\nOne part overloaded\n     \u2193\nRest underutilized<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Confluent specifically recommends investigating hot partitions when maximum cluster load is high but average load is much lower. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/monitoring\/monitor-performance.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. 70\u201380% Production Rule<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Current Confluent guidance says:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>70\u201380% sustained load\n\u2192 consider adding CKUs\n\n80%+\n\u2192 expect increased throttling \/\n   degraded performance risk<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/monitoring\/monitor-performance.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your original checklist uses the same operational idea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Normal load &lt; 60\u201370%\nPeak load   &lt; 80%\nEmergency capacity available<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is a sensible production target.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Why Headroom Is Important<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose your cluster normally runs at:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>95%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then a 20% traffic spike occurs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You have almost no spare capacity.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compare:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Normal load\n55%\n\nTraffic spike\n+20%\n\nResult\n75%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Much healthier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Capacity headroom protects against:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Traffic spikes\nConsumer catch-up\nNew consumers\nDeployments\nFailures\nLarge payloads\nBusiness growth\nUnexpected workloads<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Unused capacity is not automatically waste.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In production it can represent <strong>resilience<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Growth Planning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Suppose today&#8217;s peak ingress is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>60 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Expected growth:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>50%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Next-period forecast:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>60 \u00d7 1.50\n\n=\n90 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But don&#8217;t forecast only ingress.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Forecast:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Ingress growth\nEgress growth\nPartition growth\nConsumer-group growth\nConnection growth<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">independently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example, ingress may grow only 20%, while adding four analytics applications may make egress grow 300%.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. Real-World Confluent Capacity Lab<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Assume:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Peak messages\/sec = 50,000\n\nAverage message\n= 2 KB\n\nConsumer groups\n= 3\n\nPartitions\n= 500\n\nGrowth forecast\n= 30%<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1 \u2014 Calculate ingress<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>50,000 \u00d7 2 KB\n\n\u2248 100 MB\/sec<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2 \u2014 Calculate egress<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Three complete consumer groups:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 \u00d7 3\n\n=\n300 MB\/sec<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3 \u2014 Apply growth<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ingress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>100 \u00d7 1.30\n\n=\n130 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Egress:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>300 \u00d7 1.30\n\n=\n390 MB\/sec<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4 \u2014 CKUs from ingress<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>130 \/ 60\n\n=\n2.17\n\n\u2192 3 CKUs<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step 5 \u2014 CKUs from egress<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>390 \/ 180\n\n=\n2.17\n\n\u2192 3 CKUs<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Candidate:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 CKUs<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. But the Calculation Is NOT the Final Answer<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This is extremely important.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Do not say:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Formula says 3 CKUs, therefore production needs exactly 3 CKUs.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Instead:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Requirements\n    \u2193\nCapacity Calculation\n    \u2193\nCandidate CKU Count\n    \u2193\nLoad Test\n    \u2193\nObserve Metrics\n    \u2193\nTune\n    \u2193\nProduction CKU Count<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The spreadsheet gives you a <strong>starting point<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The benchmark gives you the <strong>production answer<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. What Should We Measure During the Test?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Monitor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Cluster Load\nMaximum Cluster Load\nIngress MB\/sec\nEgress MB\/sec\nProducer latency\nConsumer lag\nClient throttling\nHot partitions\nConnections\nRequest rate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Current Confluent guidance recommends looking at cluster load, CKU count, hot partitions, consumer lag, throttling and producer latency together when deciding whether expansion is appropriate. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/monitoring\/monitor-performance.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">23. Troubleshooting High Load<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Use this flow:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Kafka Performance Problem\n          \u2502\n          \u25bc\nCheck Cluster Load\n          \u2502\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2510\n    \u2502           \u2502\n High          Low\n    \u2502           \u2502\n    \u25bc           \u25bc\nCheck CKUs   Check hot\n             partitions\n                \u2502\n          \u250c\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2510\n          \u2502           \u2502\n         Hot         Balanced\n          \u2502           \u2502\n          \u25bc           \u25bc\n      Fix key      Check client\n      strategy     behavior\n                       \u2502\n                 \u250c\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2510\n                 \u25bc     \u25bc     \u25bc\n              Batching Lag Connections<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">24. Common Mistakes<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 1 \u2014 Sizing from average traffic<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>Average = 20 MB\/sec\n\nPeak = 100 MB\/sec<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Always design around realistic peak load.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 2 \u2014 Ignoring egress<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">One producer stream may have:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>5 consumer groups<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">which can make read traffic much larger than write traffic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 3 \u2014 Ignoring partitions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A cluster can hit a partition constraint even when throughput is not saturated.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 4 \u2014 Ignoring hot partitions<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>P0 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 80%\nP1 \u2588\u2588                 7%\nP2 \u2588\u2588                 7%\nP3 \u2588\u2588                 6%<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">cannot be understood from average cluster load alone.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 5 \u2014 Assuming CKUs solve every issue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes the real issue is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bad partition key\nBad batching\nSlow consumer\nToo few partitions\nConnection churn\nSlow database\nBad networking<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Mistake 6 \u2014 Running permanently at 90\u2013100%<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">It may work today.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It has little resilience for tomorrow.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">25. Scaling a Dedicated Cluster<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Dedicated clusters scale by changing the CKU count.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>confluent kafka cluster update lkc-abc123 --cku 3<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Confluent supports increasing or reducing CKUs on a Dedicated cluster; Multi-Zone Dedicated clusters cannot be reduced below two CKUs. (<a href=\"https:\/\/docs.confluent.io\/cloud\/current\/clusters\/resize.html?utm_source=chatgpt.com\">Confluent Documentation<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">26. Capacity Planning vs Performance Tuning<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">These are related but different.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Capacity Planning<\/th><th>Performance Tuning<\/th><\/tr><\/thead><tbody><tr><td>How much Kafka capacity?<\/td><td>How efficiently do clients use it?<\/td><\/tr><tr><td>CKUs<\/td><td><code>batch.size<\/code><\/td><\/tr><tr><td>Ingress<\/td><td><code>linger.ms<\/code><\/td><\/tr><tr><td>Egress<\/td><td>Compression<\/td><\/tr><tr><td>Partitions<\/td><td>Fetch settings<\/td><\/tr><tr><td>Connections<\/td><td>Producer\/consumer concurrency<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Bad batching\n       \u2193\nToo many requests\n       \u2193\nKafka capacity wasted inefficiently<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Capacity Planning\n        +\nProducer Tuning\n        +\nConsumer Tuning\n        +\nPartition Design\n        =\nHigh Kafka Performance<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">27. Production Capacity Checklist<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Before production I want these numbers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Peak messages\/sec\nPeak ingress MB\/sec\nPeak egress MB\/sec\n\nAverage message size\nMaximum message size\n\nTopic count\nPartition count\n\nProducer instances\nConsumer groups\nConsumer instances\n\nClient connections\nConnection attempts\n\nRetention\n\n6\u201312 month growth\n\nExpected burst traffic\n\nLatency SLA\nAvailability SLA\n\nRPO\nRTO<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If these numbers are unknown, Kafka sizing is largely guesswork.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">28. GOLD Production Recommendation<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">For a critical Confluent Cloud workload:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>                Workload Forecast\n                       \u2502\n                       \u25bc\n           Calculate Peak Ingress\n                       \u2502\n                       \u25bc\n            Calculate Peak Egress\n                       \u2502\n                       \u25bc\n             Check Partitions\n                       \u2502\n                       \u25bc\n             Check Connections\n                       \u2502\n                       \u25bc\n          Determine Required CKUs\n                       \u2502\n                       \u25bc\n              Add HA Minimum\n                       \u2502\n                       \u25bc\n               Add Headroom\n                       \u2502\n                       \u25bc\n                Load Test\n                       \u2502\n                       \u25bc\n             Monitor Cluster Load\n                       \u2502\n                       \u25bc\n              Production Ready<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Golden Rule<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Size Kafka for peak traffic, keep operational headroom, and validate the calculation with a realistic benchmark.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">And remember:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Capacity Calculation\n        \u2260\nFinal Production Size\n\nCapacity Calculation\n        \u2193\nStarting Point\n        \u2193\nBenchmark\n        \u2193\nProduction Size<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is the <strong>GOLD-standard mental model for Confluent Cloud Kafka capacity planning<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. What is Kafka Capacity Planning? Capacity planning means calculating how much Kafka capacity your application needs before production traffic arrives. In simple words: How big should&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1141","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1141","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1141"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1141\/revisions"}],"predecessor-version":[{"id":1143,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1141\/revisions\/1143"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1141"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1141"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}