{"id":1026,"date":"2025-09-03T02:50:45","date_gmt":"2025-09-03T02:50:45","guid":{"rendered":"https:\/\/sreschool.com\/blog\/?p=1026"},"modified":"2025-09-03T02:50:46","modified_gmt":"2025-09-03T02:50:46","slug":"kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions","status":"publish","type":"post","link":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/","title":{"rendered":"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1) Quick definitions (the mental model)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Topic<\/strong><br>A named stream of messages (events). Producers write to a topic; consumers read from it.<\/li>\n\n\n\n<li><strong>Partition<\/strong><br>A topic is split into <strong>partitions<\/strong>\u2014append-only logs with offsets 0,1,2,\u2026<br><strong>Ordering is guaranteed only within a partition.<\/strong> There is no global order across partitions.<\/li>\n\n\n\n<li><strong>Consumer group<\/strong><br>A logical application (one name) that reads a topic. Kafka ensures each partition is read by <strong>at most one<\/strong> member of the group at a time, so the group processes the stream once.<\/li>\n\n\n\n<li><strong>Consumer process (a.k.a. worker \/ pod \/ container \/ JVM)<\/strong><br>A running OS process that joins the consumer group.<\/li>\n\n\n\n<li><strong>KafkaConsumer instance<\/strong><br>The client <strong>object<\/strong> inside your process (e.g., <code>new KafkaConsumer&lt;>(props)<\/code> in Java) that talks to brokers. <strong>Kafka assigns partitions to these instances.<\/strong><br>Important: <strong>KafkaConsumer is not thread-safe<\/strong>\u2014only one thread should call its methods (<code>poll<\/code>, <code>commit<\/code>, <code>seek<\/code>, \u2026).<\/li>\n\n\n\n<li><strong>Thread<\/strong><br>An execution lane inside a process. Common safe patterns are:\n<ol class=\"wp-block-list\">\n<li><strong>One KafkaConsumer per thread<\/strong> (multi-consumer, multi-thread).<\/li>\n\n\n\n<li><strong>One polling thread + worker pool<\/strong> (poll in one thread, hand work to others; poller still commits).<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2) How messages land in partitions<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>With a key<\/strong>: <code>partition = hash(key) % numPartitions<\/code>.<br>Every event with the same key (e.g., <code>orderId<\/code>) goes to the same partition \u2192 preserves per-key order.<\/li>\n\n\n\n<li><strong>Without a key<\/strong>: modern clients use a <strong>sticky<\/strong> strategy (send batches to one partition, then switch) for throughput. Over time the distribution is roughly even, but there\u2019s no cross-partition order.<\/li>\n<\/ul>\n\n\n\n<p><strong>Rule of thumb:<\/strong> choose a key that spreads load evenly but keeps events for the same entity together.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3) How partitions are assigned to consumers<\/h2>\n\n\n\n<p>When your group runs, the <strong>group coordinator<\/strong> maps partitions \u2192 <strong>KafkaConsumer instances<\/strong>. Triggers for rebalance: a member joins\/leaves\/crashes, subscriptions change, or a consumer stops heartbeating (e.g., blocked poll loop).<\/p>\n\n\n\n<p><strong>Assignor strategies:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Range<\/strong>: contiguous ranges; can skew.<\/li>\n\n\n\n<li><strong>Round robin<\/strong>: even spread; less stable across changes.<\/li>\n\n\n\n<li><strong>Sticky \/ Cooperative sticky<\/strong>: keeps prior mapping to reduce churn; <strong>cooperative sticky<\/strong> does incremental hand-offs and is the recommended default.<\/li>\n<\/ul>\n\n\n\n<p><strong>Best practice:<\/strong> use <strong>cooperative sticky assignor<\/strong> and <strong>static membership<\/strong> (<code>group.instance.id<\/code>) so quick restarts don\u2019t cause full rebalances.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4) Concurrency inside a worker (safe blueprints)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Per-partition serial lanes (simple &amp; safe)<\/strong><br>For each assigned partition, process serially on its own single-thread executor. Preserves partition order automatically.<\/li>\n\n\n\n<li><strong>Per-key serialization atop a worker pool (higher throughput)<\/strong><br>Poll on one thread, dispatch records to a pool <strong>but keep per-key FIFO queues<\/strong> so each key is processed in sequence. Commit only when all records up to an offset are done.<\/li>\n<\/ul>\n\n\n\n<p><strong>Never<\/strong> have multiple threads call <code>poll<\/code>\/<code>commit<\/code> on the <strong>same<\/strong> KafkaConsumer instance.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5) Sizing and throughput planning<\/h2>\n\n\n\n<p>Let:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>R<\/code> = records\/sec per consumer instance<\/li>\n\n\n\n<li><code>T<\/code> = average processing time per record (seconds)<\/li>\n<\/ul>\n\n\n\n<p><strong>Required concurrency \u2248 <code>R \u00d7 T<\/code><\/strong> (Little\u2019s Law).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>CPU-bound<\/strong>: thread pool \u2248 number of vCPUs; batching can help.<\/li>\n\n\n\n<li><strong>I\/O-bound<\/strong>: pool \u2248 <code>R \u00d7 T \u00d7 (1.5\u20133)<\/code> with <strong>per-partition or per-key caps<\/strong> to preserve order. Use <strong>bounded queues<\/strong> and <code>pause\/resume<\/code> partitions for backpressure.<\/li>\n<\/ul>\n\n\n\n<p><strong>Partitions count<\/strong> (rough baseline):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Estimate peak MB\/s.<\/li>\n\n\n\n<li>Target ~<strong>1\u20133 MB\/s per partition<\/strong>.<\/li>\n\n\n\n<li>Partitions \u2248 <code>(needed MB\/s) \/ (target per-partition MB\/s)<\/code>, then add <strong>1.5\u20132\u00d7 headroom<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6) Best practices (checklist)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>enable.auto.commit=false<\/code>; <strong>commit after processing<\/strong> contiguous offsets.<\/li>\n\n\n\n<li>Keep poll loop responsive; do I\/O on worker threads; tune <code>max.poll.records<\/code>.<\/li>\n\n\n\n<li>Use <strong>cooperative sticky<\/strong> assignor + <strong>static membership<\/strong>.<\/li>\n\n\n\n<li>Use <strong>keys<\/strong> for per-entity ordering; avoid hot keys.<\/li>\n\n\n\n<li><strong>Bound everything<\/strong>: worker queues, per-key maps (LRU), in-flight per partition.<\/li>\n\n\n\n<li>Monitor <strong>lag per partition<\/strong>, processing latency, rebalances, and skew.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7) Limitations &amp; trade-offs<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Max parallelism per group = number of partitions.<\/strong> Extra consumers beyond partitions sit idle.<\/li>\n\n\n\n<li><strong>No global order<\/strong> across partitions.<\/li>\n\n\n\n<li><strong>Hot partitions<\/strong> bottleneck throughput; fix keying or add partitions.<\/li>\n\n\n\n<li><strong>Too many partitions<\/strong> increase broker metadata, open files, recovery time, and rebalance duration.<\/li>\n\n\n\n<li><strong>Increasing partitions<\/strong> remaps <code>hash(key) % N<\/code> \u2192 future events for a key may move; plan migrations carefully (often to a new topic).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">8) Tiny example (end-to-end)<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Topic <code>orders<\/code> has <strong>6 partitions<\/strong>.<\/li>\n\n\n\n<li>Consumer group <code>orders-service<\/code> runs <strong>2 processes<\/strong>.<br>Process A has <strong>2 threads<\/strong> (2 KafkaConsumer instances). Process B has <strong>1 thread<\/strong> (1 instance).<br>Kafka assigns partitions across these <strong>3 instances<\/strong>; each instance may own multiple partitions.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">One diagram to tie it all together<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>flowchart TB\n  %% Topic and partitions\n  subgraph Topic&#91;Topic orders with 6 partitions]\n    direction LR\n    P0&#91;P0]\n    P1&#91;P1]\n    P2&#91;P2]\n    P3&#91;P3]\n    P4&#91;P4]\n    P5&#91;P5]\n  end\n\n  %% Consumer group and processes\n  subgraph Group&#91;Consumer group orders-service]\n    direction LR\n\n    subgraph A&#91;Consumer process A (worker)]\n      direction TB\n      A1&#91;Thread 1\\nKafkaConsumer #1]\n      A2&#91;Thread 2\\nKafkaConsumer #2]\n    end\n\n    subgraph B&#91;Consumer process B (worker)]\n      direction TB\n      B1&#91;Thread 1\\nKafkaConsumer #3]\n    end\n  end\n\n  %% Example assignment (one moment in time)\n  P0 --&gt; A1\n  P3 --&gt; A1\n  P1 --&gt; A2\n  P4 --&gt; A2\n  P2 --&gt; B1\n  P5 --&gt; B1\n\n  %% Notes\n  Note&#91;Rules:\\n- One partition to at most one consumer instance in a group\\n- A consumer instance may own multiple partitions\\n- KafkaConsumer is not thread safe\\n- Ordering is per partition only]\n  Group --- Note\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">TL;DR<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Topic<\/strong> = stream; <strong>Partition<\/strong> = ordered shard; <strong>Group<\/strong> = app;<\/li>\n\n\n\n<li><strong>Process\/Worker<\/strong> = running app instance; <strong>KafkaConsumer instance<\/strong> = the client object that owns partitions; <strong>Thread<\/strong> = how you parallelize work safely.<\/li>\n\n\n\n<li>Scale by <strong>partitions \u2192 instances \u2192 threads<\/strong>, preserve order per partition or per key, and keep the poll loop fast with manual commits.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1) Quick definitions (the mental model) 2) How messages land in partitions Rule of thumb: choose a key that spreads [&hellip;]<\/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-1026","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School\" \/>\n<meta property=\"og:description\" content=\"1) Quick definitions (the mental model) 2) How messages land in partitions Rule of thumb: choose a key that spreads [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/\" \/>\n<meta property=\"og:site_name\" content=\"SRE School\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-03T02:50:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-03T02:50:46+00:00\" \/>\n<meta name=\"author\" content=\"Rajesh Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rajesh Kumar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/\",\"url\":\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/\",\"name\":\"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School\",\"isPartOf\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#website\"},\"datePublished\":\"2025-09-03T02:50:45+00:00\",\"dateModified\":\"2025-09-03T02:50:46+00:00\",\"author\":{\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\"},\"breadcrumb\":{\"@id\":\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/sreschool.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/sreschool.com\/blog\/#website\",\"url\":\"https:\/\/sreschool.com\/blog\/\",\"name\":\"SRESchool\",\"description\":\"Master SRE. Build Resilient Systems. Lead the Future of Reliability\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/sreschool.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201\",\"name\":\"Rajesh Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"caption\":\"Rajesh Kumar\"},\"sameAs\":[\"http:\/\/sreschool.com\/blog\"],\"url\":\"https:\/\/sreschool.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/","og_locale":"en_US","og_type":"article","og_title":"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School","og_description":"1) Quick definitions (the mental model) 2) How messages land in partitions Rule of thumb: choose a key that spreads [&hellip;]","og_url":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/","og_site_name":"SRE School","article_published_time":"2025-09-03T02:50:45+00:00","article_modified_time":"2025-09-03T02:50:46+00:00","author":"Rajesh Kumar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rajesh Kumar","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/","url":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/","name":"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions - SRE School","isPartOf":{"@id":"https:\/\/sreschool.com\/blog\/#website"},"datePublished":"2025-09-03T02:50:45+00:00","dateModified":"2025-09-03T02:50:46+00:00","author":{"@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201"},"breadcrumb":{"@id":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sreschool.com\/blog\/kafka-consumer-group-vs-worker-vs-thread-vs-consumer-instance-vs-topic-vs-partitions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sreschool.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kafka: Consumer Group vs Worker vs Thread vs Consumer Instance vs Topic vs Partitions"}]},{"@type":"WebSite","@id":"https:\/\/sreschool.com\/blog\/#website","url":"https:\/\/sreschool.com\/blog\/","name":"SRESchool","description":"Master SRE. Build Resilient Systems. Lead the Future of Reliability","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sreschool.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":"Person","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201","name":"Rajesh Kumar","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","caption":"Rajesh Kumar"},"sameAs":["http:\/\/sreschool.com\/blog"],"url":"https:\/\/sreschool.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/1026","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/comments?post=1026"}],"version-history":[{"count":1,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/1026\/revisions"}],"predecessor-version":[{"id":1027,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/1026\/revisions\/1027"}],"wp:attachment":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/media?parent=1026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/categories?post=1026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/tags?post=1026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}